单元格样式意外地应用于工作表中的所有单元格- NPOI
本文关键字:单元格 NPOI 样式 意外 应用于 工作 | 更新日期: 2023-09-27 18:08:37
我不明白为什么会发生这种情况,首先我尝试在第一行应用粗体文本到我的列标题,然后我想将我的标题单元格的边框设置为MEDIUM,但是这种MEDIUM边框样式应用于工作表中的所有单元格。下面相同的代码中还有更多的问题:
- 我的列标题(在第一行)的文本不是我想要的粗体。
- 我的列标题的文本颜色不是我想要的红色。
private void CreateATest(string filename)
{
FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
HSSFWorkbook wb = new HSSFWorkbook();
ISheet sheet = wb.CreateSheet("NPOI");
IRow row = sheet.CreateRow(0);
row.RowStyle = wb.CreateCellStyle();
row.RowStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;
row.RowStyle.VerticalAlignment = VerticalAlignment.CENTER;
row.RowStyle.WrapText = true;
IFont font = wb.CreateFont();
font.Boldweight = 3;
font.Color = (short) ColorTranslator.ToWin32(Color.Red);
font.FontHeight = 30;
row.RowStyle.SetFont(font);
int i = 0;
foreach (string header in new string[] { "ID", "Name", "Age" })
{
row.CreateCell(i++).SetCellValue(header);
row.Cells[i - 1].CellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.MEDIUM;
row.Cells[i - 1].CellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.MEDIUM;
row.Cells[i - 1].CellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.MEDIUM;
}
row.Cells[i - 1].CellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.MEDIUM;
Random rand = new Random();
for (i = 1; i < 1000; i++)
{
IRow row1 = sheet.CreateRow(i);
for (int j = 0; j < 3; j++)
{
row1.CreateCell(j).SetCellValue(rand.Next(100));
}
}
wb.Write(fs);
fs.Close();
}
请为我修复它,我是很新的NPOI,刚刚尝试使用它。非常感谢您的帮助。谢谢。(<——我不知道为什么这个"Thanks"不能跳转到下一行,即使我在输入它之前输入Enter)
格式问题是由于Excel格式插入行的方式。它们从上面的行中获取样式信息。您可以通过将一行格式化为粗体来测试这一点,然后在下面插入一行—新行也将被粗体显示。您可以尝试先插入其余行,然后再对标题行进行格式化。不幸的是,我没有足够的声誉来评论而不是回答,因为我不能帮助你解决其他两个问题。
这是解决方案-我有同样的问题。你需要创建一个离散的ICellStyle并将其分配给单元格的CellStyle,而不是仅仅对单元格当前的CellStyle调用"SetFont()"。
我得到了同样的问题,其中样式应用于所有单元格。我注释了导致它的行,下一行是工作的(和ICellStyle部分):
let workbook:HSSFWorkbook = new HSSFWorkbook()
let worksheet:ISheet = workbook.CreateSheet(sheetName)
let fontbold = workbook.CreateFont()
fontbold.Boldweight <- (int16 FontBoldWeight.Bold)
fontbold.FontHeightInPoints <- 10s
fontbold.FontName <- "Arial"
let cellstylebold:ICellStyle = workbook.CreateCellStyle()
cellstylebold.SetFont(fontbold)
let row:IRow = worksheet.CreateRow(0)
for h in 0..headers.Length-1 do
let cell = row.CreateCell(h)
cell.SetCellValue(headers.[h])
//cell.CellStyle.SetFont(fontbold)
cell.CellStyle <- cellstylebold
Rory请求的一个可能的解决方案是在创建单元格时设置CellStyle,然后使用GetCell(x)设置值。
我有同样的错误,因为我试图在创建CellStyle后更改它,并解决了更改顺序,以这种方式:
//CREATE STYLE
ICellStyle styleCenter1 = hssfworkbook.CreateCellStyle();
styleCenter1.Alignment = HorizontalAlignment.Center;
styleCenter1.VerticalAlignment = VerticalAlignment.Center;
styleCenter1.WrapText = true;
styleCenter1.SetFont(font1);
//CREATE ROW
IRow row = sheet1.CreateRow(z);
//SETTING CELLSTYLE WHILE CREATING CELL
row.CreateCell(0).CellStyle = styleCenter1;
//SETTING CELLVALUE AFTER
row.GetCell(0).SetCellValue(listaSocieta[x]);
小贝,
Raimondo