导出操作

ExportAction 是一个基本 列操作,使用定义的导出器导出表格的内容。此操作需要一个 TableExporter 实例。

此操作只可用于列表组件(TableGroupTableTreeTableDataGridTreeDataGridTree)。

ExportAction 提供方法用于管理获取 TableDataGrid 列值的方法。

  • addColumnValueProvider() 添加一个方法,用于从列中获取值。

  • removeColumnValueProvider() 删除一个获取列值的方法。

ExportAction 有三种导出模式:所有行、当前页以及选中行。

export action
  • 选择导出 All rows(所有行) 时,会按照界面中初始的数据加载器语句和使用的过滤器加载符合条件的所有数据。过程中使用批量加载。每批次加载的数据量可以通过 jmix.gridexport.export-all-batch-size 应用程序属性配置。

  • 选择导出 Current page(当前页) 时,仅导出表格当前页包含的数据。

可以通过在 消息包 添加 actions.exportSelectedTitleactions.exportSelectedCaption 消息覆盖默认的弹窗标题和消息。

自定义导出操作

可以通过继承 ExportAction 自定义操作。

下面示例创建自定义导出操作:

@ActionType(CustomExportAction.ID)
public class CustomExportAction extends ExportAction {
    public static final String ID = "myExcelExport";

    public CustomExportAction(String id) {
        this(id, null);
    }

    public CustomExportAction() {
        this(ID);
    }

    public CustomExportAction(String id, String shortcut) {
        super(id, shortcut);
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) {
        super.setApplicationContext(applicationContext);
        withExporter(CustomExporter.class); (1)
    }

    @Override
    public String getIcon() {
        return "font-icon:CHECK";
    }
}
1 如果需要,你可以使用 自定义 表格导出器。

现在可以在界面控制器使用该操作:

@Autowired
protected Table<Customer> customersTable;

@Autowired
protected Button customBtn;

@Autowired
protected ApplicationContext applicationContext;

@Autowired
protected Actions actions;

@Subscribe
protected void onInit(InitEvent event) {
    CustomExportAction customAction = actions.create(CustomExportAction.class);

    customAction.setTableExporter(applicationContext.getBean(CustomExporter.class));
    customAction.setTarget(customersTable);
    customAction.setApplicationContext(applicationContext);

    customBtn.setAction(customAction);
}

ExcelExportAction

ExcelExportAction 操作继承了 ExportAction 用于以 XLSX 格式导出表格内容。

此操作由 io.jmix.gridexportui.action.ExcelExportAction 类实现,在 XML 中需要使用 type="excelExport" 操作属性在列表组件定义。另外,该操作支持使用 action 元素的属性配置通用的操作参数。参阅 声明式定义操作

示例:

<actions>
    <action id="excelExport" type="excelExport"/>
</actions>

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

@Named("customersTable.excel")
protected ExcelExportAction customersTableExcel;

@Subscribe
protected void onInit(InitEvent event) {
    customersTableExcel.setCaption("Export to Excel");
}

你可以覆盖本地化的数据格式字符串。Excel 导出的默认格式字符串定义如下:

excelExporter.true=Yes
excelExporter.false=No
excelExporter.empty=[Empty]
excelExporter.bytes=<bytes>
excelExporter.timeFormat=h:mm
excelExporter.dateFormat=m/d/yy
excelExporter.dateTimeFormat=m/d/yy h:mm
excelExporter.integerFormat=#,##0
excelExporter.doubleFormat=#,##0.00##############

XLS 格式只支持最多 65536 行表格数据。如果导出的表格包含超过 65536 行的数据,超出的数据将不会导出,这里也会弹出警告消息。

JsonExportAction

JsonExportAction 操作继承了 ExportAction 用于以 JSON 格式导出表格内容。

此操作由 io.jmix.gridexportui.action.JsonExportAction 类实现,在 XML 中需要使用 type="jsonExport" 操作属性在列表组件定义。另外,该操作支持使用 action 元素的属性配置通用的操作参数。参阅 声明式定义操作

示例:

<actions>
    <action id="jsonExport" type="jsonExport"/>
</actions>

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

@Named("customersTable.json")
protected JsonExportAction customersTableJson;

@Subscribe
protected void onInit(InitEvent event) {
    customersTableJson.setCaption("Export to JSON");
}