1、Excel數據導出經常使用操做html
1.指定表頭和描述數據庫
2.指定數據庫中讀出的數據集合post
2、ExcelExport封裝ui
/// <summary> /// Excel經常使用的表格導出邏輯封裝 /// 單表寫入 /// </summary> public class ExcelExport { /// <summary> /// 導出的Excel文件名稱+路徑 /// </summary> public string FullName { get; set; } /// <summary> /// 導出的字段名稱和描述 /// </summary> public Dictionary<string, string> Fields { get; set; } private HSSFWorkbook _workbook = null; private ISheet _sheet = null; /// <summary> /// 建立實例,驗證導出文件名 /// </summary> /// <param name="FullName"></param> /// <param name="Fields"></param> public ExcelExport(string FullName, Dictionary<string, string> Fields) { this.FullName = FullName; this.Fields = Fields; Check(); _workbook = new HSSFWorkbook(); _sheet = _workbook.CreateSheet("Sheet1"); } /// <summary> /// 驗證Excel文件名 /// </summary> private void Check() { try { FileInfo info = new FileInfo(this.FullName); string[] extentions = new string[] { ".xls", ".xlsx" }; if (extentions.Any(q => q == info.Extension) == false) throw new Exception("excel文件的擴展名不正確,應該爲xls或xlsx"); if (info.Exists == false) info.Create().Close(); } catch (Exception ex) { throw new Exception("建立Excel文件失敗", ex); } } /// <summary> /// 執行導出操做 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> public void Export<T>(List<T> list) { //寫入表格頭 WriteHead(); //寫入數據 ICellStyle cellStyle = _workbook.CreateCellStyle(); cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");//爲避免日期格式被Excel自動替換,因此設定 format 爲 『@』 表示一率當成text來看 cellStyle.BorderBottom = BorderStyle.Thin; cellStyle.BorderLeft = BorderStyle.Thin; cellStyle.BorderRight = BorderStyle.Thin; cellStyle.BorderTop = BorderStyle.Thin; cellStyle.VerticalAlignment = VerticalAlignment.Center; cellStyle.Alignment = HorizontalAlignment.Center; IFont cellFont = _workbook.CreateFont(); cellFont.Boldweight = (short)FontBoldWeight.Normal; cellStyle.SetFont(cellFont); //創建行內容,從1開始 int rowInex = 1; foreach (var rowItem in list) { //建立行 IRow row = _sheet.CreateRow(rowInex); row.HeightInPoints = 25; int cellIndex = 0; foreach (var cellItem in this.Fields) { //建立單元格 ICell cell = row.CreateCell(cellIndex); //反射獲取屬性的值 PropertyInfo info = rowItem.GetType().GetProperty(cellItem.Key); if (info == null) { cell.SetCellValue($"'{cellItem.Key}'屬性不存在"); } else { object value = info.GetValue(rowItem); if (value != null) cell.SetCellValue(value.ToString()); } cell.CellStyle = cellStyle; cellIndex++; } //進入下一次循環 rowInex++; } //自適應列寬度 for (int i = 0; i < this.Fields.Count; i++) { _sheet.AutoSizeColumn(i); } //導出到文件 WriteFile(); } /// <summary> /// 寫入表頭 /// </summary> private void WriteHead() { //設置表頭樣式 ICellStyle headStyle = _workbook.CreateCellStyle(); headStyle.BorderBottom = BorderStyle.Thin; headStyle.BorderLeft = BorderStyle.Thin; headStyle.BorderRight = BorderStyle.Thin; headStyle.BorderRight = BorderStyle.Thin; headStyle.Alignment = HorizontalAlignment.Center; headStyle.FillForegroundColor = HSSFColor.Blue.Index; headStyle.VerticalAlignment = VerticalAlignment.Center; IFont headFont = _workbook.CreateFont(); headFont.Boldweight = (short)FontBoldWeight.Bold; headStyle.SetFont(headFont); IRow row = _sheet.CreateRow(0); row.HeightInPoints = 30; int index = 0; foreach (var item in this.Fields) { ICell cell = row.CreateCell(index); cell.SetCellValue(item.Value); cell.CellStyle = headStyle; index++; } } /// <summary> /// 建立文件到磁盤 /// </summary> private void WriteFile() { using (FileStream fs = new FileStream(this.FullName, FileMode.OpenOrCreate)) { _workbook.Write(fs); fs.Flush(); fs.Close(); } } }
3、使用示例this
1.匿名對象集合導出url
Dictionary<string, string> fields = new Dictionary<string, string>(); fields.Add("ID", "主鍵"); fields.Add("Name", "姓名"); fields.Add("Age", "年齡"); fields.Add("Birthday", "生日"); ExcelExport _export = new ExcelExport(LocalPathHelper.GetCurrentData() + "/export1.xls", fields); List<object> list = new List<object>() { new {ID=1,Name="張三丰",Age=20,Birthday=DateTime.Now }, new {ID=2,Name="王芳",Age=30,Birthday=DateTime.Now } }; _export.Export(list);
2.List集合導出spa
TestOne _Context = new DBA.TestOne(); List<Member_Info> list = _Context.Member_Info.ToList(); Dictionary<string, string> fields = new Dictionary<string, string>(); fields.Add("MemberID", "主鍵"); fields.Add("code", "帳號"); fields.Add("RealName", "姓名"); fields.Add("IsActive", "是否激活"); fields.Add("commission", "獎金餘額"); //使用 ExcelExport _export = new ExcelExport(LocalPathHelper.GetCurrentData() + "\\export2.xls", fields); //_export.Export(list); _export.Export<Member_Info>(list);
更多:excel