NPOI 2.2.1生成不正确的XLSX文件

时间:2016-06-23 13:31:55

标签: c# npoi

我有NPOI 2.2.1并且我意识到在生成XLSX文件并使用Excel 2013打开时,会出现一个消息框,告诉您遇到了问题,但Excel可能会尝试从中恢复。单击“是”时,最终显示工作表。

这是代码:

        IWorkbook workbook = new XSSFWorkbook();
        ISheet sheet = workbook.CreateSheet(this.Title);

        using (var exportData = new MemoryStream())
        {
            workbook.Write(exportData);
            return exportData.GetBuffer();
        }

如您所见,我只创建工作簿,添加工作表然后返回bytes数组。该数组使用以下代码存储在文件中:

            string targetFile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), String.Concat(btnExportar.Tag, "_", DateTime.Now.ToString("yyyyMMddHHmmss"), ".xlsx"));
            System.IO.File.WriteAllBytes(targetFile, xls.GetExcelData());

使用XLS文件没有问题。

此致 海梅

1 个答案:

答案 0 :(得分:2)

问题不在于NPOI,而在于您使用http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html#user-data-execution。这不是您想要用于此目的的方法,因为GetBuffer()返回内存流底层的原始缓冲区(通常是超大),而不会在流的当前位置切断它。这将在最后留下未初始化的数据,从而导致Excel中的错误消息。

从MemoryStream中获取所有字节,使用GetBuffer()

using (var exportData = new MemoryStream())
{
    workbook.Write(exportData);
    // return exportData.GetBuffer();
    return exportData.ToArray();
}