主程序要添加NPOI的库。代码如下
static void Main(string[] args){Export(); }
public static void Export(){// 创建新的Excel工作簿IWorkbook workbook = new XSSFWorkbook();// 创建一个工作表ISheet sheet = workbook.CreateSheet("Sheet1");// 创建合并单元格的样式ICellStyle cellStyle = workbook.CreateCellStyle();cellStyle.Alignment = HorizontalAlignment.Center;cellStyle.VerticalAlignment = VerticalAlignment.Center;//设置字体IFont font = workbook.CreateFont();font.FontHeightInPoints = 12;font.FontHeight = 4 * 60;font.FontName = "宋体";font.IsBold = true;cellStyle.SetFont(font);// 设置边框样式为实线cellStyle.BorderTop = BorderStyle.Thin;cellStyle.BorderBottom = BorderStyle.Thin;cellStyle.BorderLeft = BorderStyle.Thin;cellStyle.BorderRight = BorderStyle.Thin;// 创建合并单元格int row = 0; // 指定的行号int cell = 0;// 在合并后的单元格中设置值和样式IRow row1 = sheet.CreateRow(row);IRow row2 = sheet.CreateRow(row + 1);row1.Height = 20 * 20;row2.Height = 20 * 20;// 创建合并单元格CellRangeAddress cellRangeAddress = new CellRangeAddress(row, row + 1, cell, cell);sheet.AddMergedRegion(cellRangeAddress);ICell cell0 = row1.CreateCell(row);cell0.SetCellValue("机器编号");cell0.CellStyle = cellStyle;//自定义行宽sheet.SetColumnWidth(row, 20 * 256);cellRangeAddress = new CellRangeAddress(row, row + 1, cell + 1, cell + 1);sheet.AddMergedRegion(cellRangeAddress);ICell cell1 = row1.CreateCell(cell + 1);cell1.SetCellValue("位置");cell1.CellStyle = cellStyle;//自定义行宽sheet.SetColumnWidth(row + 1, 30 * 256);cellRangeAddress = new CellRangeAddress(row, row, cell + 2, cell + 3);sheet.AddMergedRegion(cellRangeAddress);ICell cell2 = row1.CreateCell(cell + 2);cell2.SetCellValue("自费结算");cellRangeAddress = new CellRangeAddress(row, row, cell + 4, cell + 9);sheet.AddMergedRegion(cellRangeAddress);ICell cell3 = row1.CreateCell(cell + 4);cell3.SetCellValue("医保结算");cell3.CellStyle = cellStyle;#region 如果创建这个列,会导致实线边框样式无法呈现row1.CreateCell(cell + 9).SetCellValue("");//被占跨行合并的第二行第一第二列row2.CreateCell(cell + 0).SetCellValue("");row2.CreateCell(cell + 1).SetCellValue("");//被占跨行合并的第二行第一第二列#endregionrow2.CreateCell(cell + 2).SetCellValue("自费结算笔数");row2.CreateCell(cell + 3).SetCellValue("自费结算金额(元)");row2.CreateCell(cell + 4).SetCellValue("医保卡笔数");row2.CreateCell(cell + 5).SetCellValue("医保卡个账金额(元)");row2.CreateCell(cell + 6).SetCellValue("医保电子凭证笔数");row2.CreateCell(cell + 7).SetCellValue("医保电子凭证个账金额(元)");row2.CreateCell(cell + 8).SetCellValue("人脸医保笔数");row2.CreateCell(cell + 9).SetCellValue("人脸医保个账金额(元)");cell2.CellStyle = cellStyle;var irow = sheet.GetRow(1);SetColumnWidth(sheet, row + 2, row + 9, 22 * 256);SetCellStyle(sheet, 0, 1, 0, 9, cellStyle);// 写入到文件using (FileStream file = new FileStream("merged_cells.xlsx", FileMode.Create, FileAccess.Write)){workbook.Write(file);}}/// <summary>/// 设置列宽宽度/// </summary>public static void SetColumnWidth(ISheet sheet, int fristSolumn, int endSolumn, int intWidth){for (int i = fristSolumn; i <= endSolumn; i++){sheet.SetColumnWidth(i, intWidth);}}/// <summary>/// 给单元格四周加黑色边框/// </summary>/// <param name="sheet">单元格所在的sheet</param>/// <param name="rowstart">开始行的索引</param>/// <param name="rowend">结束行的索引</param>/// <param name="colstart">开始列的索引</param>/// <param name="colend">结束列的索引</param>public static void SetCellStyle(ISheet sheet, int rowstart, int rowend, int colstart, int colend, ICellStyle cellStyle){for (int i = rowstart; i <= rowend; i++){var irow = sheet.GetRow(i);if (irow != null && irow.Cells != null && irow.Cells.Count > 0){for (int j = 0; j < irow.Cells.Count; j++){irow.Cells[j].CellStyle = cellStyle;}}}}