当前位置:   article > 正文

react+xlsx读取项目public下文件,并修改文件内容,再下载_xlsx.readfile

xlsx.readfile

xlsx版本 0.18.5  react版本 17.0.2

前提:使用 xlsx.readFile(`${process.env.PUBLIC_URL}/test.xlsx`)  无法拿到文件,但a.href时可以拿到文件 。

原因:

  • 使用a.href时,它是基于浏览器环境,可以使用相对路径进行文件加载
  • XLSX.readFile方法主要是用于在服务器端运行的情况下加载本地文件

解决方案:

  1. import * as XLSX from 'xlsx';
  2. * 下载文件
  3. * */
  4. async function addDataToWorkbook() {
  5. try {
  6. const response = await fetch(`${process.env.PUBLIC_URL}/test.xlsx`);
  7. const arrayBuffer = await response.arrayBuffer();
  8. const data = new Uint8Array(arrayBuffer);
  9. const workbook = XLSX.read(data, { type: 'array' });
  10. // 1.获取第一个工作表
  11. const sheetName = workbook.SheetNames[0];
  12. const sheet = workbook.Sheets[sheetName];
  13. // 2. 获取第一行作为模板
  14. const templateRow = XLSX.utils.sheet_to_json(sheet, { header: 1 })[0];
  15. // 3. 清空工作表中的数据(除第一行外)
  16. const range = XLSX.utils.decode_range(sheet['!ref']);
  17. for (let rowNum = range.s.r + 1; rowNum <= range.e.r; rowNum++) {
  18. const rowAddress = XLSX.utils.encode_row(rowNum);
  19. for (let colNum = range.s.c; colNum <= range.e.c; colNum++) {
  20. const cellAddress = XLSX.utils.encode_col(colNum) + rowAddress;
  21. delete sheet[cellAddress];
  22. }
  23. }
  24. // 4. 添加数据到工作表
  25. const rows = [
  26. ['John', 'Jane'],
  27. [28, 32],
  28. // ... Add more data
  29. ];
  30. XLSX.utils.sheet_add_aoa(sheet, [templateRow, ...rows], { origin: 0 });
  31. // 5. 生成新的 Excel 文件
  32. const updatedWorkbook = XLSX.utils.book_new();
  33. XLSX.utils.book_append_sheet(updatedWorkbook, sheet, sheetName);
  34. const updatedData = XLSX.write(updatedWorkbook, { bookType: 'xlsx', type: 'array' });
  35. // 6. Download the new Excel file
  36. const blob = new Blob([updatedData], {
  37. type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  38. });
  39. const url = URL.createObjectURL(blob);
  40. const link = document.createElement('a');
  41. link.href = url;
  42. link.download = 'updated.xlsx';
  43. link.click();
  44. } catch (error) {
  45. console.error('加载文件出错:', error);
  46. }
  47. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/65859
推荐阅读
相关标签
  

闽ICP备14008679号