前言
在 c# 中可以使用对应的com组件生成或操作excel,但前提是必须安装了Office Excel , 但服务器端不一定会安装Excel,而且它操作起来并不简单。但是,使用NPOI
这个第三方库,可以在服务器不需要安装Excel的情况下,简单快捷的完成Excel相关操作。
使用
安装对应
Nuget
包使用帮助类
/// <summary>
/// 返回excel的字节数组
/// 可储存为文件
/// 文件后缀为".xls"
/// </summary>
/// <typeparam name="T">是数据对象</typeparam>
/// <param name="dataList">数据列表</param>
/// <param name="headers">表头</param>
/// <returns></returns>
public static byte[] GetExcel<T>(IList<T> dataList, IList<string> headers)
{
if (dataList == null || dataList.Count == 0)
throw new ArgumentException("无效数据列表");
if (headers == null)
throw new ArgumentNullException();
var wk = new HSSFWorkbook(); //表示一个Excel文件
var sheet = wk.CreateSheet(); // Excel中的sheet
var header = sheet.CreateRow(0); // 第一行储存表头信息
for (var i = 0; i < headers.Count; i++)
{
header.CreateCell(i).SetCellValue(headers[i]);
}
for (var i = 0; i < dataList.Count; i++)
{
var o = dataList[i];
var row = sheet.CreateRow(i + 1);
var cellNo = 0;
object value;
string cell;
// 如果已知要储存哪些属性, 可不使用反射
foreach (var info in o.GetType().GetProperties())
{
value = info.GetValue(o, null);
cell = value == null ? String.Empty : value.ToString();
row.CreateCell(cellNo++).SetCellValue(cell);
}
}
byte[] data;
using (var ms = new MemoryStream())
{
wk.Write(ms);
data = ms.GetBuffer();
wk.Close();
}
return data;
}