使用NPOI生成带有合并标头的Excel?

时间:2017-12-13 13:04:12

标签: c# excel npoi

我尝试使用NPOI导出excel表,但是我无法更改背景颜色并设置第二个单元格值。贝娄是我的代码。

var workbook = new XSSFWorkbook();
var sheet = workbook.CreateSheet("Commission");
var row = sheet.CreateRow(0);

var bStylehead = workbook.CreateCellStyle();
bStylehead.BorderBottom = BorderStyle.Thin;
bStylehead.BorderLeft = BorderStyle.Thin;
bStylehead.BorderRight = BorderStyle.Thin;
bStylehead.BorderTop = BorderStyle.Thin;
bStylehead.Alignment = HorizontalAlignment.Center;
bStylehead.VerticalAlignment = VerticalAlignment.Center;         
bStylehead.FillBackgroundColor = HSSFColor.Green.Index;

row.CreateCell(0);
row.CreateCell(1);

var r2 = sheet.CreateRow(1);
r2.CreateCell(0, CellType.String).SetCellValue("Name");
r2.CreateCell(1, CellType.String).SetCellValue("Address");
r2.CreateCell(2, CellType.String).SetCellValue("city");
r2.CreateCell(3, CellType.String).SetCellValue("state");

var cra = new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 1);  
var cra1 = new NPOI.SS.Util.CellRangeAddress(0, 0, 2, 3);               
sheet.AddMergedRegion(cra);                         
sheet.AddMergedRegion(cra1);         

ICell cell = sheet.GetRow(0).GetCell(0);
cell.SetCellType(CellType.String);
cell.SetCellValue("Supplier Provided Data");
cell.CellStyle = bStylehead;

ICell cell1  = sheet.GetRow(0).GetCell(1);
cell1.SetCellType(CellType.String);
cell1.SetCellValue("Deal Provided Data");
cell1.CellStyle = bStylehead;       

所需格式:

Desired Format

2 个答案:

答案 0 :(得分:2)

您需要再创建两个单元格,因为标题包含2x2合并单元格:

  

供应商提供的数据
  交易提供的数据

然后,您将能够访问第二个标题单元格:

ICell cell1 = sheet.GetRow(0).GetCell(2);

要设置背景颜色,您需要使用FillForegroundColor属性:

cellStyleColorGreen.FillPattern = FillPattern.SolidForeground;
cellStyleColorGreen.FillForegroundColor = IndexedColors.Green.Index;

或制作自定义颜色:

cellStyleColorCustom.FillPattern = FillPattern.SolidForeground;
((XSSFCellStyle)cellStyleColorCustom).SetFillForegroundColor(new XSSFColor(new byte[] { 198, 239, 206 })); 

要克隆样式,例如,要使用边框的单元格样式并添加背景颜色,您可以使用:

cellStyleColorAndBorder.CloneStyleFrom(cellStyleBorder);

完整代码:

var workbook = new XSSFWorkbook();
var sheet = workbook.CreateSheet("Commission");
var row = sheet.CreateRow(0);

var cellStyleBorder = workbook.CreateCellStyle();
cellStyleBorder.BorderBottom = BorderStyle.Thin;
cellStyleBorder.BorderLeft = BorderStyle.Thin;
cellStyleBorder.BorderRight = BorderStyle.Thin;
cellStyleBorder.BorderTop = BorderStyle.Thin;
cellStyleBorder.Alignment = HorizontalAlignment.Center;
cellStyleBorder.VerticalAlignment = VerticalAlignment.Center;

var cellStyleBorderAndColorGreen = workbook.CreateCellStyle();
cellStyleBorderAndColorGreen.CloneStyleFrom(cellStyleBorder);
cellStyleBorderAndColorGreen.FillPattern = FillPattern.SolidForeground;
((XSSFCellStyle)cellStyleBorderAndColorGreen).SetFillForegroundColor(new XSSFColor(new byte[] { 198, 239, 206 }));

var cellStyleBorderAndColorYellow = workbook.CreateCellStyle();
cellStyleBorderAndColorYellow.CloneStyleFrom(cellStyleBorder);
cellStyleBorderAndColorYellow.FillPattern = FillPattern.SolidForeground;
((XSSFCellStyle)cellStyleBorderAndColorYellow).SetFillForegroundColor(new XSSFColor(new byte[] { 255, 235, 156 }));

row.CreateCell(0);
row.CreateCell(1);
row.CreateCell(2);
row.CreateCell(3);

var r2 = sheet.CreateRow(1);
r2.CreateCell(0, CellType.String).SetCellValue("Name");
r2.Cells[0].CellStyle = cellStyleBorderAndColorGreen;
r2.CreateCell(1, CellType.String).SetCellValue("Address");
r2.Cells[1].CellStyle = cellStyleBorderAndColorGreen;
r2.CreateCell(2, CellType.String).SetCellValue("city");
r2.Cells[2].CellStyle = cellStyleBorderAndColorYellow;
r2.CreateCell(3, CellType.String).SetCellValue("state");
r2.Cells[3].CellStyle = cellStyleBorderAndColorYellow;
var cra = new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 1);
var cra1 = new NPOI.SS.Util.CellRangeAddress(0, 0, 2, 3);
sheet.AddMergedRegion(cra);
sheet.AddMergedRegion(cra1);

ICell cell = sheet.GetRow(0).GetCell(0);
cell.SetCellType(CellType.String);
cell.SetCellValue("Supplier Provided Data");
cell.CellStyle = cellStyleBorderAndColorGreen;
sheet.GetRow(0).GetCell(1).CellStyle = cellStyleBorderAndColorGreen;

ICell cell1 = sheet.GetRow(0).GetCell(2);
cell1.SetCellType(CellType.String);
cell1.SetCellValue("Deal Provided Data");
cell1.CellStyle = cellStyleBorderAndColorYellow;
sheet.GetRow(0).GetCell(3).CellStyle = cellStyleBorderAndColorYellow;

using (FileStream fs = new FileStream(@"c:\temp\excel\test.xlsx", FileMode.Create, FileAccess.Write))
{
    workbook.Write(fs);
}

答案 1 :(得分:0)

HSSFWorkbook wb = new HSSFWorkbook();
var sheet = wb.CreateSheet("FileName");
var cra = new NPOI.SS.Util.CellRangeAddress(firstRow, lastRow, firstCol, lastCol);
sheet.AddMergedRegion(cra);

希望可以帮助您! (使用lib NPOI)