Проставление даты в имя экпортированный файл Excel

Использую Export Actions :: Документация Jmix

Данные выгрузки меняются и чтобы отличать, нужно в конце имени файла и в первой строчке самого Excel файла поставить текущую дату.

Как это можно сделать?

Здравствуйте,

За генерацию файла Excel отвечает бин ExcelExporter, Вы можете переопределить его.

Например:

Переопределить метод getFileName(...):

public class MyExcelExporter extends ExcelExporter {

    protected TimeSource timeSource;

    @Autowired
    public void setTimeSource(TimeSource timeSource) {
        this.timeSource = timeSource;
    }

    public MyExcelExporter(GridExportProperties gridExportProperties, AllRecordsExporter allRecordsExporter) {
        super(gridExportProperties, allRecordsExporter);
    }

    @Override
    protected String getFileName(Table<Object> table) {
        return super.getFileName(table) + "_" + timeSource.now();
    }
}

Определите бин с аннотацией @Primary в основном классе приложения:

  @Primary
  @Bean
  ExcelExporter excelExporter(GridExportProperties gridExportProperties, AllRecordsExporter allRecordsExporter) {
      return new MyExcelExporter(gridExportProperties, allRecordsExporter);
  }

С Уважением,
Никита

1 симпатия

Никит, большое спасибо!
У меня получилось

Как при сохранении указать имя файла для Jmix 2.1.3 ?
В ней используется type “grdexp_excelExport” вместо “excelExport”
и имплементировать, как понимаю, нужно не io.jmix.gridexportui.action.ExcelExportAction
Судя по примеру petclinic, имплементируется io.jmix.gridexport:jmix-gridexport-flowui-starter.

Export Actions :: Документация Jmix
Документация по ExcelExportAction для версии 1.5 не подходит для 2-й. Для 2-й ее нет?

image
Если выбрать “All rows” выдается ошибка:
IllegalStateException: Cannot find a primary key for a meta class Clients.
Clients это DTO сущность, зачем здесь PK? Пагинации для DTO нет и при выборе “Current page” выводится вся информация без PK и без всяких ошибок!!

Т.е. сейчас есть 3 вопроса для 2-й версии jmix :

  1. Как сохранить в excel без вывода окна?
  2. Как указать свое имя файла?
  3. Как указать форматы ячеек т.к. в гриде целое число без разделителей, например 745214205, в Excel почему-то 745 214 205,00 ?

Здравствуйте,

Да, вы правы вам необходимо для версии Jmix 2.x, добавить зависимость:

implementation 'io.jmix.gridexport:jmix-gridexport-flowui-starter'

Docs: Grid Export Actions :: Jmix Documentation

По вашим вопросам:

Проверю ошибку, которая у вас возникает и отпишу вам по результату.

1 - Зависимость, которую вы добавили подключает action для выгрузки данных в excel, вы можете посмотреть на реализацию самого action и вызвать ExcelExporter напрямую в вашем коде.

2 - Если вы будете вызывать ExcelExporter самостоятельно, то сможете используя метод setFileName(..) установить имя файла.

Также в ближайшем обновлении появится более удобный способ установить имя непосредственно в ExportAction.

3 - Excel есть форматирование ячеек, вероятно применяется стандартное форматирование, которое и предоставляет данный вид. Простого способа его исправить нету, если только переопределять метод io.jmix.gridexportflowui.exporter.excel.ExcelExporter#exportDataGrid и добавить собственный формат.

Примечание:
Рекомендую вам подключить Reports Add-on, в котором вы сможете более тонко сгенерировать отчёт в Excel. Там же можно решить проблему и с установкой имени выходного файла и с форматированием, настроев его в шаблоне отчёта или используя форматтеры.

И используя аддон вы сможете воспользоваться ReportRunner, чтобы вызывать генерацию отчёта из любого места.

С Уважением,
Никита

Добрый день.
Но и после переопределения можно будет только, как в ExcelExportAction 1.5 назначить общий формат вида:
excelExporter.integerFormat=#,##0
excelExporter.doubleFormat=#,##0.00##############
а для конкретной колонки формат указать нельзя?
Тогда кмк вы правы, лучше сразу смотреть в сторону Reports Add-on, спасибо за ссылки.

Еще остался вопрос по ошибке при выборе “All rows” для DTO сущности.

Здравствуйте @job_oleg,

Вывод в ExcelExporter происходит с помощью библиотеки POI. Вы можете в методе io.jmix.gridexportflowui.exporter.excel.ExcelExporter#exportDataGrid задать формат для определенной колонки, например по ID колонки, но данное изменение будет затрагивать export и в других таблицах, там где используется данный action.

По ошибке, не получилось воспроизвести. Можете прислать демо проект с данной проблемой?

С Уважением,
Никита

Проект связан с бд oracle, поэтому на стороне ошибку вряд ли получится воспроизвести.
Могу лишь добавить, что если в DTO сущности к полю с id добавить аннотацию @JmixId, то при выборе “All rows” в окне Confirmation ошибки не возникает, но экспортируются только заголовки без записей.
Проблему можно обойти вызовом exportDataGrid с ExportMode.CURRENT_PAGE без вывода окна.