asp.net C# 使用HttpContext将datatable导出为多sheet的excel
时间: 2024-02-21 08:58:01 浏览: 228
你可以使用以下代码将多个 DataTable 导出到一个 Excel 文件的多个 sheet 中:
```csharp
protected void ExportToExcel(List<DataTable> tables, string fileName)
{
// 创建一个新的工作簿
var workbook = new XSSFWorkbook();
// 循环创建每个表格的 sheet
for (int i = 0; i < tables.Count; i++)
{
// 创建一个新的 sheet
var sheet = workbook.CreateSheet("Sheet" + (i + 1));
// 填充表头
var headerRow = sheet.CreateRow(0);
for (int j = 0; j < tables[i].Columns.Count; j++)
{
headerRow.CreateCell(j).SetCellValue(tables[i].Columns[j].ColumnName);
}
// 填充数据到 sheet 中
for (int row = 0; row < tables[i].Rows.Count; row++)
{
var dataRow = sheet.CreateRow(row + 1);
for (int col = 0; col < tables[i].Columns.Count; col++)
{
dataRow.CreateCell(col).SetCellValue(tables[i].Rows[row][col].ToString());
}
}
}
// 写入到 HttpContext 中
var ms = new MemoryStream();
workbook.Write(ms);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
HttpContext.Current.Response.End();
}
```
使用方法示例:
```csharp
List<DataTable> tables = new List<DataTable>();
tables.Add(GetDataTable1());
tables.Add(GetDataTable2());
ExportToExcel(tables, "test.xlsx");
```
其中,`GetDataTable1()` 和 `GetDataTable2()` 分别是获取需要导出的两个 DataTable 的方法,`"test.xlsx"` 是导出的 Excel 文件的文件名。导出的文件会自动下载到客户端计算机。
阅读全文