项目中有一个需求,客户要求供应商将各种生产数据,汇聚成一个Excel表格,上传至FTP。
经过三个月的不断完善,终于达到稳定的记录效果。
效果如下:
关键代码如下:
#region 将DataTable数据导出到Excel文件中
/// <summary>
/// 将DataTable数据导出到Excel文件中(xls)
/// </summary>
/// <param name="_dt">数据源</param>
/// <param name="file">模板路径</param>
/// <param name="AL_Name">每个Sheet名字</param>
public void TableToExcelForXLS(DataTable[] _dt, string file, ArrayList AL_Name)
{
HSSFWorkbook hssfworkbook = new HSSFWorkbook();
for (int k = 0; k < _dt.Length; k++)
{
ISheet sheet = hssfworkbook.CreateSheet(AL_Name[k].ToString());
//表头
IRow row = sheet.CreateRow(0);
for (int i = 0; i < _dt[k].Columns.Count; i++)
{
ICell cell = row.CreateCell(i);
cell.SetCellValue(_dt[k].Columns[i].ColumnName);
}
//数据
for (int i = 0; i < _dt[k].Rows.Count; i++)
{
IRow row1 = sheet.CreateRow(i + 1);
for (int j = 0; j < _dt[k].Columns.Count; j++)
{
ICell cell = row1.CreateCell(j);
cell.SetCellValue(_dt[k].Rows[i][j].ToString());
}
}
}
//转为字节数组
MemoryStream stream = new MemoryStream();
hssfworkbook.Write(stream);
var buf = stream.ToArray();
//保存为Excel文件
using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write))
{
fs.Write(buf, 0, buf.Length);
fs.Flush();
}
}
#endregion
大概的实现思路是:先把数据导入相对应的DataTable,再把每个DataTable 导入对应的 Sheet页。
这里要注意一下,我在这使用的NPOI版本是2.0.1.0,之前测试的时候,用低于2.0.1.0的版本好像会出错。
Demo源码请私信获取。
如有帮助到大家,请帮忙点个赞,谢谢!