2013-11-09 839 views
5

我想寫一些內容使用NPOI的excel文件。但是,使用自動調整大小的列方法會導致錯誤「參數無效」。這僅適用於數據量巨大的工作表。以下是我用來完成這項工作的代碼。NPOI自動調整大小列

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; 
    } 
} 
+1

你有沒有想通了這一點。導出包含多行的網格時,我正在運行它。 System.ArgumentException:參數無效。在System.Drawing.Bitmap..ctor(Int32寬度,Int32高度,PixelFormat格式) at System.Drawing.Bitmap..ctor(Int32 width,Int32 height) at NPOI.SS.Util.SheetUtil.GetCellWidth(ICell cell ,的Int32 defaultCharWidth,DataFormatter格式化器,布爾useMergedCells) 在NPOI.SS.Util.SheetUtil.GetColumnWidth(ISheet片,的Int32柱,布爾useMergedCells) 在NPOI.HSSF.UserModel.HSSFSheet.AutoSizeColumn(的Int32柱,布爾useMergedCells) –

回答

4

可以解決之間自動調整大小調用使用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)