下面是将Datatable数据导出到Excel表格中的完整攻略。
1. 准备工作
在开始操作之前,需要确保已经将NPOI引入到项目中。可以通过NuGet包管理器或手动下载NPOI工具包的方式引入。
2. 代码实现
在代码中需要引入以下命名空间:
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
具体实现步骤如下:
- 根据Excel版本创建一个工作簿对象:
C#
IWorkbook workbook = null;
if (excelType == ".xlsx")
{
workbook = new XSSFWorkbook();
}
else if (excelType == ".xls")
{
workbook = new HSSFWorkbook();
}
在创建工作簿对象时需要根据Excel文件的版本来选择HSSFWorkbook对象或XSSFWorkbook对象。
- 创建一个sheet,并设置sheet的名称:
C#
ISheet sheet = workbook.CreateSheet("Sheet1");
- 创建Excel的表头:
C#
IRow firstRow = sheet.CreateRow(0);
for (int i = 0; i < dataTable.Columns.Count; i++)
{
ICell cell = firstRow.CreateCell(i);
cell.SetCellValue(dataTable.Columns[i].ColumnName);
}
创建表头需要遍历datatable的列来创建一个单元格,设置单元格的值即为列名。
- 遍历datatable中的所有数据,并将数据填充到Excel表格对应的区域:
C#
for (int i = 0; i < dataTable.Rows.Count; i++){
IRow row = sheet.CreateRow(i + 1);
for (int j = 0; j < dataTable.Columns.Count; j++){
ICell cell = row.CreateCell(j);
cell.SetCellValue(dataTable.Rows[i][j].ToString());
}
}
遍历每一行数据,根据datatable的列数来创建单元格,将datatable中的数据填充到单元格中。
- 在内存中创建Excel文件,并保存文件:
C#
MemoryStream ms = new MemoryStream();
workbook.Write(ms);
byte[] fileByte = ms.ToArray();
File.WriteAllBytes(filePath, fileByte);
将Excel文件写入内存流中,然后将流写入到磁盘中。
完整代码如下:
public static void DataTableToExcel(DataTable dataTable, string filePath, string excelType)
{
IWorkbook workbook = null;
if (excelType == ".xlsx")
{
workbook = new XSSFWorkbook();
}
else if (excelType == ".xls")
{
workbook = new HSSFWorkbook();
}
ISheet sheet = workbook.CreateSheet("Sheet1");
IRow firstRow = sheet.CreateRow(0);
for (int i = 0; i < dataTable.Columns.Count; i++)
{
ICell cell = firstRow.CreateCell(i);
cell.SetCellValue(dataTable.Columns[i].ColumnName);
}
for (int i = 0; i < dataTable.Rows.Count; i++)
{
IRow row = sheet.CreateRow(i + 1);
for (int j = 0; j < dataTable.Columns.Count; j++)
{
ICell cell = row.CreateCell(j);
cell.SetCellValue(dataTable.Rows[i][j].ToString());
}
}
MemoryStream ms = new MemoryStream();
workbook.Write(ms);
byte[] fileByte = ms.ToArray();
File.WriteAllBytes(filePath, fileByte);
}
3. 示例
下面是两个示例,一个是将一个datatable中的数据导出为Excel,一个是将两个datatable中的数据导出到Excel并分页放置。
示例1
DataTable dataTable = new DataTable();
dataTable.Columns.Add("col1", typeof(string));
dataTable.Columns.Add("col2", typeof(int));
dataTable.Columns.Add("col3", typeof(DateTime));
dataTable.Rows.Add("string1", 1, DateTime.Now);
dataTable.Rows.Add("string2", 2, DateTime.Now);
dataTable.Rows.Add("string3", 3, DateTime.Now);
DataTableToExcel(dataTable, @"C:\temp\test.xlsx", ".xlsx");
示例2
DataTable dataTable1 = new DataTable();
dataTable1.Columns.Add("col1", typeof(string));
dataTable1.Columns.Add("col2", typeof(int));
dataTable1.Columns.Add("col3", typeof(DateTime));
dataTable1.Rows.Add("string1", 1, DateTime.Now);
dataTable1.Rows.Add("string2", 2, DateTime.Now);
DataTable dataTable2 = new DataTable();
dataTable2.Columns.Add("col1", typeof(string));
dataTable2.Columns.Add("col2", typeof(int));
dataTable2.Columns.Add("col3", typeof(DateTime));
dataTable2.Rows.Add("string3", 3, DateTime.Now);
IWorkbook workbook = new XSSFWorkbook();
ISheet sheet1 = workbook.CreateSheet("Sheet1");
IRow firstRow = sheet1.CreateRow(0);
for (int i = 0; i < dataTable1.Columns.Count; i++)
{
ICell cell = firstRow.CreateCell(i);
cell.SetCellValue(dataTable1.Columns[i].ColumnName);
}
for (int i = 0; i < dataTable1.Rows.Count; i++)
{
IRow row = sheet1.CreateRow(i + 1);
for (int j = 0; j < dataTable1.Columns.Count; j++)
{
ICell cell = row.CreateCell(j);
cell.SetCellValue(dataTable1.Rows[i][j].ToString());
}
}
ISheet sheet2 = workbook.CreateSheet("Sheet2");
firstRow = sheet2.CreateRow(0);
for (int i = 0; i < dataTable2.Columns.Count; i++)
{
ICell cell = firstRow.CreateCell(i);
cell.SetCellValue(dataTable2.Columns[i].ColumnName);
}
for (int i = 0; i < dataTable2.Rows.Count; i++)
{
IRow row = sheet2.CreateRow(i + 1);
for (int j = 0; j < dataTable2.Columns.Count; j++)
{
ICell cell = row.CreateCell(j);
cell.SetCellValue(dataTable2.Rows[i][j].ToString());
}
}
using (FileStream fs = File.Create(@"C:\temp\test.xlsx"))
{
workbook.Write(fs);
}
这个示例将数据拆分成了两个datatable,然后使用NPOI创建两个sheet,并为每个sheet填充对应的数据。最终将所有数据写入Excel文件中,生成一个带有两个sheet的Excel文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# 将Datatable数据导出到Excel表格中 - Python技术站