导出excel 手动拼装复杂表头

手动拼装复杂表头

目录

手动拼装复杂表头

表格1:理解表格的位置

表格2:

表格2:

表格3:

总结:


导出excel的时候,有时候遇到要导出复杂的表头

 

有规律的复杂表头,可以动态拼接。没有规律的,就需要手动处理了。

 

先理解下表格的位置,二维的,从0开始,依次增加。

表格1:理解表格的位置

0

1

2

3

4

1

 

 

 

 

2

 

 

 

 

3

 

 

 

 

4

 

 

 

 

5

 

 

 

 

红色表示单个的位置

合并语法:

new CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol); 

 为合并单元格操作方式,

四个参数分别是:起始行结束行起始列结束列

 

如果是单个的,不用设置CellRangeAddress,不然会报错的

 

只要设置需要合并的表头!!!

 

表格2:

0-1

2-4

1

 

 

 

 

2

 

 

 

 

3

 

 

 

 

4

 

 

 

 

5

 

 

 

 

Range:

0-1: new CellRangeAddress(0, 0, 0, 1);

2-4:   new CellRangeAddress(0, 0, 2, 4);

 

标题设置代码:

List<String> titleOne = Lists.newArrayList("日期","","订单总量","","");

有几列就写几个,保持列一致,占位的内容补空

 

range设置代码:

private List<CellRangeAddress> addNoMergeTitle() {
    int firstRow = 0, lastRow = 0, firstCol = 0, lastCol = 0;
    List<CellRangeAddress> cellRangeAddressList = new ArrayList<>();
    cellRangeAddressList.add(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol+1));
    cellRangeAddressList.add(new CellRangeAddress(firstRow, lastRow, firstCol+2, lastCol+4));
    return cellRangeAddressList;
}

 

结果:

 

表格2:

0-4

1

1-2

3-4

2

 

 

 

 

3

 

 

 

 

4

 

 

 

 

5

 

 

 

 

 

Range: 

第一行:

  0-4: new CellRangeAddress(0, 0, 0, 4);

第二行:

  1-2:new CellRangeAddress(1, 1, 1, 2);

  3-4: new CellRangeAddress(1, 1, 3, 4);

 

标题设置代码:

List<String> titleOne = Lists.newArrayList("统计","","","","");

List<String> titleTwo = Lists.newArrayList("","日期","","订单总量","");

其它的内容补空

 

range设置代码:

private List<CellRangeAddress> addMergeTwo() {
    List<CellRangeAddress> cellRangeAddressList = new ArrayList<>();
    cellRangeAddressList.add(new CellRangeAddress(0, 0, 0, 4));
    cellRangeAddressList.add(new CellRangeAddress(1, 1, 1, 2));
    cellRangeAddressList.add(new CellRangeAddress(1, 1, 3, 4));
    return cellRangeAddressList;
}

结果:

 

表格3:

0-4

1-3

1-4

 

 

 

 

4

 

 

 

 

5

 

 

 

 

Range:

第一行:

    0-4: new CellRangeAddress(0, 0, 0, 4);

第二行:

  1-4:new CellRangeAddress(1, 1, 1, 4);

第三行:

  1-3:  new CellRangeAddress(1, 2, 0, 0);

从上往下一行一行设置,跨行的,合并留给下一行设置,不容易搞混。

 

标题设置代码:

List<String> titleOne = Lists.newArrayList("统计","","","","");
List<String> titleTwo = Lists.newArrayList("日期","综合","","","");
List<String> titleThree = Lists.newArrayList("","订单总量","异常量","超时量","及时率");

 这边特别注意表题的设置,要从上往下设置,先出现,先设置,比如:日期处于第二和第三行,以上一行为准

 

range设置代码:

private List<CellRangeAddress> addMergeThree() {
    List<CellRangeAddress> cellRangeAddressList = new ArrayList<>();
    cellRangeAddressList.add(new CellRangeAddress(0, 0, 0, 4));
    cellRangeAddressList.add(new CellRangeAddress(1, 1, 1, 4));
    cellRangeAddressList.add(new CellRangeAddress(1, 2, 0, 0));
    return cellRangeAddressList;
}

结果:

 

 

表格4:

0-4

1-3

1-4

1-2

3-4

 

 

 

 

4

 

 

 

 

5

 

 

 

 

 

Range:

第一行:

0-4: new CellRangeAddress(0, 0, 0, 4);

第二行:

  1-4:new CellRangeAddress(1, 1, 1, 4);

第三行:

1-2:  new CellRangeAddress(2, 2, 1, 2);

3-4:  new CellRangeAddress(2, 2, 3, 4);

第四行:

  1-4:new CellRangeAddress(1, 3, 0, 0);

 

从上往下一行一行设置,跨行的,留给下一行设置,不容易搞混。

标题设置代码:

List<String> titleOne = Lists.newArrayList("统计","","","","");
List<String> titleTwo = Lists.newArrayList("日期","综合","","","");
List<String> titleThree = Lists.newArrayList("","数值","","比率","");
List<String> titleFour = Lists.newArrayList("","订单总量","异常量","及时率","成功率");

 这边特别注意表题的设置,日期处于第二和第三行,以上一行为准

 

range设置代码:

private List<CellRangeAddress> addMergeFour() {
    List<CellRangeAddress> cellRangeAddressList = new ArrayList<>();
    cellRangeAddressList.add(new CellRangeAddress(0, 0, 0, 4));
    cellRangeAddressList.add(new CellRangeAddress(1, 1, 1, 4));
    cellRangeAddressList.add(new CellRangeAddress(2, 2, 1, 2));
    cellRangeAddressList.add(new CellRangeAddress(2, 2, 3, 4));
    cellRangeAddressList.add(new CellRangeAddress(1, 3, 0, 0));
    return cellRangeAddressList;
}

结果:

 

 

总结:

    手动拼接复杂表头的时候,设置合并CellRangeAddress,要一行一行拼接,从上而下。出现跨行的,后设置

    设置表题名的时候,一行一行设置,跨行的,先出现的,先设置(这边跟合并的设置有区别),要保持位置一致,占位的内容置空。

 

 

在C#中,使用NPOI库(.NET版的Apache POI)可以方便地操作Excel文件,包括创建复杂表头。NPOI支持`XSSF`(基于XML的Excel)和`HSSF`(基于二进制的旧版本)。 要导出一个复杂表头,你可以这样做: 1. 首先,你需要引用NPOI库,可以在NuGet包管理器中安装`NPOI.Excel`。 2. 创建一个`XSSFWorkbook`对象,这是Excel工作簿的实例。 3. 使用`CreateSheet()`方法创建一个新的工作表。 4. 对于复杂表头,你可以创建一个自定义的`CellStyle`。这可以设置字体、颜色、合并单元格等样式属性。例如,你可以创建一个标题样式,使得某些单元格合并并加粗。 ```csharp var headerCellStyle = workbook.CreateCellStyle(); headerCellStyle.Font = workbook.GetFont("Arial", FontHeight.Huge, FontStyle.Bold); headerCellStyle.VerticalAlignment = VerticalAlignment.Center; ``` 5. 接下来,使用`Row`对象表示一行,并使用`CreateRow()`方法创建新的行。 6. 调用`AutoFitColumn()`方法对包含表头的列自动调整宽度,以适应内容。 7. 然后,给每一列添加表头单元格(`Cell`),并将它们设置到相应的行(`Row`)中,并应用自定义的样式。 ```csharp // 假设你有一个表头数组,如 List<string> headerList = new List<string>() { "姓名", "年龄", "职位" }; var headerRow = rowFactory.CreateRow(0); // 第一行作为表头 for (int i = 0; i < headerList.Count; i++) { var cell = headerRow.CreateCell(i); cell.SetCellValue(headerList[i]); cell.CellStyle = headerCellStyle; } ``` 8. 最后,保存整个工作簿: ```csharp usingFileStream = File.OpenWrite("output.xlsx"); workbook.Write(outputFileStream); workbook.Close(); usingFileStream.Dispose(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狼1222

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值