gpt4 book ai didi

c# - NPOI 写入 XLS 而不是 XLSX

转载 作者:太空狗 更新时间:2023-10-29 23:31:00 25 4
gpt4 key购买 nike

遇到这个问题...

XLS 一切都 100% 有效(我在我的 ASP.NET 应用程序上使用 NPOI):

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 - 同样的问题

最佳答案

我用您的示例代码和一堆不同的 XLSX 文件运行了一些测试。根据结果​​和您得到的异常,问题不在于您的代码,而在于您正在使用的 NPOI 库和 XLSX 模板文件。

基本上,在 Excel 中,您可以通过两种方式显示图表:

  1. 嵌入到工作表中,以便工作表可以显示其他信息。
  2. 全部单独放在一张单独的纸上。这被称为 Chart Sheet .

您的 XLSX 模板似乎包含图表表,并且在尝试写出图表表时发生错误 (XSSFChartSheet.Write)。目前,NPOI 有 no support对于写出 XLSX 图表表,它只是抛出一个异常。

这给你留下了三个选择:

  1. 从您的 XLSX 文件中删除所有图表。
  2. 将模板中的所有图表工作表转换为嵌入式图表。请注意,在我的测试中,NPOI 对嵌入式图表的支持有点不确定。虽然它在写出它们时没有抛出异常,但生成的图表有时会在没有数据标签的地方添加数据标签,或者导致 Excel 通过删除图表本身来恢复文档。您的里程可能会有所不同。
  3. 放弃 NPOI 并使用其他一些库,例如 EPPlus它似乎支持 XLSX 文件中的图表,基于 this answer .

关于c# - NPOI 写入 XLS 而不是 XLSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25493112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com