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

ReactJS中如何用xlsx-js-style读取本地导入的xls文件?

本地Excel模板结合xlsx-js-style的使用方案

一、正确读取导入的模板文件

你通过import导入的文件,实际拿到的是文件的URL路径字符串,而非二进制内容,直接传给xlsx-js-style会导致解析失败。正确流程是先通过fetch获取文件二进制数据,再交给库处理:

  1. 保留原导入语句:
import ExportReportCardTemplate from "asset/files/excel/report_card_template.xls";
import * as xlsx from "xlsx-js-style";
  1. 编写加载与解析逻辑:
async function loadAndModifyTemplate() {
  try {
    // 请求获取文件二进制数据
    const res = await fetch(ExportReportCardTemplate);
    const arrayBuffer = await res.arrayBuffer();
    // 解析为xlsx工作簿对象
    const workbook = xlsx.read(arrayBuffer, { type: 'array' });

    // 操作示例:读取第一个工作表并修改内容/样式
    const sheetName = workbook.SheetNames[0];
    const worksheet = workbook.Sheets[sheetName];
    
    // 修改A1单元格内容与样式
    worksheet['A1'].v = '自定义成绩单标题';
    worksheet['A1'].s = {
      font: { bold: true, sz: 16 },
      alignment: { horizontal: 'center' }
    };

    // 导出修改后的文件
    xlsx.writeFile(workbook, '自定义成绩单.xls');
  } catch (err) {
    console.error('模板处理失败:', err);
  }
}

// 调用执行
loadAndModifyTemplate();

二、报错原因与修复

你遇到的错误是:Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'SheetNames')
这是因为你直接将导入的路径字符串传给了xlsx.read(),库无法解析无效的输入,导致返回的workbook是undefined,自然读取不到SheetNames属性。按照上面的流程,先通过fetch获取ArrayBuffer格式的文件数据,再传入xlsx.read()即可解决。

三、额外注意事项

  • 确保你的打包工具(Webpack/Vite等)配置了对xls文件的支持,一般通过asset模块或file-loader处理,否则导入的路径可能无效。
  • 在Vue/React等框架中,可将上述逻辑放在组件的初始化钩子(如onMounted、componentDidMount)中执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:10:30