WorkbookFactory.Create 上的 NPOI ArgumentOutOfRangeException

NPOI ArgumentOutOfRangeException on WorkbookFactory.Create

我一直在使用 NPOI 读取 Excel 个文件,现在我需要写出文件。我正在尝试使用 WorkbookFactory,它没有出现在很多在线示例中(也没有出现在 CodePlex 上的 NPOI 示例中)。这是代码:

this.FileStream = new FileStream(
    this.FilePath,
    FileMode.OpenOrCreate,
    FileAccess.ReadWrite);
this.Workbook = WorkbookFactory.Create(
    this.FileStream);

当它到达第二个语句时,我收到一个 ArgumentOutOfRangeException 和以下消息:"Non-negative number required.\r\nParameter name: value".

调用堆栈中接下来的几行:

at System.IO.FileStream.set_Position(Int64 value)
at NPOI.Util.PushbackStream.set_Position(Int64 value)
at NPOI.POIXMLDocument.HasOOXMLHeader(Stream inp)
at NPOI.SS.UserModel.WorkbookFactory.Create(Stream inputStream)

WorkbookFactory(link 到 POI 文档)从输入流中读取 现有 文件数据,并即时确定是否创建 HSSFWorkbookXSSFWorkbook(即无论您使用的是 XLS 还是类似 XLSX 的文件)。

从您的代码来看,您似乎正在尝试使用此 class 创建一个 new 文件。这不是 WorkbookFactory 可以帮助您的事情。要 写入 个文件,请使用以下模式:

var workbook = new XSSFWorkbook();
...
using (var fileData = new FileStream(@"path\filename.xlsx", FileMode.Create))
{
  workbook.Write(fileData);
}

(换句话说,WorkbookFactory 是一个 class 工厂,而不是 file 工厂 :-))