Exporting RadGrid Data to XLSX Using Telerik Document Processing Libraries
Environment
| Product | Grid for UI for ASP.NET AJAX |
| Version | 2026.3.812 |
Description
I want to export data from a Telerik RadGrid to an Excel (XLSX) file, applying specific styles like header background color and cell borders. The RadGrid contains approximately 10,000 rows, and I need an efficient solution to avoid performance issues. I also want column-level settings for auto-fitting content and text wrapping without looping through each row or cell individually.
This knowledge base article also answers the following questions:
- How to preserve RadGrid styles during Excel export?
- How to optimize performance for exporting large datasets?
- How to auto-fit columns and wrap text in the exported Excel file?
Solution
Exporting RadGrid Data to XLSX
To export RadGrid data to Excel with styling, use the built-in GenerateXlsxOutput<Workbook>() method and apply formatting directly to the generated workbook.
- Bind the RadGrid data.
- Generate the workbook using
GenerateXlsxOutput<Workbook>(). - Apply styles to cell ranges for headers and borders.
- Export the workbook.
Example code:
RadGrid1.DataBind();
Workbook workbook = (Workbook)RadGrid1.MasterTableView.GenerateXlsxOutput<Workbook>();
Worksheet worksheet = workbook.Worksheets[0];
CellRange usedRange = worksheet.UsedCellRange;
int firstRow = usedRange.FromIndex.RowIndex;
int firstColumn = usedRange.FromIndex.ColumnIndex;
int lastRow = usedRange.ToIndex.RowIndex;
int lastColumn = usedRange.ToIndex.ColumnIndex;
// Apply header background color.
worksheet.Cells[firstRow, firstColumn, firstRow, lastColumn].SetFill(
PatternFill.CreateSolidFill(System.Windows.Media.Color.FromRgb(176, 196, 222)));
// Apply thin borders to the used cell range.
CellBorder thinBorder = new CellBorder(
CellBorderStyle.Thin,
new ThemableColor(System.Windows.Media.Color.FromRgb(0, 0, 0)));
CellBorders borders = new CellBorders(
thinBorder, thinBorder, thinBorder, thinBorder, thinBorder, thinBorder,
CellBorder.Default, CellBorder.Default);
worksheet.Cells[firstRow, firstColumn, lastRow, lastColumn].SetBorders(borders);
IWorkbookFormatProvider formatProvider = new XlsxFormatProvider();
formatProvider.Export(workbook, outputStream, null);
Resolving Corrupted File Issues
To prevent corrupted files when exporting, ensure the HTTP response does not append extra content after the XLSX bytes.
using System.Globalization;
IWorkbookFormatProvider formatProvider = new XlsxFormatProvider();
byte[] xlsxBytes;
using (var ms = new MemoryStream())
{
formatProvider.Export(workbook, ms, null);
xlsxBytes = ms.ToArray();
}
HttpContext context = HttpContext.Current;
HttpResponse response = context.Response;
response.Clear();
response.BufferOutput = true;
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
response.AddHeader("Content-Disposition", "attachment; filename=\"QueryActivity.xlsx\"");
response.AddHeader("Content-Length", xlsxBytes.Length.ToString(CultureInfo.InvariantCulture));
response.BinaryWrite(xlsxBytes);
response.Flush();
response.SuppressContent = true;
context.ApplicationInstance.CompleteRequest();
Ensure the export button triggers a full postback instead of an AJAX or partial postback.
Auto-Fitting Columns and Text Wrapping
Apply column-level settings for auto-fitting content and text wrapping:
Worksheet worksheet = workbook.Worksheets[0];
// Short columns: fit width to content.
worksheet.Columns[0].AutoFitWidth();
worksheet.Columns[1].AutoFitWidth();
// Long text column: fixed width and wrapping.
worksheet.Columns[2].SetWidth(new ColumnWidth(300, true));
worksheet.Columns[2].SetIsWrapped(true);
For columns with long text, use a fixed width and wrapping instead of auto-fitting.
Performance Recommendations
- Use RadGrid's built-in export for small to medium-sized datasets.
- Use RadSpreadStreamProcessing for large datasets. This approach writes rows sequentially and reduces memory usage.
Example code for streaming:
using (IWorkbookExporter workbook =
SpreadExporter.CreateWorkbookExporter(SpreadDocumentFormat.Xlsx, seekableStream))
using (IWorksheetExporter worksheet =
workbook.CreateWorksheetExporter("Data"))
{
using (IRowExporter row = worksheet.CreateRowExporter())
using (ICellExporter cell = row.CreateCellExporter())
{
cell.SetValue("Example value");
}
}
Streaming export is preferable for memory efficiency when exporting large datasets.