NPOI簡單的給某個單元格字型設定顏色
阿新 • • 發佈:2019-01-02
參考文件有:
https://www.cnblogs.com/gossip/p/4307486.html
https://bbs.csdn.net/topics/391042064?page=1
效果圖:
需求分析:匯出資料時能夠匯出一段時間段內的所有產品質量資料,要求每天的資料放到一個Excel檔案中,每天所有總成的資料按總成劃分,每個總成一個工作簿,以此類推,匯出後壓縮到資料夾中返回到瀏覽器供使用者檢視。因為會存在某日沒有生產資料,但依然要匯出Excel檔案,起初的效果如下圖所示,為空白工作簿,沒有一個單元格。對於沒有資料的Excel匯出文件當然還是要有表頭和單元格的,如果能加上“無資料”的說明,就更人性化了
/// <summary> /// 每日所有資料按每個總成一個工作簿匯出到excel中 /// </summary> /// <param name="exportDataList">某日的excel資料內容</param> /// <param name="fieldInfies">excel表頭</param> /// <returns></returns> public staticHSSFWorkbook createHSSFWorkbook_Day(Dictionary<string, List<T>> exportDataList, List<ExportFieldInfo> fieldInfies) { HSSFWorkbook book = new HSSFWorkbook(); try { if (exportDataList.Count != 0) {foreach (var items in exportDataList) { ISheet sheet = book.CreateSheet(items.Key); IRow rowTitle = sheet.CreateRow(0); IRow rowtemp; for (int k = 0; k < fieldInfies.Count; k++) { rowTitle.CreateCell(k).SetCellValue(fieldInfies.ElementAt(k).DisplayName); } for (int j = 0; j < items.Value.Count; j++) { object tempobj = items.Value[j]; //獲取型別 Type type = tempobj.GetType(); List<System.Reflection.PropertyInfo> ps = type.GetProperties().ToList(); //將資料寫入sheet各個行 rowtemp = sheet.CreateRow(j + 1); for (int k = 0; k < fieldInfies.Count; k++) { //獲取屬性值 var value = ps.First(t => t.Name == fieldInfies.ElementAt(k).FieldName).GetValue(tempobj, null); switch (fieldInfies.ElementAt(k).DataType) { case DataTypeEnum.Int: rowtemp.CreateCell(k).SetCellValue(Convert.ToInt32(value)); break; case DataTypeEnum.Float: rowtemp.CreateCell(k).SetCellValue(Convert.ToDouble(value)); break; case DataTypeEnum.Double: rowtemp.CreateCell(k).SetCellValue(Convert.ToDouble(value)); break; case DataTypeEnum.String: rowtemp.CreateCell(k).SetCellValue(Convert.ToString(value)); break; case DataTypeEnum.DateTime: rowtemp.CreateCell(k).SetCellValue(Convert.ToDateTime(value).ToString("yyyy-MM-dd HH:mm:ss.SSS")); break; case DataTypeEnum.Date: rowtemp.CreateCell(k).SetCellValue(Convert.ToDateTime(value).ToString("yyyy-MM-dd")); break; default: break; } } tempobj = null; ps = null; } } } else {
//這段程式碼為“無資料”情況下的特殊處理
//建立一個名稱為“Sheet1”的工作簿 ISheet sheet = book.CreateSheet("Sheet1");
//建立2行 IRow rowTitle = sheet.CreateRow(0); IRow rowtemp = sheet.CreateRow(1);
//給工作簿新增表頭 for (int k = 0; k < fieldInfies.Count; k++) { rowTitle.CreateCell(k).SetCellValue(fieldInfies.ElementAt(k).DisplayName); }
//給第二行第一列的單元格賦值“無資料” rowtemp.CreateCell(0).SetCellValue("無資料!");
//建立單元格樣式 HSSFCellStyle fCellStyle = (HSSFCellStyle)book.CreateCellStyle();
//建立字型 HSSFFont ffont = (HSSFFont)book.CreateFont();
//給字型設定顏色 ffont.Color = HSSFColor.Red.Index;
//給樣式新增字型 fCellStyle.SetFont(ffont);
//給第二行第一列單元格新增樣式 rowtemp.GetCell(0).CellStyle = fCellStyle; } } catch(Exception ex) { Console.WriteLine(ex.Message); } return book; } }