2013-11-09 20 views
5

Sto tentando di scrivere alcuni contenuti nel file excel utilizzando NPOI. Ma mentre si utilizza il metodo di ridimensionamento automatico della colonna sta causando un errore "Parametro non valido". Questo accade solo per i fogli con enormi dati. Di seguito è riportato il codice che ho usato per fare il lavoro.NPOI Ridimensionamento automatico colonna

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

Hai mai capito questo. Ci sto provando durante l'esportazione di una griglia con molte righe. System.ArgumentException: il parametro non è valido. in System.Drawing.Bitmap..ctor (larghezza Int32, altezza Int32, formato PixelFormat) in System.Drawing.Bitmap..ctor (larghezza Int32, altezza Int32) in NPOI.SS.Util.SheetUtil.GetCellWidth (cella ICell , Int32 defaultCharWidth, DataFormatter formattatore, Boolean useMergedCells) in NPOI.SS.Util.SheetUtil.GetColumnWidth (foglio ISheet, colonna Int32, uso booleanoMergedCells) in NPOI.HSSF.UserModel.HSSFSheet.AutoSizeColumn (colonna Int32, Boolean useMergedCells) –

risposta

4

È possibile risolvere questo problema utilizzando GC.Collect() (Garbage Collector) fra AutoSize chiama. Questa non è la soluzione migliore, ma sembra che NPOI (2.0.1) non stia eliminando gli oggetti BitMap necessari per la funzione AutoSize.

Ho avuto lo stesso problema qui mentre autosizing 10 colonne in un grande file di Excel. Vedere il mio codice fisso di seguito:

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

Senza la GC.Collect(), ho avuto il seguente errore:

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) 
Problemi correlati