这个时间很难......
XLS(我在我的ASP.NET应用程序上使用NPOI)100%工作:
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
private MemoryStream ms = new MemoryStream();
private IWorkbook workbook;
private ISheet worksheet;
private byte[] buffer;
using (FileStream file = new FileStream(@"C:\template.xls", FileMode.Open, FileAccess.Read))
{
workbook = new HSSFWorkbook(file);
}
worksheet = workbook.GetSheetAt(0);
worksheet.GetRow(11).GetCell(11).SetCellValue("hello"); // etc etc etc
workbook.Write(ms);
buffer = ms.ToArray();
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
response.AddHeader("Content-Type", "application/vnd.ms-excel");
response.AddHeader("Content-Disposition", String.Format("attachment; filename=template.xls; size={0}", buffer.Length.ToString()));
response.BinaryWrite(buffer);
response.End();
要求已更改,新的Excel模板使用XLSX中的功能,因此它现在为template.xlsx
。我一直在使用NPOI 2.0,我发现它支持XLSX(使用XSSF而不是HSSF)。我改变了这样的代码(只显示了这里的差异 - 其他一切都是一样的):
using NPOI.XSSF.UserModel;
using (FileStream file = new FileStream(@"C:\template.xlsx", FileMode.Open, FileAccess.Read))
{
workbook = new XSSFWorkbook(file);
}
response.AddHeader("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.AddHeader("Content-Disposition", String.Format("attachment; filename=template.xlsx; size={0}", buffer.Length.ToString()));
行workbook.Write(ms);
抛出异常:
System.NotImplementedException: The method or operation is not implemented.
at NPOI.XSSF.UserModel.XSSFChartSheet.Write(Stream out1)
at NPOI.XSSF.UserModel.XSSFSheet.Commit()
at NPOI.POIXMLDocumentPart.OnSave(List`1 alreadySaved)
at NPOI.POIXMLDocumentPart.OnSave(List`1 alreadySaved)
at NPOI.POIXMLDocument.Write(Stream stream)
我可能做错了什么?
编辑我已经尝试过NPOI 2.1.1 Beta - 同样的问题
答案 0 :(得分:3)
我使用您的示例代码和一堆不同的XLSX文件运行了一些测试。根据结果和您获得的异常,问题不在于您的代码,而在于您正在使用的NPOI库和XLSX模板文件。
基本上,在Excel中,您可以通过两种方式显示图表:
您的XLSX模板似乎包含图表工作表,并且在尝试写出图表工作表(XSSFChartSheet.Write
)时发生错误。目前,NPOI有no support用于写出XLSX图表,它只是抛出异常。
这为您提供了三个选项: