3.5.5.2.6. ExcelAction

ExcelAction 是 列表操作 设计用来导出表格内容至 XLS 文件。

如果用户在表格中选择了某些行,该操作会询问需要导出选中的行还是所有行。可以覆盖此弹窗的标题和消息内容,只需要在主消息包添加 actions.exportSelectedTitleactions.exportSelectedCaption 键值的消息即可。

该操作通过 com.haulmont.cuba.gui.actions.list.ExcelAction 类实现,在 XML 中需要使用操作属性 type="excel" 定义。可以用 action 元素的 XML 属性定义通用的操作参数,参阅 声明式操作 了解细节。下面我们介绍 ExcelAction 类特有的参数。

  • fileName - 导出的文件名。如果未指定,会根据实体名称自动生成。

  • exportAggregation - 是否导出表格的聚合行(如果有的话)。默认为 true。

示例:

  1. <action id="excel" type="excel">
  2. <properties>
  3. <property name="fileName" value="customers"/>
  4. <property name="exportAggregation" value="false"/>
  5. </properties>
  6. </action>

或者,可以在界面控制器注入该操作,然后用 setter 配置:

  1. @Named("customersTable.excel")
  2. private ExcelAction customersTableExcel;
  3. @Subscribe
  4. public void onInit(InitEvent event) {
  5. customersTableExcel.setFileName("customers");
  6. customersTableExcel.setExportAggregation(false);
  7. }

如果需要在该操作执行前做一些检查或者与用户做一些交互,可以订阅操作的 ActionPerformedEvent 事件并按需调用操作的 execute() 方法。操作会使用你为它定义的所有参数进行调用。下面的例子中,我们在执行操作前展示了一个确认对话框:

  1. @Named("customersTable.excel")
  2. private ExcelAction customersTableExcel;
  3. @Subscribe("customersTable.excel")
  4. public void onCustomersTableExcel(Action.ActionPerformedEvent event) {
  5. dialogs.createOptionDialog()
  6. .withCaption("Please confirm")
  7. .withMessage("Are you sure you want to print the content to XLS?")
  8. .withActions(
  9. new DialogAction(DialogAction.Type.YES)
  10. .withHandler(e -> customersTableExcel.execute()), // execute action
  11. new DialogAction(DialogAction.Type.NO)
  12. )
  13. .show();
  14. }

另外,还可以先订阅 ActionPerformedEvent,但是不调用操作的 execute() 方法,而是直接使用 ExcelExporter 类。