为了账号安全,请及时绑定邮箱和手机立即绑定

C# 使用 NPOI 库更改单元格的背景颜色

C# 使用 NPOI 库更改单元格的背景颜色

C#
慕丝7291255 2021-10-24 14:05:43
我正在尝试使用 c# 库 NPOI 编写一个 .xls 文件,我已经能够创建该文件,但是当我尝试更改工作表中某些单元格的背景颜色时,我不知道为什么所有单元格表改变颜色它让我发疯,你能帮帮我吗。这是我正在使用的代码:// Creation of XLS// I create a new excel workHSSFWorkbook workbook = new HSSFWorkbook();int rowNumber = 0;//I add to the excel work a sheet of workISheet sheet = workbook.CreateSheet("Sheet 1");// I create the Header of the sheetvar headerRow = sheet.CreateRow(0);headerRow.CreateCell(0).SetCellValue("Famiglia");headerRow.CreateCell(1).SetCellValue("Quantità Tagliata Fogli");headerRow.CreateCell(2).SetCellValue("Lotto Medio di Produzione Fogli");headerRow.CreateCell(3).SetCellValue("Quantità Scarto Medio(pezzi)");headerRow.CreateCell(4).SetCellValue("Valore Scarti Euro");headerRow.CreateCell(5).SetCellValue("% Scarto");headerRow.CreateCell(6).SetCellValue(" Lead Time Medio Produttivo");for (int c = 0; c < headerRow.Cells.Count; c++){                                   headerRow.Cells[0].CellStyle.FillForegroundColor= IndexedColors.LightBlue.Index;    headerRow.Cells[0].CellStyle.FillPattern = FillPattern.SolidForeground;}// Now what I have to do is to write the data in to the cells creating so a new recordrowNumber++;IRow row = sheet.CreateRow(rowNumber);                    row.CreateCell(0).SetCellValue(f.family);row.CreateCell(1).SetCellValue(f.QuantitàTagliataFogli);row.CreateCell(2).SetCellValue(f.LottoMedioProduzioneFogli);row.CreateCell(3).SetCellValue(f.QuantitàScartoMedioInPezzi);row.CreateCell(4).SetCellValue(f.ValoreScartoInEuro);row.CreateCell(5).SetCellValue(f.ScartoMedio);row.CreateCell(6).SetCellValue(f.LeadTimeMedioProduttivo);// Now I have to try to write the file XLSMemoryStream output = new MemoryStream();workbook.Write(output);SaveFileDialog SaveFileDialog = new SaveFileDialog();SaveFileDialog.Title = "Save As...";SaveFileDialog.Filter = "xls File (*.xls)|*.xls";SaveFileDialog.InitialDirectory = @"C:\";我本来希望只有第一行的单元格带有 backColor lightblue 而不是我得到该颜色的工作表的所有单元格。为什么?!?
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

请尝试如下方法。我已经分离了字体、样式,最后使用了你的单元格样式的 for 循环分配也修复了 for 循环内部的错误,你每次只将样式分配给 Cells[0]。


HSSFFont headerFont = (HSSFFont)workbook.CreateFont();

headerFont.FontHeightInPoints = (short)12;

headerFont.FontName = "Arial";

headerFont.Color = IndexedColors.White.Index;

headerFont.IsBold = true;

headerFont.IsItalic = false;

headerFont.Boldweight = 700;


HSSFCellStyle headerStyle = (HSSFCellStyle)workbook.CreateCellStyle();

headerStyle.WrapText = true;

headerStyle.FillForegroundColor = IndexedColors.LightBlue.Index;

headerStyle.FillPattern = FillPattern.SolidForeground;

headerStyle.Alignment = HorizontalAlignment.Center;

headerStyle.VerticalAlignment = VerticalAlignment.Center;

headerStyle.BorderBottom = BorderStyle.Thin;

headerStyle.BorderTop = BorderStyle.Thin;

headerStyle.BorderLeft = BorderStyle.Thin;

headerStyle.BorderRight = BorderStyle.Thin;

headerStyle.SetFont(headerFont);


for (int c = 0; c < headerRow.Cells.Count; c++)

{                               

    headerRow.Cells[c].CellStyle = headerStyle;

}


查看完整回答
反对 回复 2021-10-24
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

替换这些行:


for (int c = 0; c < headerRow.Cells.Count; c++)

{

    headerRow.Cells[0].CellStyle.FillForegroundColor= IndexedColors.LightBlue.Index;

    headerRow.Cells[0].CellStyle.FillPattern = FillPattern.SolidForeground;

}

和:


HSSFCellStyle cellStyleBlue = (HSSFCellStyle)workbook.CreateCellStyle();

cellStyleBlue.FillForegroundColor = IndexedColors.LightBlue.Index;

cellStyleBlue.FillPattern = FillPattern.SolidForeground;


for (int c = 0; c < headerRow.Cells.Count; c++)

{

    headerRow.Cells[c].CellStyle = cellStyleBlue;

}

然后,只有第一行的单元格才会应用单元格样式。


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 1199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信