[]
        
(Showing Draft Content)

使用模板创建Excel报表

本主题介绍使用 GcExcel 模板创建 Excel 报表所涉及的步骤。本文将演示如何创建一家公司的营销报告,假设该公司正在推出一系列新的智能手机。因此,需要为计划的营销活动创建 Excel 报告。报告详细列出了计划的发布事件、预算和费用。在本例中,用于绑定数据的数据源是自定义对象。模板布局在不同的 Excel 选项卡中创建,以生成多个报告。

以下步骤介绍如何使用模板创建Excel报表:

  1. 在工作表中创建模板布局。使用不同类型的字段定义营销报告的模板布局:

    • 静态字段:定义模板布局中的静态字段,用户标记报告中,静态不变的值。例如,标题字段或模板标题,如营销报告、智能手机、事件等。

    • 绑定字段:在小括号 {{ }} 中指定数据源绑定字段。例如,定义 {{ds.Records.FieldName}} 的绑定字段,其中ds是数据源的别名,在使用addDataSource方法的代码中指定。

    • 表达式字段:指定字段中的函数,根据公式来计算值。

    • 工作表名称:使用工作表创建4个模板布局,并命名为营销报告 (Marketing Report)、智能手机费用 (SmartPhone Expenses) 和启动事件 (Launch Events)。且最后一页的名字指定为 {{ds.Records.Country}},数据绑定字段将根据数据源中 “Country” 字段的值生成多个报告。

    模板布局:营销报告

    营销报告的布局模板如下图所示,其中使用的Group属性(G=Merge),会将智能手机与相应的记录进行分组,每个组显示一次。Merge值合并每个组的单元格。

    Grouping in layout

    模板布局:智能手机费用

    在如下图的模板布局中,使用到两个模板属性:单元格扩展(E=H)和单元上下文(C=A3)

    • 单元格扩展(E=H)将水平扩展 SmartPhone 字段。

    • 单元上下文(C=A3)在生成报告时,Expense 属性将会以 A3 的值,即 SmartPhone 为上下文进行生成。

    image

    模板布局:启动事件

    在如下图的模板布局中,使用到四个模板属性:范围(R=A3:B5)、排序(S=None)、单元格扩展(E=H)和分页符(PageBreak=True)

    • 范围(R=A3:B5)属性用来指定范围内的备选上下文,当范围内的字段没有默认或者指定上下文时,会以当前字段作为上下文。

    • 排序(S=None)表示不需要对数据进行排序。

    • 单元格扩展(E=H)表示 Event 字段将水平展开。

    • 分页符属性将添加垂直分页符和水平分页符。

    image

    模板布局: {{ds.Records.Country}}

    根据Country字段数据量,会在报告中自动创建多个工作表。

    Template layout

  2. 在GcExcel中加载模板。

    // 初始化工作簿 workbook
    Workbook workbook = new Workbook();
    // 加载模板文件 BudgetPlan_CustomObject.xlsx 
    String templateFile = "BudgetPlan_CustomObject.xlsx";。
    workbook.open(templateFile);
    ``` BudgetVals dataSource = new BudgetVals();
    {
        dataSource.Records = new ArrayList<BudgetRecord>();
    }
    
    BudgetRecord record1 = new BudgetRecord();
    record1.SmartPhone = "Apple iPhone 11";
    record1.Event = "Phone Launch";
    record1.Budget = 1000;
    record1.Expense = 950;
    record1.City = "Seattle";
    record1.Country = "USA";
    dataSource.Records.add(record1);
    
    BudgetRecord record2 = new BudgetRecord();
    record2.SmartPhone = "Apple iPhone 11";
    record2.Event = "CEO Meet";
    record2.Budget = 2000;
    record2.Expense = 1850;
    record2.City = "New York";
    record2.Country = "USA";
    dataSource.Records.add(record2);
    
    BudgetRecord record3 = new BudgetRecord();
    record3.SmartPhone = "Samsung Galaxy S10";
    record3.Event = "CEO Meet";
    record3.Budget = 1600;
    record3.Expense = 1550;
    record3.City = "Paris";
    record3.Country = "France";
    dataSource.Records.add(record3);
    
    BudgetRecord record4 = new BudgetRecord();
    record4.SmartPhone = "Apple iPhone XR";
    record4.Event = "Phone Launch";
    record4.Budget = 1800;
    record4.Expense = 1650;
    record4.City = "Cape Town";
    record4.Country = "South Africa";
    dataSource.Records.add(record4);
    
    BudgetRecord record5 = new BudgetRecord();
    record5.SmartPhone = "Samsung Galaxy S9";
    record5.Event = "Phone Launch";
    record5.Budget = 1500;
    record5.Expense = 1350;
    record5.City = "Paris";
    record5.Country = "France";
    dataSource.Records.add(record5);
    
    BudgetRecord record6 = new BudgetRecord();
    record6.SmartPhone = "Apple iPhone XR";
    record6.Event = "CEO Meet";
    record6.Budget = 1600;
    record6.Expense = 1550;
    record6.City = "New Jersey";
    record6.Country = "USA";
    dataSource.Records.add(record6);
    
    BudgetRecord record7 = new BudgetRecord();
    record7.SmartPhone = "Samsung Galaxy S9";
    record7.Event = "CEO Meet";
    record7.Budget = 1200;
    record7.Expense = 1150;
    record7.City = "Seattle";
    record7.Country = "USA";
    dataSource.Records.add(record7);
    
    BudgetRecord record8 = new BudgetRecord();
    record8.SmartPhone = "Samsung Galaxy S10";
    record8.Event = "Phone Launch";
    record8.Budget = 1100;
    record8.Expense = 1070;
    record8.City = "Durban";
    record8.Country = "South Africa";
    dataSource.Records.add(record8);
  3. 使用addDataSource方法在GcExcel中添加数据源。

    // 给工作簿添加数据源,在这里 ds 是数据源的别名,数据源会被用来给模板填充数据。
    // 因此模板中定义绑定字段时,数据源要用 ds 表示, 例如:{{ds.Records.SmartPhone}}
    workbook.addDataSource("ds", dataSource);
  4. 使用ProcessTemplate方法执行模板。

    // 调用 processTemplate 来给模板填充数据。
    workbook.processTemplate();
  5. 保存最终报告。

    // 保存为Excel
    workbook.save("MarketingReport_CustomObject.xlsx");

    营销报告的输出如下所示:


    Excel报表:市场营销报表

    Marketing report


    Excel报表:智能手机费用

    Smartphone Expenses report


    Excel报表:启动事件

    Launch Events report


    Excel报表:国家(创建多个报告)

    Countries report

创建报表同时保留模板

报表生成 "workbook.processTemplate()" 会让原始模板中的绑定字段被替换为实际的数据结果。

如果希望在报表生成的过程中,保留模板工作簿实例,可以使用 IWorkbook 接口中提供 generateReport 方法,该方法可以在处理完模板后,返回一个新的对象示例,用来保存Excel或导出为 PDF 。

此外,该方法还提供了一个重载,可以指定仅生成特定工作表为报表结果。

要使用 generateReport 方法生成报表,请参阅以下示例代码:

//处理模板并返回报表工作簿的实例 
IWorkbook report = workbook.generateReport();
//处理模板并返回报表工作簿的实例 
//IWorkbook report = workbook.generateReport(workbook.getWorksheets().get("Sales"));

要查看代码示例的实际效果,请参见 生成报表