Hi,
When I generate a Worksheet with foreground colors for every row this is slow for small Excel files (say 1000 rows and 25 columns) and runs out memory for a 4000 row by 25 column Excel (the .xls file without the colors is about 400k). When I comment out the color code below it is significantly faster (about 5 times) and doesnt run out of memory.
Regards,
Bayram
When I generate a Worksheet with foreground colors for every row this is slow for small Excel files (say 1000 rows and 25 columns) and runs out memory for a 4000 row by 25 column Excel (the .xls file without the colors is about 400k). When I comment out the color code below it is significantly faster (about 5 times) and doesnt run out of memory.
Regards,
Bayram
private static Workbook CreateWorkbook(RadGridView grid, IEnumerable<string> skipColumns){ Workbook book = new Workbook(); book.Sheets.Add(SheetType.Worksheet); Worksheet sheet = book.ActiveWorksheet; Color accentBorder = Office2013Palette.Palette.AccentColor; Color transparent = Colors.Transparent; Color black = Colors.Black; Color white = Colors.White; ThemableColor themeBlack = new ThemableColor(Color.FromArgb(0,0,0,0)); ThemableColor themeWhite = new ThemableColor(Color.FromArgb(0, 255, 255, 255)); CellBorder border = new CellBorder(CellBorderStyle.Thin, themeBlack); CellBorder noBorder = new CellBorder(CellBorderStyle.None, themeBlack); CellBorders borders = new CellBorders(border, border, border, border, border, border, noBorder, noBorder); int rowNumber = 0; int colNumber = 0; foreach (var column in grid.Columns) { if (column.Header is string) { string columnHeader = (string)column.Header; if (skipColumns == null || !skipColumns.Contains(columnHeader)) { sheet.Cells[rowNumber, colNumber].SetValue(columnHeader); colNumber++; } } } CellSelection selection = sheet.Cells[0,0,0,colNumber-1]; selection.SetIsBold(true); PatternFill solidPatternFill = new PatternFill(PatternType.Solid, accentBorder, transparent); selection.SetFill(solidPatternFill); selection.SetForeColor(themeWhite); HashSet<int> textColumns = new HashSet<int>(); rowNumber++; foreach (var item in grid.Items) { if (item is DynRecord) { DynRecord record = (DynRecord)item; colNumber = 0; foreach (var column in grid.Columns) { if (column.Header is string) { string columnHeader = (string)column.Header; if (skipColumns == null || !skipColumns.Contains(columnHeader)) { if (column is GridViewDataColumn) { GridViewDataColumn dataColumn = (GridViewDataColumn)column; string propName = dataColumn.DataMemberBinding.Path.Path; object value = record.Value(propName); if (value != null) { if (value is string) { textColumns.Add(colNumber); sheet.Cells[rowNumber, colNumber].SetValue((string)value); } else if (value is DateTime) sheet.Cells[rowNumber, colNumber].SetValue((DateTime)value); else if (value is Decimal) sheet.Cells[rowNumber, colNumber].SetValue(Convert.ToDouble((decimal)value)); else { textColumns.Add(colNumber); sheet.Cells[rowNumber, colNumber].SetValue(value.ToString()); } } } colNumber++; } } } // This part is slow and runs out of memory //Color color = record.GetRecordColor().Color; //if (color != Colors.Black) //{ // selection = sheet.Cells[rowNumber, 0, rowNumber, colNumber - 1]; // selection.SetForeColor(new ThemableColor(color)); //} rowNumber++; } } selection = sheet.Cells[0, 0, rowNumber-1, colNumber - 1]; selection.SetBorders(borders); // Set Text columns formatting to @ to prevent Excel autoformatting foreach (int i in textColumns) { selection = sheet.Cells[1, i, rowNumber - 1, i]; selection.SetFormat(new CellValueFormat("@")); } // AutoFitWidth for (int i = 0; i < colNumber - 1; i++) { ColumnSelection columnSelection = sheet.Columns[i]; columnSelection.AutoFitWidth(); double width = sheet.Columns[i].GetWidth().Value.Value * 1.1; columnSelection.SetWidth(new ColumnWidth(width, false)); } return book;}