假如读取了磁盘上某 Excel 文件,利用 DotNetCore.NPOI 操作。
但是如何保存回磁盘呢?
以下两种操作皆无法保存:
XSSFWorkbook workbook = new XSSFWorkbook(path); workbook.GetSheetAt(0).GetRow(0).GetCell(0).SetCellValue(new DateTime(2020, 1, 1)); workbook.Close(); // 此处应该 Close using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.ReadWrite)) { XSSFWorkbook workbook = new XSSFWorkbook(fs); workbook.GetSheetAt(0).GetRow(0).GetCell(0).SetCellValue(new DateTime(2020, 1, 1)); // 此处 Close 与否皆可,因为 fs 是放在 using 中的,Dispose 时会自动 Close 流。 // workbook.Close(); // fs.Close(); }
可以保存的方法:
XSSFWorkbook workbook = new XSSFWorkbook(path); workbook.GetSheetAt(0).GetRow(0).GetCell(0).SetCellValue(new DateTime(2020, 1, 3)); workbook.Write(null); workbook.Close();
增加一句:workbook.Write(null)。
如果这里 Write 的参数不是 null,而是另一个文件流,则两个文件都会保存起来。
我不知道是不是 BUG,总之,只要一调用 Write 就会对当前流、目标流进行保存。