调用示范:
https://gitee.com/henduanqiushui/ExcelFillColor
代码核心:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.ComponentModel; 7 using System.Data; 8 using System.Drawing; 9 using System.Collections; 10 using System.IO; 11 using NPOI.HSSF.UserModel; 12 using NPOI.HPSF; 13 using NPOI.HSSF.Util; 14 using NPOI.POIFS.FileSystem; 15 using NPOI.SS.UserModel; 16 using NPOI.XSSF.UserModel; 17 18 namespace ExcelFillColor 19 { 20 /// <summary> 21 /// NPOI 设置Excel 填充色(自定义的Html 格式的色值) 22 /// 参考文献:https://www.codota.com/code/java/methods/org.apache.poi.hssf.usermodel.HSSFWorkbook/getCustomPalette 23 /// https://stackoverflow.com/questions/10528516/poi-setting-cell-background-to-a-custom-color 24 /// https://www.cnblogs.com/mq0036/p/9835975.html 25 /// https://stackoverflow.com/questions/22687901/custom-color-for-icellstyle-fillforegroundcolor-than-provided-named-colors 26 /// </summary> 27 public class WorkBook 28 { 29 public static void CreateExcelFile2007(List<string> toFillColors) 30 { 31 32 33 var wb = new XSSFWorkbook(); 34 35 var sheet = wb.CreateSheet("第一页"); 36 37 38 39 for (int i = 0; i < toFillColors.Count; i++) 40 { 41 42 var row = sheet.CreateRow(i); 43 44 var cell = row.CreateCell(0); 45 cell.SetCellValue("第一页第一行"); 46 47 //设置单元格样式 48 XSSFCellStyle cellStyle = (XSSFCellStyle)wb.CreateCellStyle(); 49 50 var itemColorStr = toFillColors[i]; 51 Color co = System.Drawing.ColorTranslator.FromHtml(itemColorStr); 52 53 XSSFColor xssfColor = new XSSFColor(co); 54 cellStyle.SetFillForegroundColor(xssfColor); 55 cellStyle.FillPattern = FillPattern.SolidForeground; 56 57 cell.CellStyle = cellStyle; 58 } 59 60 61 62 //save 63 64 string savePath = $"Demo-{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-fff")}.xlsx"; 65 66 using (FileStream fs = new FileStream(savePath, FileMode.OpenOrCreate, FileAccess.Write)) 67 { 68 wb.Write(fs); 69 70 fs.Close(); 71 } 72 73 74 int a = 0; 75 } 76 77 public static void CreateExcelFile2003(List<string> toFillColors) 78 { 79 80 81 var wb = new HSSFWorkbook(); 82 HSSFPalette palette = wb.GetCustomPalette(); 83 var sheet = wb.CreateSheet("第一页"); 84 85 86 87 for (int i = 0; i < toFillColors.Count; i++) 88 { 89 90 var row = sheet.CreateRow(i); 91 92 var cell = row.CreateCell(0); 93 cell.SetCellValue("第一页第一行"); 94 95 //设置单元格样式 96 ICellStyle cellStyle = wb.CreateCellStyle(); 97 98 var itemColorStr = toFillColors[i]; 99 Color co = System.Drawing.ColorTranslator.FromHtml(itemColorStr); 100 HSSFColor myColor = palette.FindColor(co.R, co.G, co.B); 101 if (null== myColor) 102 { 103 //最多支持 56个设置区间 104 //参考:https://www.cnblogs.com/yxhblog/p/6225018.html 105 short idx = (short)(8 + i); 106 if (idx >= 64) 107 { 108 throw new Exception("colors max size is : 56 "); 109 } 110 111 palette.SetColorAtIndex(idx, co.R, co.G, co.B); 112 myColor = palette.FindColor(co.R, co.G, co.B); 113 } 114 115 cellStyle.FillForegroundColor = myColor.Indexed; 116 cellStyle.FillPattern = FillPattern.SolidForeground; 117 118 119 cell.CellStyle = cellStyle; 120 } 121 122 //save 123 string savePath = $"Demo-{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss-fff")}.xls"; 124 125 using (FileStream fs = new FileStream(savePath, FileMode.OpenOrCreate, FileAccess.Write)) 126 { 127 wb.Write(fs); 128 129 fs.Close(); 130 } 131 132 133 } 134 135 } 136 137 }