Ag 网格 exportDataAsExcel 运行导出到 xml 而不是 xlsx

Posted

技术标签:

【中文标题】Ag 网格 exportDataAsExcel 运行导出到 xml 而不是 xlsx【英文标题】:Ag grid exportDataAsExcel run export to xml instead xlsx 【发布时间】:2020-12-08 08:26:28 【问题描述】:

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

    运行导出到 Excel(格式化)- 获取 xlsx 运行导出到 xml - 获取 xml 运行导出到 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)‎'),
                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;
          ,
        );

【讨论】:

以上是关于Ag 网格 exportDataAsExcel 运行导出到 xml 而不是 xlsx的主要内容,如果未能解决你的问题,请参考以下文章

使用 getDataAsExcel 导出 AG-Grid

在 ag-grid 上使用正确的单元格格式导出到 excel

如何将事件侦听器添加到 ag 网格单元格内的元素(使用 js 或 jquery,不是 angular,不是 reactjs,不是 vue)

react ag网格中的行删除后如何刷新网格

ag-grid-community 与 ag-grid-enterprise 新网格

带有角度材料工具提示的 ag 网格