使用NPOI合并标题生成Excel?

我试图导出excel表使用NPOI像波纹pipe,但我无法改变背景颜色和设置第二个单元格的值。 贝娄是我的代码。

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; 

期望的格式:

所需的格式

您需要创build两个以上的单元格,因为您的标题具有2×2合并单元格:

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

然后,您将可以访问您的第二个标题单元格:

 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); }