我不明白为什么会发生这种情况,首先我尝试在第一行的列标题中应用粗体文本,然后我想将标题单元格的边框设置为MEDIUM,但此MEDIUM边框样式适用于表格中的所有单元格。以下相同代码中存在更多问题:
这是我的代码(使用NPOI库处理):
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很新,刚尝试使用它。非常感谢您的帮助。 谢谢。 (&lt; ---我不知道为什么这个'谢谢'无法跳到下一行,即使我在键入之前输入了Enter键)
答案 0 :(得分:6)
格式化问题是由Excel格式化插入行的方式引起的。他们从上面的行中获取他们的样式信息。你可以通过将行格式化为粗体,然后在下面插入一行来测试这一点 - 新行也将以粗体显示。您可以先尝试插入其余的行,然后再对标题行进行格式化。不幸的是,我没有足够的声誉来评论这个而不是答案,因为我无法帮助你处理其他两个问题。
答案 1 :(得分:1)
这是解决方案 - 我遇到了同样的问题。 您需要创建一个离散的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
答案 2 :(得分:0)
Rory要求的一种可能的解决方案是在创建单元格时设置CellStyle,然后再使用GetCell(x)设置值。
我遇到了同样的错误,因为在创建CellStyle之后,我试图更改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]);
Ciao
雷蒙多