js和html中,将Excel文件渲染在页面上

打印 上一主题 下一主题

主题 854|帖子 854|积分 2562

1.假如从后端拿到的数据是文档流

  1. // 从后端接口获取 Excel 文档流
  2. async function fetchExcelFromBackend() {
  3.     try {
  4.         // 假设后端接口 URL
  5.         const backendApiUrl = `http://local.hct10039.com:18080/recognition/downloadExcel?orderSn=${orderSn}`;
  6.         const response = await fetch(backendApiUrl);
  7.         if (!response.ok) {
  8.             throw new Error('Failed to fetch Excel from backend: ' + response.status);
  9.         }
  10.         const blob = await response.blob();
  11.         const file = new File([blob], 'filename.xlsx', { type: blob.type });
  12.         loadExcelAndRender(file);
  13.     } catch (error) {
  14.         alert('出错了:' + error.message);
  15.     }
  16. }
  17. // 加载并渲染 Excel
  18. async function loadExcelAndRender(file) {
  19.     try {
  20.         const reader = new FileReader();
  21.         reader.onload = function (e) {
  22.             const data = new Uint8Array(e.target.result);
  23.             const workbook = XLSX.read(data, { type: 'array' });
  24.             const firstSheetName = workbook.SheetNames[0];
  25.             const worksheet = workbook.Sheets[firstSheetName];
  26.             const html = XLSX.utils.sheet_to_html(worksheet, { id: firstSheetName });
  27.             document.getElementById('excelDom').innerHTML = html;
  28.         };
  29.         reader.readAsArrayBuffer(file);
  30.     } catch (error) {
  31.         alert('出错了:' + error.message);
  32.     }
  33. }
  34. // 调用函数从后端接口获取并渲染 Excel
  35. fetchExcelFromBackend();
复制代码
2.假如从后端拿到的是文件的地点

  1. function getFileObjectFromUrl(url, callback) {
  2.     var xhr = new XMLHttpRequest();
  3.     xhr.open('GET', url, true);
  4.     xhr.responseType = 'blob'; // 重要:设置响应类型为blob
  5.     xhr.onload = function() {
  6.         if (this.status === 200) {
  7.             // 请求成功,this.response包含Blob对象
  8.             var blob = this.response;
  9.             // 创建File对象
  10.             var file = new File([blob], 'filename.xlsx', {type: blob.type});
  11.             // 调用回调函数,传入File对象
  12.             callback(file);
  13.         } else {
  14.             console.error('Failed to download file:', this.status);
  15.         }
  16.     };
  17.     xhr.onerror = function() {
  18.         console.error('Request error');
  19.     };
  20.     xhr.send();
  21. }
  22. async function loadExcelAndRender(file) {
  23.     try {
  24.         const reader = new FileReader();
  25.         reader.onload = function (e) {
  26.             const data = new Uint8Array(e.target.result);
  27.             const workbook = XLSX.read(data, { type: 'array' });
  28.             const firstSheetName = workbook.SheetNames[0]; // 获取第一个sheet的名称
  29.             const worksheet = workbook.Sheets[firstSheetName];
  30.             const html = XLSX.utils.sheet_to_html(worksheet, {id: firstSheetName}); // 只渲染第一个sheet
  31.             document.getElementById('excelDom').innerHTML = html; // 将HTML渲染到指定的div中
  32.         };
  33.         reader.readAsArrayBuffer(file);
  34.     } catch (error) {
  35.         console.error('Error loading or rendering Excel:', error);
  36.     }
  37. }
复制代码
3.效果


4.附加功能

放大缩小和拖拽功能

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表