2013-11-09 13 views
5

Próbuję napisać kilka zawartość excel plik, używając NPOI. Ale podczas korzystania z metody automatycznej zmiany rozmiaru kolumna powoduje błąd "Parametr nie jest ważny". Dzieje się tak tylko w przypadku arkuszy z ogromnymi danymi. Poniżej znajduje się kod, którego użyłem do wykonania tej pracy.NPOI Automatyczna zmiana rozmiaru kolumny

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

Czy kiedykolwiek wyobrażał to. Używam go podczas eksportowania siatki z wieloma wierszami. System.ArgumentException: Parametr jest niepoprawny. w System.Drawing.Bitmap..ctor Int32 (szerokość, wysokość Int32, format PixelFormat) w System.Drawing.Bitmap..ctor Int32 (szerokość, wysokość Int32) w NPOI.SS.Util.SheetUtil.GetCellWidth (komórka Icell , Int32 defaultCharWidth, DataFormatter formatyzatora logiczne useMergedCells) w NPOI.SS.Util.SheetUtil.GetColumnWidth (ISheet arkusz kolumna Int32, logiczne useMergedCells) w NPOI.HSSF.UserModel.HSSFSheet.AutoSizeColumn (kolumna Int32, logiczne useMergedCells) –

Odpowiedz

4

Można rozwiązać ten problem przy użyciu GC.Collect() (Garbage Collector) pomiędzy AutoSize połączeń. To nie jest najlepsze rozwiązanie, ale wygląda na to, że NPOI (2.0.1) nie wyrzuca obiektów BitMap, które są potrzebne do funkcji AutoSize.

miałem ten sam problem tutaj podczas autosizing 10 kolumn w dużym pliku Excel. Zobacz moją stałą poniższy kod:

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

Bez GC.Collect(), miałem następujący błąd:

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)