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

Angular读取Excel含空格列名无法在HTML渲染的解决方法咨询

解决Excel列名含空格时Angular无法渲染数据的问题

不需要修改Excel列名的话,有两种可行方案:

方案1:HTML模板中使用方括号语法访问属性

JavaScript/TypeScript中,当对象属性名包含空格、特殊字符时,无法通过.点语法访问,必须改用方括号+字符串的形式。直接在HTML模板里调整访问方式即可:

示例HTML代码:

<div *ngFor="let pricedata of ExcelData">
  <p>物料描述:{{ pricedata['(i) Autodesk Material Description'] }}</p>
  <p>SAP物料描述:{{ pricedata['(ii) Autodesk SAP Material Description'] }}</p>
</div>

这种方法无需修改TypeScript代码,直接适配原始的JSON结构,适合列名不多的场景。

方案2:TypeScript中转换JSON对象的键名

如果觉得HTML里的方括号写法不够简洁,可以在读取Excel后,主动将含空格的列名转换成合法的标识符(如下划线分隔或驼峰式),后续HTML就能用点语法访问。

修改你的ReadExcel方法:

fileReader.onload = (e) => {
  var workBook = XLSX.read(fileReader.result, {type:'binary'});
  var SheetNames = workBook.SheetNames;
  const rawExcelData = XLSX.utils.sheet_to_json(workBook.Sheets[SheetNames[0]]);

  // 转换每个对象的键名:去除前缀括号、空格转下划线
  this.ExcelData = rawExcelData.map(item => {
    const formattedItem: any = {};
    Object.keys(item).forEach(originalKey => {
      // 处理规则:去掉开头的(i)/(ii)前缀,空格替换为下划线
      const cleanedKey = originalKey.replace(/^\(i+\)\s*/, '').replace(/\s+/g, '_');
      formattedItem[cleanedKey] = item[originalKey];
    });
    return formattedItem;
  });

  console.log(this.ExcelData);
}

处理后,HTML里就可以用更简洁的点语法:

<div *ngFor="let pricedata of ExcelData">
  <p>物料描述:{{ pricedata.Autodesk_Material_Description }}</p>
  <p>SAP物料描述:{{ pricedata.Autodesk_SAP_Material_Description }}</p>
</div>

如果偏好驼峰式命名,也可以把键名转换逻辑改成:

const cleanedKey = originalKey
  .replace(/^\(i+\)\s*/, '') // 移除前缀
  .replace(/\s+(.)/g, (_, char) => char.toUpperCase()) // 空格后字符大写
  .replace(/^\w/, c => c.toLowerCase()); // 首字母小写

此时HTML访问方式为{{ pricedata.autodeskMaterialDescription }}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:25:26