2013-11-09 12 views
5

Ich versuche, einige Inhalte zu schreiben, Datei mit NPOI zu übertreffen. Aber während der Verwendung der automatischen Größenanpassung verursacht die Spaltenmethode einen Fehler "Parameter nicht gültig". Dies geschieht nur für Blätter mit riesigen Datenmengen. Unten ist der Code, mit dem ich die Arbeit gemacht habe.NPOI Auto Spalte der Größe

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

Haben Sie jemals diese herausgefunden. Ich gehe darauf ein, wenn ich ein Gitter mit vielen Zeilen exportiere. System.ArgumentException: Parameter ist nicht gültig. bei System.Drawing.Bitmap..ctor (Int32 Breite, Int32 Höhe, PixelFormat Format) bei System.Drawing.Bitmap..ctor (Int32 Breite, Int32 Höhe) bei NPOI.SS.Util.SheetUtil.GetCellWidth (ICell Zelle , Int32 defaultCharWidth, DataFormatter Formatierer, Boolean useMergedCells) bei NPOI.SS.Util.SheetUtil.GetColumnWidth (ISheet Blatt, Int32 Spalte, Boolean useMergedCells) bei NPOI.HSSF.UserModel.HSSFSheet.AutoSizeColumn (Int32 Spalte, Boolean useMergedCells) –

Antwort

4

können Sie dieses Problem beheben mit GC.Collect() (Garbage Collector) zwischen Auto-Size-Anrufe. Dies ist nicht die beste Lösung, aber es scheint, dass NPOI (2.0.1) nicht die BitMap-Objekte entsorgt, die für die AutoSize-Funktion benötigt werden.

Ich hatte das gleiche Problem hier beim Autosizing 10 Spalten in einer großen Excel-Datei. Siehe meinen festen Code unten:

int numberOfColumns = sheet.GetRow(rowOffSet).PhysicalNumberOfCells; 
for (int i = 1; i <= numberOfColumns; i++) 
{ 
    sheet.AutoSizeColumn(i); 
    GC.Collect(); // Add this line 
} 

Ohne die GC.Collect(), hatte ich folgende Fehlermeldung:

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) 
Verwandte Themen