还在担心报表不好做?不用怕,试试这个方法(五)

2024-08-23 08:13:26 浏览数 (2)

前言

在上一篇文章《GcExcel 模板系列教程四-分组与扩展》中,小编为大家分享了如何使用 GcExcel 实现模板的分组与扩展,本文小编将为大家主要介绍如何在模板中进行全局设置。

GcExcel 模板中的全局设置是针对整个模板定义的设置。当需要在多个字段上应用相同属性时,全局设置能够极大地简化工作量。这些设置可以应用于所有模板布局,甚至可以涵盖工作簿中的多个工作表。

GcExcel

GcExcel 模板提供的全局设置说明如下:

  • KeepLineSize(保持行高与列宽)
  • InsertMode(插入整行或整列)
  • DebugMode(调试模式)
  • PaginationMode(分页模式)
  • EmbedFontForFormFields(嵌入字体文件)

本节小编将主要介绍前三个设置,对于其他的模式您可以参考 GcExcel 的官方文档了解更多全局设置的细节。

配置方法

全局设置,是通过 Excel 的公式名称管理器来配置的。需要注意的是,全局设置需要在模板填充之前配置,才可生效,可以使用如下的代码进行全局配置:

代码语言:javascript复制
Workbook wb = new Workbook();
wb.open("template.xlsx");
//配置全局设置
wb.getNames().add("TemplateOptions.KeepLineSize", "true");
//配置数据源, ds 对象需要额外配置
wb.addDataSource("ds", ds);
//模板填充
wb.processTemplate();
//保存报表
wb.save("report.pdf");

除了使用代码设置之外,也可以通过 Excel 或者 SpreadJS,在模板中直接配置全局配置,这样就无需再在代码中显示设置了。

Excel:

SpreadJS:

全局设置

  1. 保持行高与列宽(KeepLineSize)

通常情况下,GcExcel 在扩展单元格时不会改变单元格的行高和列宽,而是直接沿用已有单元格的行高和列宽,如下图所示:

导出后,可以看到,只有第一行的高度比较大,其余的新行高度并未修改,与模板中原有行高保持一致。

但往往为了布局整齐,美观,我们期望的结果应该是下面的这个样子:

这个时候我们就可以使用 KeepLineSize 属性,修改新增行列时,保持行高列宽一致。

使用如下代码实现:

代码语言:javascript复制
Workbook workbook = new Workbook();
workbook.open("template.xlsx");
workbook.getNames().add("TemplateOptions.KeepLineSize","True");
workbook.addDataSource("ds",CreateData2());
workbook.processTemplate();

除了使用代码之外,还可以使用名称管理器,在模板中预先配置好:

  1. 插入整行或整列(InsertMode)

GcExcel 在扩展单元格时,为了尽量避免对模板布局的影响,默认是以插入单元格的方式进行扩展,如下图所示:

然而,有时在实际情景中,这种操作可能会破坏布局,就像上图中绿色行单元格被切割一样。这种情况下,我们可以通过使用 InsertMode 属性来修改插入行为,让 GcExcel 在填充模板时按照行的方式进行插入:

代码语言:javascript复制
Workbook workbook = new Workbook();
workbook.open("template.xlsx");
workbook.getNames().add("TemplateOptions.InsertMode","EntireRowColumn");
workbook.addDataSource("ds",CreateData());
workbook.processTemplate();

除了使用代码之外,也可以使用名称管理器,添加设置:

  1. 调试模式(DebugMode)

调试模式,是为了方便对比模板与结果而设计的一种模式,当开启 DebugMode 后,模板填充时会保留模板工作表,并将名字改为 {sheetname}_template,例如原本工作表名字为 sales,则模板工作表为 sales_template。

如下图所示:

模板

报表

与前面的设置相同,您可以通过代码或者名称管理器来开启调试模式。

代码语言:javascript复制
Workbook workbook = new Workbook();
workbook.open("template.xlsx");
workbook.getNames().add("TemplateOptions.DebugMode","True");
workbook.addDataSource("ds",CreateData());
workbook.processTemplate();

总结

GcExcel 的全局设置旨在有效解决不同工作表或模板中共享的配置问题。不同的配置方式各有其优势。通过代码配置,可以避免关注模板本身是否设置了全局属性,而使用名称管理器配置则更好地实现代码与模板的解耦,提高代码的可维护性和灵活性。这种灵活的配置方法为处理全局设置提供了多种选择,使得在不同需求下能够更好地应用和管理全局设置。

0 人点赞