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

使用ExcelService导出对象数组时,如何导出数组类型字段至同一列?

问题描述

现有如下对象数组:

listTutors = [{
  countryId: 'tt',
  gender: 'both',
  levelId: 'tg',
  sessionType: 'inPerson',
  dashboardStatus: ['notPublished', 'published', 'external'],
  subjectId: 'n',
}];

使用自定义ExcelService类导出为XLSX文件的代码如下:

public exportAsExcelFile(json: any[], excelFileName: string): void {
  const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json);
  const workbook: XLSX.WorkBook = {
    Sheets: { data: worksheet },
    SheetNames: ['data'],
  };
  const excelBuffer: any = XLSX.write(workbook, {
    bookType: 'xlsx',
    type: 'array',
  });
  this.saveAsExcelFile(excelBuffer, excelFileName);
}

private saveAsExcelFile(buffer: any, fileName: string): void {
  const data: Blob = new Blob([buffer], { type: EXCEL_TYPE });
  fileSaver.saveAs(
    data,
    fileName + '_export_' + new Date().getMonth() + EXCEL_EXTENSION
  );
}

导出结果中dashboardStatus数组字段未被导出,需要将数组中的内容合并到同一列中显示。

解决方法

方案一:预处理数据转换数组为字符串

XLSX.utils.json_to_sheet默认不会解析数组类型的字段,所以在生成工作表前,先遍历数据将数组转为逗号分隔的字符串即可:

public exportAsExcelFile(json: any[], excelFileName: string): void {
  // 预处理数据,把数组字段转为字符串
  const processedData = json.map(item => ({
    ...item,
    dashboardStatus: item.dashboardStatus?.join(', ') // 用逗号分隔数组元素
  }));

  const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(processedData);
  const workbook: XLSX.WorkBook = {
    Sheets: { data: worksheet },
    SheetNames: ['data'],
  };
  const excelBuffer: any = XLSX.write(workbook, {
    bookType: 'xlsx',
    type: 'array',
  });
  this.saveAsExcelFile(excelBuffer, excelFileName);
}

方案二:手动构建表头与数据行

如果需要更精准的控制导出内容,可以手动定义表头和对应的数据行,确保数组字段被正确处理:

public exportAsExcelFile(json: any[], excelFileName: string): void {
  // 定义导出的表头
  const headers = [
    'countryId', 'gender', 'levelId', 'sessionType', 'dashboardStatus', 'subjectId'
  ];
  // 转换每一行数据,将数组转为字符串
  const rows = json.map(item => [
    item.countryId,
    item.gender,
    item.levelId,
    item.sessionType,
    item.dashboardStatus?.join(', '),
    item.subjectId
  ]);

  // 从二维数组创建工作表
  const worksheet: XLSX.WorkSheet = XLSX.utils.aoa_to_sheet([headers, ...rows]);
  const workbook: XLSX.WorkBook = {
    Sheets: { data: worksheet },
    SheetNames: ['data'],
  };
  const excelBuffer: any = XLSX.write(workbook, {
    bookType: 'xlsx',
    type: 'array',
  });
  this.saveAsExcelFile(excelBuffer, excelFileName);
}

额外说明

  • 如果需要在单元格内换行显示数组元素,可以将分隔符换成'\n',并在Excel中开启单元格自动换行功能。
  • 若存在dashboardStatus为undefined的情况,可选添加默认值,比如item.dashboardStatus?.join(', ') || '无状态'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:39:40