NPOI - 写入文件损坏.xlsx工作簿

Jam*_* IV 4 c# xlsx npoi

我有一段代码,当前写入.xls工作簿(HSSFWorkbook)没有问题.但是,当我尝试使用相同的代码写入.xlsx工作簿(XSSFWorkbook)时,存档已损坏,无法在Excel中打开.

下面的代码是我用来访问工作簿,编辑工作簿,然后保存回工作簿.我最初假设我用来编辑工作簿的代码是问题,但在评论之后问题仍然存在.

IWorkbook workbook;
using (var file = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    if (Path.GetExtension(fileName).Contains("xlsx"))
    {
        workbook = new XSSFWorkbook(file);
    }
    else
    {
        workbook = new HSSFWorkbook(file);
    }
}

//Code that edits workbook which is currently commented out

using (var file = new FileStream(path, FileMode.Open, FileAccess.ReadWrite))
{
    workbook.Write(file);
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试对空白.xlsx工作簿运行此代码,文件已损坏,无法再打开.

我正在使用nuget的最新稳定版NPOI: NPOI 2.1.3.1

Jam*_* IV 6

在尝试了NPOI的Codeplex上提到的所有内容后无济于事,我尝试搞乱这些FileStream属性并且能够得到空白.xslx来保存.我使用以下代码写回文件:

using (var file = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
{
    workbook.Write(file);
}
Run Code Online (Sandbox Code Playgroud)

这解决了保存回到a的主要问题XssfWorkbook.

  • 对于未来的读者:请注意保存一个空的工作簿(在新的XSSFWorkbook()之后;`也会破坏`.xlsx`文件.为避免这种情况,请在工作簿中创建一个空工作表(`workbook.CreateSheet()`)保存工作簿. (2认同)