You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular Ag-Grid Value Getter渲染值导出Excel显示原始值如何解决

解决方案

方法1:使用Ag-Grid原生API直接获取单元格显示值

Ag-Grid提供了直接获取渲染后值的API,不需要手动重写逻辑,适配所有配置了valueGetter/valueFormatter的列,修改你的导出函数即可:

btnExport(){
  let filtereddata = [];
  this.gridApi.forEachNodeAfterFilterAndSort(grd=> {
    const processedRow = {};
    // 遍历所有列,取渲染后的显示值而非原始值
    this.columnDefs.forEach(col => {
      processedRow[col.field] = this.gridApi.getValue(col.field, grd);
    });
    filtereddata.push(processedRow);
  });
  this.exportService.exportDataAsExcel(filtereddata, this.columnDefs, "filename");
}

方法2:手动复用现有valueGetter处理数据

如果你不想调用GridAPI,也可以在遍历行数据时主动调用列定义中的valueGetter处理对应字段:

btnExport(){
  let filtereddata = [];
  this.gridApi.forEachNodeAfterFilterAndSort(grd=> {
    // 拷贝原始数据后做替换处理
    const processedRow = {...grd.data};
    this.columnDefs.forEach(col => {
      if(col.valueGetter) {
        // 构造valueGetter需要的入参
        const params = {
          colDef: col,
          data: grd.data
        };
        processedRow[col.field] = col.valueGetter(params);
      }
    });
    filtereddata.push(processedRow);
  });
  this.exportService.exportDataAsExcel(filtereddata, this.columnDefs, "filename");
}

可选优化:简化现有valueGetter逻辑

你当前的rateValueGetter可以简化为更简洁的写法:

rateValueGetter(params): string {
  if(params.colDef.field !== "rate" || !params.data?.rate) return '';
  return params.data.rate.includes('1') ? 'Y' : 'N';
}

内容的提问来源于stack exchange,提问作者programmer0892

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 11:45:04