2013-11-09 10 views
5

Я пытаюсь написать некоторое содержимое для файла excel с помощью NPOI. Но при использовании метода автоматического изменения размера столбца возникает ошибка «Параметр недействителен». Это происходит только для листов с огромными данными. Ниже приведен код, который я использовал для выполнения этой работы.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) в System.Drawing.Bitmap..ctor (ширина Int32, высота Int32) на NPOI.SS.Util.SheetUtil.GetCellWidth (ячейка ICell , Int32 defaultCharWidth, DataFormatter форматировщик, булевы useMergedCells) на NPOI.SS.Util.SheetUtil.GetColumnWidth (ISheet лист, столбец Int32, Boolean useMergedCells) в NPOI.HSSF.UserModel.HSSFSheet.AutoSizeColumn (колонка Int32, Boolean useMergedCells) –

ответ

4

Вы можете решить эту проблему с помощью GC.Collect() (Garbage Collector) между Авторазмер вызывает. Это не лучшее решение, но похоже, что NPOI (2.0.1) не удаляет объекты BitMap, необходимые для функции AutoSize.

У меня была такая же проблема при авторазметке 10 столбцов в большом файле Excel. Смотрите мой фиксированный код ниже:

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) 
Смежные вопросы