0

我添加上下文菜单并将导出重新分配给 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;
};
})();

例如:https ://plnkr.co/edit/ysaS5IJzOwvVacRb

  1. 运行导出到 Excel(格式化) - 获取 xlsx
  2. 运行导出到 xml - 获取 xml
  3. 运行导出到 Excel(格式化) - 获取 xml 而不是 xlsx
4

1 回答 1

1

在您自定义的 Excel 导出中,您必须定义exportMode属性。显式定义此属性的原因是 AG Grid 使用相同的方法来导出这两种类型,并且exportMode在此处起着至关重要的作用。如果未定义导出模式,则 AG Grid 使用this.getExportMode()最后使用exportMode的(在您的情况下为 XML)。

这就是 AG Grid 实现导出功能的方式。

    case 'excelExport':
      return {
       name: localeTextFunc('excelExport', 'Excel Export (.xlsx)‎'),
                action: function () { return _this.gridApi.exportDataAsExcel({
                    exportMode: 'xlsx'
                }); }
            };
        case 'excelXmlExport':
            return {
                name: localeTextFunc('excelXmlExport', 'Excel Export (.xml)‎'),
                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;
          },
        });
于 2020-08-29T12:45:39.123 回答