在 c# 中能够使用对应的com组件生成或操做excel,但前提是必须安装了Office Excel , 但服务器端不必定会安装Excel,并且它操做起来并不简单。可是,使用NPOI
这个第三方库,能够在服务器不须要安装Excel的状况下,简单快捷的完成Excel相关操做。c#
安装对应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; }