Vue实现excel导出,不请求后端

原因是做出来的不符合需求,需要连接后端,又不想删掉,做个记录

1:先创建一个按钮

html 复制代码
 <el-col :span="1.5">
            <el-button
              @click="exportExcel"
              size="mini"
              type="primary"
              icon="el-icon-download"
            >导出Excel</el-button>
</el-col>

2:先查看是XLSX的依赖,没有的话需要安装一下

html 复制代码
npm install xlsx

安装的时候如果报错需要清理缓存,并把依赖包删掉重新安装

node_modules为项目中的依赖包

html 复制代码
npm cache clean --force

//linux
rm -rf node_modules
//windows
Remove-Item -Recurse -Force node_modules

npm install

出现这个问题的话需要,重新编译node-sass

Found bindings for the following environments: - Windows 64-bit with Node.js 10.x This usually happens because your environment has changed since running npm install. Run npm rebuild node-sass to download the binding for your current environment.

html 复制代码
npm rebuild node-sass

3:然后引入

html 复制代码
<script>
import XLSX from 'xlsx';

4:添加导出方法

html 复制代码
method:{
exportExcel() {
      // 导出Excel的方法
      if(this.list.length > 0){
      	//此处的this.list为列表的数据集合
        const data = this.list.map(item => {
          return {
            '列名1': item.数据名称,
            '列名2': item.数据名称,
            '列名3': item.数据名称,
            '列名4': item.数据名称
          };
        });
        const worksheet = XLSX.utils.json_to_sheet(data);
        const columnWidths = [
          { wch: 20 },  // 第一列宽度为20
          { wch: 15 },  // 第二列宽度为15
          { wch: 10 },  // 第三列宽度为10
          { wch: 15 }   // 第四列宽度为15
        ];
        worksheet['!cols'] = columnWidths;
        const workbook = {
          Sheets: { 'data': worksheet },
          SheetNames: ['data']
        };
        const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'buffer' });
        const blob = new Blob([excelBuffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8' });
        const filename = '文件名.xlsx';
        if (typeof navigator.msSaveBlob === 'function') {
          navigator.msSaveBlob(blob, filename);
        } else {
          const link = document.createElement('a');
          if (link.download !== undefined) {
            const url = URL.createObjectURL(blob);
            link.setAttribute('href', url);
            link.setAttribute('download', filename);
            link.style.visibility = 'hidden';
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
          }
        }
      }else{
        this.$message.error('暂无数据');
      }
    },
   }
相关推荐
white-persist18 分钟前
Python实例方法与Python类的构造方法全解析
开发语言·前端·python·原型模式
新中地GIS开发老师1 小时前
Cesium 军事标绘入门:用 Cesium-Plot-JS 快速实现标绘功能
前端·javascript·arcgis·cesium·gis开发·地理信息科学
Superxpang1 小时前
前端性能优化
前端·javascript·vue.js·性能优化
左手吻左脸。1 小时前
解决el-select因为弹出层层级问题,不展示下拉选
javascript·vue.js·elementui
左手吻左脸。1 小时前
Element UI表格中根据数值动态设置字体颜色
vue.js·ui·elementui
李白的故乡1 小时前
el-tree-select名字
javascript·vue.js·ecmascript
Rysxt_1 小时前
Element Plus 入门教程:从零开始构建 Vue 3 界面
前端·javascript·vue.js
隐含1 小时前
对于el-table中自定义表头中添加el-popover会弹出两个的解决方案,分别针对固定列和非固定列来隐藏最后一个浮框。
前端·javascript·vue.js
大鱼前端1 小时前
Turbopack vs Webpack vs Vite:前端构建工具三分天下,谁将胜出?
前端·webpack·turbopack
你的人类朋友1 小时前
先用js快速开发,后续引入ts是否是一个好的实践?
前端·javascript·后端