在 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; }