猿问

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

我正在尝试使用 c# 库 NPOI 编写一个 .xls 文件,我已经能够创建该文件,但是当我尝试更改工作表中某些单元格的背景颜色时,我不知道为什么所有单元格表改变颜色它让我发疯,你能帮帮我吗。


这是我正在使用的代码:


// Creation of XLS


// I create a new excel work

HSSFWorkbook workbook = new HSSFWorkbook();


int rowNumber = 0;

//I add to the excel work a sheet of work

ISheet sheet = workbook.CreateSheet("Sheet 1");


// I create the Header of the sheet

var 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 record

rowNumber++;

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 XLS


MemoryStream 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 而不是我得到该颜色的工作表的所有单元格。


为什么?!?


慕丝7291255
浏览 1200回答 2
2回答

慕沐林林

请尝试如下方法。我已经分离了字体、样式,最后使用了你的单元格样式的 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++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; headerRow.Cells[c].CellStyle = headerStyle;}

拉莫斯之舞

替换这些行:for (int c = 0; c < headerRow.Cells.Count; c++){&nbsp; &nbsp; headerRow.Cells[0].CellStyle.FillForegroundColor= IndexedColors.LightBlue.Index;&nbsp; &nbsp; 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++){&nbsp; &nbsp; headerRow.Cells[c].CellStyle = cellStyleBlue;}然后,只有第一行的单元格才会应用单元格样式。
随时随地看视频慕课网APP
我要回答