vue使用js-table2excel将数据导出Excel表格,含文字、图片类型, 设置表格样式/添加合并单元格

本文档介绍了如何在Vue项目中使用js-table2excel插件导出包含文字和图片的Excel表格,并展示了如何修改源码添加合并单元格功能。通过安装插件、引入、使用以及展示代码实现过程,详细解释了整个流程,最终实现了带有照片和合并单元格的Excel表格导出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目遇到了一个需求,在后台将学生信息以Excel表格导出,学生信息包含姓名、联系电话、照片等信息,一般情况下信息导出只需要导出字符串类型,但是现在的导出内容包含了图片,于是百度看到了js-table2excel可以导出图片,下面记录一下怎么在vue项目中使用js-table2excel导出带有文字、图片类型的excel表格。

1.安装js-table2excel

npm install js-table2excel

2.在需要用到的地方引入插件

import table2excel from 'js-table2excel' 

3.在文件中使用

<el-table :data="studentList" ref="myTable" style="width: 100%" @selection-change="handleSelectionChange">
    <el-table-column type="selection" width="55"></el-table-column>
                    
    <el-table-column prop="fullName" label="姓名"  width="100"></el-table-column>
    <!-- 此处省略... -->
</el-table>
//js 部分
var column = [];
this.$refs['myTable'].$children.forEach(element => {
                
    if(element.label && element.label!='操作') {
       let temp = {
           title: element.label,
           key: element.prop,       //key值对应表单数据字段名称
           type: 'text',
           }
       if(temp.title=='照片') {
           temp.type = 'image';
           temp.key = 'photo';
           temp.width= 75,
           temp.height= 100
       }
        column.push(temp)
    }
});
var datas = this.multipleSelection;   //表单数据
const excelName = '学生信息_'+ new Date().toLocaleString()             //文件名称
table2excel(column, datas, excelName)    //生成Excel表格,自动下载

 4.导出成功截图如下

但是我还想给表格顶部添加一行合并单元怎么弄呢?查看了源码,发现源码并没有实现合并单元的代码,于是乎本小菜鸟决定动手在顶部 加个合并单元格。

上代码(ps: 源码路径:node_modules/js-table2excel/index.js)

修改源码并保存(修改表格样式也是直接在源码添加样式就好....简单粗暴>_<)

....

在文件中使用

 导出excel截图如下

很抱歉,我之前的回答有误,x-data-spreadsheet是基于JavaScript的电子表格库,而不是Vue组件。 以下是一个使用x-data-spreadsheet库实现Excel文件导入导出和可编辑单元样式的示例代码: HTML模板代码: ``` <template> <div> <button @click="exportExcel">导出Excel文件</button> <input type="file" ref="file" style="display:none" @change="importExcel" /> <button @click="() => { this.$refs.file.click() }">导入Excel文件</button> <div ref="spreadsheet"></div> </div> </template> ``` JS代码: ``` <script> import Spreadsheet from 'x-data-spreadsheet' import 'x-data-spreadsheet/dist/xspreadsheet.css' export default { mounted() { const el = this.$refs.spreadsheet const options = { data: [], columns: [ { title: '姓名', field: 'name', width: 120 }, { title: '年龄', field: 'age', width: 80 }, { title: '性别', field: 'gender', width: 80 }, ], style: { bgcolor: '#f1f1f1', align: 'center', valign: 'middle', textwrap: true }, row: { len: 20, height: 30 } } this.spreadsheet = new Spreadsheet(el, options) }, methods: { async exportExcel() { const data = this.spreadsheet.getData() const blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }) const url = URL.createObjectURL(blob) const link = document.createElement('a') link.href = url link.download = 'excel.xlsx' link.click() }, async importExcel() { const file = this.$refs.file.files[0] const reader = new FileReader() reader.onload = async (event) => { const data = event.target.result const { arrayBuffer } = await import('xlsx') const workbook = arrayBuffer(data) const worksheet = workbook.Sheets[workbook.SheetNames[0]] const sheetData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }) const headerRow = sheetData[0] const tableData = [] for (let i = 1; i < sheetData.length; i++) { const rowData = {} for (let j = 0; j < headerRow.length; j++) { const key = headerRow[j] rowData[key] = sheetData[i][j] } tableData.push(rowData) } this.spreadsheet.loadData(tableData) } reader.readAsArrayBuffer(file) } } } </script> ``` 这个示例中,我们使用了x-data-spreadsheet库来渲染一个电子表格。在mounted钩子函数中,我们创建了一个Spreadsheet对象,并将其挂载到了页面上的一个div元素上。我们指定了表格数据、列定义、单元样式和行高等选项。 导出Excel文件的方法是通过调用Spreadsheet对象的getData方法获取表格数据,然后使用Blob对象将数据转换为Excel文件式,并创建一个a标签下载文件。 导入Excel文件的方法是通过一个input元素来获取用户选择的文件,然后使用FileReader对象将文件读取为ArrayBuffer二进制式。接下来,我们使用xlsx库解析文件数据,获取到表格数据后,我们将其转换为x-data-spreadsheet库所需的数据式,并使用Spreadsheet对象的loadData方法加载数据。 希望这个示例能够对您有所帮助。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值