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

Angular中使用SheetJS导出Excel时固定LastLogin列为最后一列

实现SheetJS导出Excel时固定LastLogin为最后一列

要让LastLogin始终作为Excel的最后一列,核心是手动指定SheetJS生成工作表时的列顺序,而非依赖JSON对象默认的键顺序。具体实现步骤如下:

步骤1:收集所有唯一列名

遍历传入的JSON数组,提取所有出现过的键(列名),通过去重保证每个列名仅保留一次,同时保留其首次出现的顺序。

步骤2:调整列顺序

  • 先筛选出除LastLogin之外的所有列名,保留原有顺序
  • 将LastLogin追加到列名列表的末尾,形成最终固定的列顺序

步骤3:按指定列顺序生成工作表

调用XLSX.utils.json_to_sheet时,通过第二个参数传入自定义列顺序,强制SheetJS按该顺序生成Excel列。

修改后的完整导出函数

// 若未定义常量,先补充以下定义
const EXCEL_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';
const EXCEL_EXTENSION = '.xlsx';

public exportAsExcelFile(json: any[], excelFileName: string): void {
  // 收集所有唯一列名,保留首次出现顺序
  const allKeys = Array.from(new Set(json.flatMap(item => Object.keys(item))));
  
  // 调整列顺序:移除LastLogin后再追加到末尾
  const orderedHeaders = allKeys.filter(key => key !== 'LastLogin').concat('LastLogin');
  
  // 使用自定义列顺序生成工作表
  const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(json, { header: orderedHeaders });
  
  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().getTime() + EXCEL_EXTENSION);
}

代码说明

  • new Set(json.flatMap(item => Object.keys(item))):遍历所有JSON对象的键,用Set去重后转回数组,确保列名唯一且保留首次出现顺序
  • allKeys.filter(key => key !== 'LastLogin').concat('LastLogin'):将LastLogin从列列表中临时移除,再追加到末尾,确保它始终是最后一列
  • XLSX.utils.json_to_sheet(json, { header: orderedHeaders }):通过header参数指定列顺序,SheetJS会严格按照该顺序生成Excel列,不受原始JSON键顺序影响

修改后,无论传入的JSON对象新增或减少字段,LastLogin都会固定在Excel的最后一列。

内容的提问来源于stack exchange,提问作者Prithvi Emmanuel Machado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:01:34