最近上头说项目里面直接用微软的office导出Excel不稳定,给了我一个网址叫我用NPOI导出Excel.
网址:http://www.cnblogs.com/asxinyu/p/dotnet_opensource_project_3.html
看完教程我做了一个简单的Excel导出,不涉及公式\函数\图表等,用的是NPOI 1.2.5版本.
这个引用NPOI的类必须和调用的类在同一个项目中,如果在同一个解决方案却在不同的项目中会出现与程序集清单不匹配的错误.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
using NPOI.SS.UserModel;
using NPOI;
using NPOI.HPSF;
using NPOI.HSSF;
using NPOI.HSSF.UserModel;
using NPOI.POIFS;
using NPOI.Util;
public class NPOIExcelUtil
{
/// <summary>
/// 将DataTable导出成Excel表格
/// </summary>
/// <param name="data">需要导出的DataTable</param>
/// <param name="output">导出的路径</param>
public void toExcel(System.Data.DataTable data, string output)
{
try
{
//创建工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个表sheet
ISheet sheet = workbook.CreateSheet("sheet");
//创建第一行,新创建的表是没有单元格的,每一个需要写入数据的单元格都要手动创建
IRow row = sheet.CreateRow(0);
//将列名写入表的第一行
for (int i = 0; i < data.Columns.Count; i++)
{
row.CreateCell(i);
sheet.GetRow(0).GetCell(i).SetCellValue(data.Columns[i].ColumnName);
}
//写入数据
for (int i = 1; i <= data.Rows.Count; i++)
{
row = sheet.CreateRow(i);
for (int j = 0; j < data.Columns.Count; j++)
{
row.CreateCell(j);
sheet.GetRow(i).GetCell(j).SetCellValue(data.Rows[i - 1][j].ToString());
}
}
FileStream file = new FileStream(output, FileMode.Create);
workbook.Write(file);
file.Close();
}
catch (Exception ex)
{
throw ex;
}
}
}