我正在尝试使用NPOI将一些内容写入excel文件.但是使用自动调整大小列方法时会导致错误"参数无效".这仅适用于包含大量数据的工作表.下面是我用来完成这项工作的代码.
public void CloseDatabaseLogFile()
{
try
{
FileStream sw = File.Create(excelSheetPath);
oSheet.AutoSizeColumn(0);
oSheet.SetColumnWidth(1, 8400);
oSheet.AutoSizeColumn(2);
oSheet.AutoSizeColumn(3);
oSheet.AutoSizeColumn(4);
oSheet.AutoSizeColumn(5);
oSheet.AutoSizeColumn(6);
oSheet.AutoSizeColumn(7);
oSheet.AutoSizeColumn(8);
oSheet.AutoSizeColumn(9);
oSheet.AutoSizeColumn(10);
workbook.Write(sw);
sw.Close();
}
catch (Exception e)
{
throw e;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在两次AutoSize调用之间使用GC.Collect()(垃圾收集器)解决此问题。这不是最好的解决方案,但是NPOI(2.0.1)似乎没有释放AutoSize功能所需的BitMap对象。
在自动调整大型Excel文件中的10列时,我在这里遇到了同样的问题。请参阅下面的固定代码:
int numberOfColumns = sheet.GetRow(rowOffSet).PhysicalNumberOfCells;
for (int i = 1; i <= numberOfColumns; i++)
{
sheet.AutoSizeColumn(i);
GC.Collect(); // Add this line
}
Run Code Online (Sandbox Code Playgroud)
没有GC.Collect(),我会遇到以下错误:
System.ArgumentException: Parameter is not valid.
at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)
at NPOI.SS.Util.SheetUtil.GetCellWidth(ICell cell, Int32 defaultCharWidth, DataFormatter formatter, Boolean useMergedCells)
at NPOI.SS.Util.SheetUtil.GetColumnWidth(ISheet sheet, Int32 column, Boolean useMergedCells)
at NPOI.XSSF.UserModel.XSSFSheet.AutoSizeColumn(Int32 column, Boolean useMergedCells)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9830 次 |
| 最近记录: |