Ag-grid v30中gridOptionsWrapper废弃后,如何处理导出前的列名与列组?
解决Ag-Grid v30中移除gridOptionsWrapper后的列头与数据处理问题
针对你的Angular企业级应用场景,以下是替代旧版gridOptionsWrapper.setProperty的方案,覆盖剪贴板复制和导出时的列名(含多级分组)、缩写替换、日期类型处理需求:
1. 剪贴板复制的统一处理
Ag-Grid v30将剪贴板相关配置直接整合到gridOptions的clipboard属性中,可通过gridApi.setGridOption动态配置,或在Grid初始化时全局设置:
公共服务封装示例
import { Injectable } from '@angular/core'; import { GridApi, ProcessHeaderForClipboardParams, ProcessCellForClipboardParams } from 'ag-grid-community'; @Injectable({ providedIn: 'root' }) export class AgGridClipboardService { // 统一配置剪贴板处理逻辑 setupClipboardProcessing(gridApi: GridApi): void { gridApi.setGridOption('clipboard', { // 处理列头(含多级分组) processHeaderForClipboard: (params: ProcessHeaderForClipboardParams) => { // 优先获取列/分组的显示名称 let headerText = params.columnGroup ? params.columnGroup.getDisplayName() : params.column.getColDef().headerName || params.column.getColId(); // 替换缩写(示例:将"ID"替换为"编号") headerText = this.replaceAbbreviations(headerText); return headerText; }, // 处理单元格数据(如日期格式化) processCellForClipboard: (params: ProcessCellForClipboardParams) => { if (params.value instanceof Date) { // 自定义日期格式,如YYYY-MM-DD return params.value.toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' }); } return params.value; } }); } // 公共缩写替换逻辑 private replaceAbbreviations(text: string): string { const abbreviationMap = { 'ID': '编号', 'DT': '日期', // 可扩展更多替换规则 }; return abbreviationMap[text] || text; } }
组件中使用
在Grid的onGridReady事件中调用服务方法:
onGridReady(params: GridReadyEvent) { this.agGridClipboardService.setupClipboardProcessing(params.api); }
2. 导出(如Excel)的统一处理
导出时可通过exportDataAsExcel/exportDataAsCsv方法的配置参数,传入列头和数据处理回调:
公共服务导出方法示例
import { ProcessHeaderParams, ProcessCellParams } from 'ag-grid-enterprise'; @Injectable({ providedIn: 'root' }) export class AgGridExportService { exportToExcel(gridApi: GridApi): void { gridApi.exportDataAsExcel({ // 处理导出列头 processHeaderCallback: (params: ProcessHeaderParams) => { let headerText = params.columnGroup ? params.columnGroup.getDisplayName() : params.column.getColDef().headerName || params.column.getColId(); return this.replaceAbbreviations(headerText); }, // 处理导出单元格数据 processCellCallback: (params: ProcessCellParams) => { if (params.value instanceof Date) { return params.value.toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' }); } return params.value; }, // 其他导出配置(如文件名、是否包含分组等) fileName: '导出数据.xlsx', skipHeader: false }); } private replaceAbbreviations(text: string): string { const abbreviationMap = { 'ID': '编号', 'DT': '日期', }; return abbreviationMap[text] || text; } }
3. 全局默认配置(可选)
若希望所有Grid自动应用统一处理逻辑,可在Angular模块中配置defaultGridOptions:
import { AgGridModule } from 'ag-grid-angular'; @NgModule({ imports: [ AgGridModule.withComponents([]).withDefaultGridOptions({ clipboard: { processHeaderForClipboard: (params) => { // 全局列头处理逻辑 let headerText = params.columnGroup ? params.columnGroup.getDisplayName() : params.column.getColDef().headerName || params.column.getColId(); return headerText.replace('ID', '编号'); }, processCellForClipboard: (params) => { if (params.value instanceof Date) { return params.value.toLocaleDateString('zh-CN'); } return params.value; } }, excelExport: { processHeaderCallback: (params) => { // 全局导出列头逻辑 let headerText = params.columnGroup ? params.columnGroup.getDisplayName() : params.column.getColDef().headerName || params.column.getColId(); return headerText.replace('ID', '编号'); } } }) ] }) export class AppModule {}
内容的提问来源于stack exchange,提问作者Sourabh
相关产品推荐
相关产品推荐

