首页 > 其他分享 >Exceljs 实现html table转Excel

Exceljs 实现html table转Excel

时间:2024-08-07 20:49:16浏览次数:7  
标签:Vue const 表格 img Excel html table

在 Vue 3 项目中将包含图片的 HTML 表格转换为 Excel 文件,你可以使用 exceljs 库,并结合前端技术来处理图片和表格数据。下面是一个在 Vue 3 项目中实现的示例:

安装依赖

首先,确保你已经安装了 exceljs 库。你可以通过 npm 安装它:

npm install exceljs

示例代码

以下示例展示了如何在 Vue 3 项目中将包含图片的 HTML 表格导出为 Excel 文件:

  1. 创建 Vue 组件

    在你的 Vue 3 项目中,创建一个组件(如 ExportExcel.vue),其中包含导出功能:

    <template>
      <div>
        <button @click="exportTableToExcel">导出 Excel</button>
        <table ref="table">
          <thead>
            <tr>
              <th>Header 1</th>
              <th>Header 2</th>
              <th>Header 3</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>Data 1</td>
              <td><img src="data:image/png;base64,...your_base64_image_data..." alt="Image" style="width:50px;height:50px;"></td>
              <td>Data 3</td>
            </tr>
          </tbody>
        </table>
      </div>
    </template>
    
    <script>
    import * as ExcelJS from 'exceljs';
    
    export default {
      methods: {
        async exportTableToExcel() {
          const table = this.$refs.table;
          const workbook = new ExcelJS.Workbook();
          const worksheet = workbook.addWorksheet('Sheet1');
    
          // 从 HTML 表格中提取数据
          const rows = Array.from(table.querySelectorAll('tr'));
          rows.forEach((row, rowIndex) => {
            const cells = Array.from(row.querySelectorAll('td, th'));
            const rowData = cells.map(cell => {
              const img = cell.querySelector('img');
              if (img) {
                const base64 = img.src.split(',')[1];
                const imageId = workbook.addImage({
                  base64,
                  extension: 'png',
                });
                worksheet.addImage(imageId, {
                  tl: { col: cells.indexOf(cell), row: rowIndex },
                  ext: { width: 100, height: 100 }
                });
                return ''; // 返回空字符串,因为我们已经插入了图片
              }
              return cell.textContent.trim();
            });
            worksheet.addRow(rowData);
          });
    
          // 导出到 Excel 文件
          workbook.xlsx.writeBuffer().then(buffer => {
            const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
            const url = window.URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.href = url;
            a.download = 'table.xlsx';
            document.body.appendChild(a);
            a.click();
            document.body.removeChild(a);
            window.URL.revokeObjectURL(url);
          });
        }
      }
    }
    </script>
    

解释

  1. HTML 表格

    • 使用 ref 获取表格引用,并在 exportTableToExcel 方法中操作。
  2. 处理图片

    • 使用 ExcelJS 将 Base64 编码的图片插入到 Excel 文件中。解析表格中的每个 img 标签,并将其 Base64 数据添加到工作簿中。
  3. 导出 Excel 文件

    • 使用 writeBuffer 方法将工作簿保存为 Blob 对象,并创建一个下载链接供用户下载。

注意事项

  • 图片大小:确保根据实际需求调整图片的宽度和高度。
  • 性能考虑:处理大量图片时,可能需要优化性能,例如分批加载图片。

如果你有其他问题或需要进一步的帮助,请告诉我!

标签:Vue,const,表格,img,Excel,html,table
From: https://www.cnblogs.com/jocongmin/p/18347878

相关文章

  • 09HTML+CSS
    完成小兔鲜儿商城界面1<!DOCTYPEhtml>2<htmllang="en">34<head>5<metacharset="UTF-8">6<metaname="viewport"content="width=device-width,initial-scale=1.0">7......
  • 10HTML+CSS
    平面转换平面转换transform,作用:为元素添加动态效果,一般与过渡配合使用⚫概念:改变盒子在平面内的形态(位移、旋转、缩放、倾斜)⚫平面转换又叫2D转换。属性⚫取值◆像素单位数值◆百分比(参照盒子自身尺寸计算结果)◆正负均可⚫技巧◆translate()只写一个值,表示......
  • 前端HBuilderX HTML5模版,打包成dist 部署
    首先需要修改utils中appConfig.js的ip+路径+域名,使用服务器部署,那么就用服务器的ip,prod-api可以自定义,根据自己的需求起别名找打HBuilderX最上方发行,然后点击找到自己需要的发版,我使用的是网站-PC手机H5找到manifest.json,如果没有域名,点击重新获取即可将获取到的域名......
  • HTML5+CSS3笔记(Xmind格式):第四天
    Xmind鸟瞰图:简单文字总结:HTML5+CSS3知识总结:媒体查询:  1.媒体查询格式:@media设备类型and设备特性  2.screen:设置屏幕  3.max-width(最大宽度),min-width(最小宽度)  4.可以通过媒体查询引入不同的css样式移动端布局方式:  1.静态布局  2.......
  • HTML5+CSS3笔记(Xmind格式):第三天
    Xmind鸟瞰图:简单文字总结:过渡transition:过渡属性过渡时间运动曲线何时开始 2D变形transform:  1.平移:translate(单位px)  2.缩放:scale(默认1,大于1放大,小于1缩小)  3.旋转:rotate(单位deg)  4.倾斜:skew(单位deg)3D变形transform:  1.rotateX......
  • HTML5+CSS3笔记(Xmind格式):第二天
    Xmind鸟瞰图:简单文字总结:新增选择器:  1.选择相邻兄弟  2.属性选择器  3.结构性伪类选择器  4.整体结构类型  5.标签结构类型  6.指定子元素的序号  7.文本选择伪元素  8.表单中使用的状态伪类选择器  9.内容追加伪元素  ......
  • C#读取BIFF4格式的Excel文件
    使用NPOI读取这种格式的Excel文件时会报错:ThesupplieddataappearstobeinBIFF4format.HSSFonlysupportstheBIFF8format,tryOldExcelExtractor如果使用OldExcelExtractor类的话,只能提取成文本,无法结构化读取。 使用ExcelDataRead库https://github.com/ExcelDat......
  • jeecg-vue3, BasicTable与抽屉useDrawer()的简单使用
    需求:分屏情况下,根据传入参数不同查看申请材料1.实现效果点击申请材料弹出,点击取消或点击空白处,抽屉消失2.代码实现2.1files.vue实现<template><divclass="container"><a-button@click="click('sqcl')"style="margin-left:5px;">申请材料</a-b......
  • Excel 转换为 DBC 文件
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录文章摘要一、基本介绍1.CAN通信2.DBC文件二、转换思路框架1.基于DBC文件(.dbc)可以用文本格式(.txt)格式打开的思路,对照标准DBC文件的文本格式来进行转换2.Excel文件处理:提取Excel信息,填入到文......
  • HTML 样式
    您已经很好地概述了HTML中style属性的用途以及它与旧HTML标签和属性的对比。style属性确实提供了一种灵活且强大的方式来直接在HTML元素上应用CSS样式,而无需依赖外部或内部样式表(尽管在大型项目中,通常推荐使用外部样式表以维护样式的集中管理和重用性)。使用style属性的好处直接......