我正在尝试使用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;
}
}
答案 0 :(得分:5)
您可以在AutoSize调用之间使用GC.Collect()
(Garbage Collector)解决此问题。这不是最好的解决方案,但似乎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
}
没有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)
答案 1 :(得分:0)
有两种解决方案: 1。
for (int i = 0; i < columnNames.Count; i++)
{
sheet.AutoSizeColumn(i);
}
2。
for (int i = 0; i < columnNames.Count; i++)
{
sheet.SetColumnWidth(i, (columns[columnNames[i]].ToString().Length) * 2 * 256);
}