【问题标题】:Vaadin excel export with converter values带有转换器值的 Vaadin excel 导出
【发布时间】:2017-03-14 14:59:27
【问题描述】:

我正在尝试使用Vaadin TableExport 导出与FilterTable 对应的Excel。 Filtertable 有一些列存储日期和其他类类型元素,所以我使用setConverter 函数将它们打印为特定的字符串:

filerTable.setConverter("dateColumn", dateConverter);
filerTable.setConverter("myClassColumn", myClassConverter);

dateConvertermyClassConverter 是某些类的实例,用于将该列值打印为字符串。

当我想将表格导出为 Excel 时出现问题:setConverter 转换未应用于输出文件。例如,日期单元格被导出为字符串('42741,0080787037' 而不是 '06/01/17 0:11')。导出Excel文件的代码部分是:

ExcelExport exp = new ExcelExport(new CustomTableHolder(filerTable), "excel.xls");
exp.setRowHeaders(true);
exp.export();

应用setConverter函数后,有什么方法可以完全按照所示导出表格?

【问题讨论】:

  • AFAIK,vaadin 没有对 excel 导出的内置支持。您是否为此使用插件(例如TableExport)。如果是这样,请附上插件的链接。
  • 是的,我正在使用那个插件。我将其添加到帖子中。
  • 您没有查看 Vaadin 电子表格吗?听说可以解决你的问题。
  • 不,我不知道。我的表格很简单,只需要下载excel文件,所以我认为TableExport插件应该足够了。

标签: vaadin export-to-excel vaadin7


【解决方案1】:

查看add-on sources,似乎支持此功能,但必须发生两件事才能使其工作:

代码:

public class ExcelExportTableComponent extends VerticalLayout {

    public ExcelExportTableComponent() {
        // basic table configuration
        Table table = new PropertyFormatTable();
        BeanItemContainer<Person> itemContainer = new BeanItemContainer<>(Person.class);
        table.setContainerDataSource(itemContainer);
        table.setConverter("age", new AgeConverter());

        // add some dummy data to the table
        Random random = new Random();
        for (int i = 0; i < 10; i++) {
            itemContainer.addItem(new Person("Name " + i, "Surname " + i, random.nextInt(99) + 1));
        }

        // add components to the layout
        addComponent(table);
        addComponent(new Button("Export to excel", event -> {
            ExcelExport excelExport = new ExcelExport(table);
            excelExport.setUseTableFormatPropertyValue(true);
            excelExport.excludeCollapsedColumns();
            excelExport.setReportTitle("Demo Report");
            excelExport.export();
        }));
    }


    // basic bean for data binding
    public static class Person {
        private String name;
        private String surname;
        private int age;

        public Person(String name, String surname, int age) {
            this.name = name;
            this.surname = surname;
            this.age = age;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getSurname() {
            return surname;
        }

        public void setSurname(String surname) {
            this.surname = surname;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }

    // custom converter
    private static class AgeConverter implements Converter<String, Integer> {
        @Override
        public Integer convertToModel(String value, Class<? extends Integer> targetType, Locale locale) throws ConversionException {
            return Integer.valueOf(value.substring(0, value.indexOf(" years")));
        }

        @Override
        public String convertToPresentation(Integer value, Class<? extends String> targetType, Locale locale) throws ConversionException {
            return String.valueOf(value) + " years";
        }

        @Override
        public Class<Integer> getModelType() {
            return Integer.class;
        }

        @Override
        public Class<String> getPresentationType() {
            return String.class;
        }
    }
}

输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 2017-07-31
    相关资源
    最近更新 更多