Ag grid exportDataAsExcel запустить экспорт в xml вместо xlsx

#angular #ag-grid #export-to-excel #export-to-xml

#angular #ag-grid #экспорт в excel #экспорт в xml

Вопрос:

Я добавляю контекстное меню и переназначаю экспорт в csv и Excel — мне нужно экспортировать, используя valueFormatter для некоторого столбца.

Экспорт работает нормально, но после того, как я запускаю экспорт в xml, а затем запускаю экспорт в Excel — я получаю XML-файл.

Это происходит только здесь — потому что я использую getContextMenuItems. Другие таблицы используют стандартное контекстное меню, работающее нормально.

меню:

 getContextMenuItems = (() => {
const self = this;
return (param) => {
  const menu = [
    'copy',
    'copyWithHeaders',
    'paste',
    'separator',
    {
      name: 'Export',
      subMenu: [
        {
          name: 'csvExport',
          action: () => {
            self.gridApi.exportDataAsCsv({
              processCellCallback: (params) => {
                if (params.column.getColDef().valueFormatter) {
                  const valueFormatterParams: ValueFormatterParams = {
                    ...params,
                    data: params.node.data,
                    // tslint:disable-next-line:no-non-null-assertion
                    node: params.node!,
                    colDef: params.column.getColDef()
                  };
                  return params.column.getColDef().valueFormatter(valueFormatterParams);
                }
                return params.value;
              },
            });
          }
        },
        {
          name: 'excelExport',
          action: () => {
            self.gridApi.exportDataAsExcel({
              processCellCallback: (params) => {
                if (params.column.getColDef().valueFormatter) {
                  const valueFormatterParams: ValueFormatterParams = {
                    ...params,
                    data: params.node.data,
                    // tslint:disable-next-line:no-non-null-assertion
                    node: params.node!,
                    colDef: params.column.getColDef()
                  };
                  return params.column.getColDef().valueFormatter(valueFormatterParams);
                }
                return params.value;
              },
            });
          }
        },
        'excelXmlExport'
      ]
    }
  ];
  return menu;
};
})();
  

Например, Plunker:https://plnkr.co/edit/ysaS5IJzOwvVacRb

  1. запускаем экспорт в Excel (форматированный) — получаем xlsx
  2. запустить экспорт в xml — получить xml
  3. запускаем экспорт в Excel (форматированный) — получаем xml вместо xlsx

Ответ №1:

В вашем настраиваемом экспорте в Excel вы должны определить exportMode свойство. причина явного определения этого свойства заключается в том, что AG Grid использует один и тот же метод для экспорта обоих типов и exportMode играет здесь решающую роль. если режим экспорта не определен, тогда используется AG Grid, this.getExportMode() который выдает последнее использованное exportMode значение (в вашем случае XML).

вот как AG Grid реализовал функциональность экспорта.

     case 'excelExport':
      return {
       name: localeTextFunc('excelExport', 'Excel Export (.xlsx)amp;lrm;'),
                action: function () { return _this.gridApi.exportDataAsExcel({
                    exportMode: 'xlsx'
                }); }
            };
        case 'excelXmlExport':
            return {
                name: localeTextFunc('excelXmlExport', 'Excel Export (.xml)amp;lrm;'),
                action: function () { return _this.gridApi.exportDataAsExcel({
                    exportMode: 'xml'
                }); }
            };
  

Измените свой код на это, и он должен работать,

     self.gridApi.exportDataAsExcel({
          exportMode: 'xlsx',
          processCellCallback: (params) => {
            if (params.column.getColDef().valueFormatter) {
              const valueFormatterParams: ValueFormatterParams = {
                ...params,
                data: params.node.data,
                // tslint:disable-next-line:no-non-null-assertion
                node: params.node!,
                colDef: params.column.getColDef()
              };
              return params.column.getColDef().valueFormatter(valueFormatterParams);
            }
            return params.value;
          },
        });