vue实现列表的导出excel表格的功能

Vue--将页面中数据导出excel文件(导出table表格数据) 一、 安装三个依赖项 $ npm install -S file-saver $ npm install -S xlsx $ npm install -D script-loader 二、在项目中新建一个文件夹(一般在src下新建,文件名自取,在这里命名为excel),在文件夹中放入Blob.js 和 export2Excel.js (这两个文件可在gitup上进行下载) Blob.js ... 阅读详情
vue在做后台管理系统,会有导出excel表格的功能。
首先,通过npm或者yarn安装插件xlsx和file-saver

npm i xlsl -S // 用于导出Excel表
npm i file-saver -S // 用于文件的下载

然后,话不多说复制就完事了,创建一个js文件ExportExcel.js,将下面所有代码ctrl + c,ctrl + v 到里面。这段代码为封装的导出表格的功能。
/* eslint-disable */
require('file-saver');
import XLSX from 'xlsx'

function generateArray(table) {
  var out = [];
  var rows = table.querySelectorAll('tr');
  var ranges = [];
  for (var R = 0; R < rows.length; ++R) {
    var outRow = [];
    var row = rows[R];
    var columns = row.querySelectorAll('td');
    for (var C = 0; C < columns.length; ++C) {
      var cell = columns[C];
      var colspan = cell.getAttribute('colspan');
      var rowspan = cell.getAttribute('rowspan');
      var cellValue = cell.innerText;
      if (cellValue !== "" && cellValue === +cellValue) cellValue = +cellValue;

      //Skip ranges
      ranges.forEach(function (range) {
        if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
          for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
        }
      });

      //Handle Row Span
      if (rowspan || colspan) {
        rowspan = rowspan || 1;
        colspan = colspan || 1;
        ranges.push({
          s: {
            r: R,
            c: outRow.length
          },
          e: {
            r: R + rowspan - 1,
            c: outRow.length + colspan - 1
          }
        });
      };

      //Handle Value
      outRow.push(cellValue !== "" ? cellValue : null);

      //Handle Colspan
      if (colspan)
        for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
    }
    out.push(outRow);
  }
  return [out, ranges];
};

function datenum(v, date1904) {
  if (date1904) v += 1462;
  var epoch = Date.parse(v);
  return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
}

function sheet_from_array_of_arrays(data, opts) {
  var ws = {};
  var range = {
    s: {
      c: 10000000,
      r: 10000000
    },
    e: {
      c: 0,
      r: 0
    }
  };
  for (var R = 0; R !== data.length; ++R) {
    for (var C = 0; C !== data[R].length; ++C) {
      if (range.s.r > R) range.s.r = R;
      if (range.s.c > C) range.s.c = C;
      if (range.e.r < R) range.e.r = R;
      if (range.e.c < C) range.e.c = C;
      var cell = {
        v: data[R][C]
      };
      if (cell.v === null) continue;
      var cell_ref = XLSX.utils.encode_cell({
        c: C,
        r: R
      });

      if (typeof cell.v === 'number') cell.t = 'n';
      else if (typeof cell.v === 'boolean') cell.t = 'b';
      else if (cell.v instanceof Date) {
        cell.t = 'n';
        cell.z = XLSX.SSF._table[14];
        cell.v = datenum(cell.v);
      } else cell.t = 's';

      ws[cell_ref] = cell;
    }
  }
  if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
  return ws;
}

function Workbook() {
  if (!(this instanceof Workbook)) return new Workbook();
  this.SheetNames = [];
  this.Sheets = {};
}

function s2ab(s) {
  var buf = new ArrayBuffer(s.length);
  var view = new Uint8Array(buf);
  for (var i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
  return buf;
}

export function export_table_to_excel(id) {
  var theTable = document.getElementById(id);
  var oo = generateArray(theTable);
  var ranges = oo[1];

  /* original data */
  var data = oo[0];
  var ws_name = "SheetJS";

  var wb = new Workbook(),
    ws = sheet_from_array_of_arrays(data);

  /* add ranges to worksheet */
  // ws['!cols'] = ['apple', 'banan'];
  ws['!merges'] = ranges;

  /* add worksheet to workbook */
  wb.SheetNames.push(ws_name);
  wb.Sheets[ws_name] = ws;

  var wbout = XLSX.write(wb, {
    bookType: 'xlsx',
    bookSST: false,
    type: 'binary'
  });

  saveAs(new Blob([s2ab(wbout)], {
    type: "application/octet-stream"
  }), "test.xlsx")
}

export function export_json_to_excel({
  header,
  data,
  filename,
  autoWidth = true,
  bookType=  'xlsx'
} = {}) {
  /* original data */
  filename = filename || 'excel-list'
  data = [...data]
  data.unshift(header);
  var ws_name = "SheetJS";
  var wb = new Workbook(),
    ws = sheet_from_array_of_arrays(data);

  if (autoWidth) {
    /*设置worksheet每列的最大宽度*/
    const colWidth = data.map(row => row.map(val => {
      /*先判断是否为null/undefined*/
      if (val === null) {
        return {
          'wch': 10
        };
      }
      /*再判断是否为中文*/
      else if (val.toString().charCodeAt(0) > 255) {
        return {
          'wch': val.toString().length * 2
        };
      } else {
        return {
          'wch': val.toString().length
        };
      }
    }))
    /*以第一行为初始值*/
    let result = colWidth[0];
    for (let i = 1; i < colWidth.length; i++) {
      for (let j = 0; j < colWidth[i].length; j++) {
        if(result[j]!=undefined){
          if (result[j]['wch'] < colWidth[i][j]['wch']) {
            result[j]['wch'] = colWidth[i][j]['wch'];
          }
        }
      }
    }
    ws['!cols'] = result;
  }

  /* add worksheet to workbook */
  wb.SheetNames.push(ws_name);
  wb.Sheets[ws_name] = ws;

  var wbout = XLSX.write(wb, {
    bookType: bookType,
    bookSST: false,
    type: 'binary'
  });
  saveAs(new Blob([s2ab(wbout)], {
    type: "application/octet-stream"
  }), `${filename}.${bookType}`);
}

生成表格的代码如下写在vue的methods里面(别告诉我你不知道methods),下面代码有详细注释,如果看不懂就复制到methods里面看效果,然后一点点的改就ok了,需要修改五个地方。

首先,列表中数据我是放在放在dataList数组中了,第一行dataList需要改
其次,第二行的import()里面的路径需要修改,路径为你上面新建的ExportExcel.js的路径
其次,tHeader数组里面的标题可以修改。根据需要改,不限制个数。
然后,filterVal数组里面的值为数据的字段,就是dataList数组中对象的属性,需要修改。
最后,第20行的filename的值为文件名,可以修改。

exportExcel() {
      const sourceOriginAmount = this.dataList
      import('@/components/ExportExcel/Export2Excel.js').then(excel => { // 导入js模块
        const tHeader = ['首次预警时间', '最近预警时间', '辖区', '经纬度', '报警来源', '报警频次'] // 导出excel 的标题
        const filterVal = ['firstDatetime', 'nearDateTime', 'Address', 'LatitudeLongitude', 'Alarmresource', 'observationFrequency'] // 每个标题对应的字段
        const list = (sourceOriginAmount || []).map((item, key) => { // 通过 map 方法遍历,组装数据成上面的格式
          return {
            firstDatetime: item.observationDatetime.replace('T', ' ').substring(5, 16),
            nearDateTime: '',
            Address: item.formattedAddress,
            LatitudeLongitude: Math.ceil(item.longitude) + ',' + Math.ceil(item.latitude),
            Alarmresource: '卫星',
            observationFrequency: item.observationFrequency
          }
        })
        if (list) {
          const data = this.formatJson(filterVal, list) // 生成json数据
          excel.export_json_to_excel({ // 调用excel方法生成表格
            header: tHeader,
            data,
            filename: '报警管理'
          })
        } else {
          alert('暂无数据')
        }
      })
    },
    formatJson(filterVal, jsonData) {
      return jsonData.map(v => filterVal.map(j => v[j]))
    }
如果不成功,请看是不是复制全了,或者单词写错了,重装一下开始的插件,如果成功了,赞一个吧
vue 将列表中的数据导出为Excel文件 需求: 点击“导出”按钮,将列表中的数据导出为Excel文件。 1.安装依赖。 cnpm install -S file-saver xlsx cnpm install -D script-loader 2.添加两个js文件。 在src目录下新建excel文件夹,里面放入Blob.js和Export2Excel.js两个JS文件 链接: https://pan.baidu.com/s/1dQLf... 阅读详情

相关推荐

vue后台系统管理项目-table列表分页搜索重置导出excel功能

element-ui table列表分页条件搜索查询重置导出功能

总结前端开发中遇到的问题,分享前端知识 709

Vue导出列表为excel

前端导出数据为excel表

YYTX_YS的博客 296

CLIP-Count代码配置以及踩坑记录

CLIP-Count代码配置以及踩坑记录

学术菜鸡 1004

vue中将el-table导出为excel文件

可以用。

weixin_45304926的博客 1988

Linux初级介绍之番外篇:Linux挂载windows中的共享目录

挂载windows共享目录Windows端共享权限设定解禁Guest设置共享目录权限Linux挂载端扫描共享目录挂载共享目录遇到错误的解决方案 Windows端共享权限设定 解禁Guest 右击我的电脑选择管理–>本地用户和组–>在用户项中双击Guest用户–>取消账号已禁用选项 设置共享目录权限 右击共享目录点属性–>在共享页面中点击共享选项–>下拉选择共享对象为Everyone–>点击共享按钮 3.设置本地策略 打开命令框–>输入secpol.msc–&gt

m0_53497201的博客 227

HIL(硬件在环)技术汇总梳理

HIL(Hardware-in-the-Loop)测试领域的知名公司有dSPACE、NI、Vector和speedgoat等,本文是针对这几家HIL技术的对比分析。

Mr.Cssust的博客 3668

vue项目中如何将数据导出到excel中

需求:在后台管理项目中,可能会遇到这样一个需求,把查询得到的数据导出到excel表格中,并且可以下载。此时可以借助js-export-excel来实现,到达我们想要的效果 使用方法: 一、安装依赖 npm install js-export-excel or yarn add js-export-excel 二、导入js-export-excel(在你需要导出的数据页面) import ExportJsonExcel from "js-export-excel"; 三、导出方法实现

m0_57391092的博客 4950

Isaac Sim 车辆动力学:从参数调优到户外仿真的挑战与实战

本文深入探讨了Isaac Sim在车辆动力学仿真中的应用,从参数调优到户外场景模拟的实战经验。详细解析了悬架系统、轮胎物理模型等核心参数的设置技巧,并分享了应对户外仿真挑战的实用方案。通过Vehicle Wizard高级使用和传感器配置,帮助开发者高效完成车辆仿真与算法开发。

weixin_29192211的博客 397

Vue纯前端导出数据到Excel电子表格

参考:https://segmentfault.com/a/1190000012117303#comment-area 一、安装依赖(前面基本一样) npm install file-saver --save npm install xlsx --save npm install script-loader --save-dev 二、下载两个所需要的js文件Blob.js和 Export2...

林中明月间丶 4369

agv调度系统3.0技术介绍

agv调度系统,穿梭车调度系统,调度系统技术介绍,教你做调度

持续分享调度系统开发过程 4857

HTML5期末大作业:水果超市网站设计——水果超市(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 网购商城设置网页

HTML5期末大作业:水果超市网站设计——水果超市(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 网购商城设置网页 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业, 可满足大

1705

vue实现导出excel的两种方式

Vue实现导出exel的方法

zhaoyan_love的博客 8161

MVSNet (pytorch版) 搭建环境 运行dtu数据集重建 实操教程(图文并茂、超详细)

MVSNet (pytorch版) 代码注释版 下载 (注释非常详细,代码结构有所调整,使用起来更方便) 深度学习三维重建 MVSNet-ECCV-2018 (源码、pytorch版、原文+注释、译文+批注)Meshlab查看三维点云时 ,使用技巧总结。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2930

vue.js导出excel表格

vue.js导出excel表格 vue页面 &lt;el-button id=“button” size=“medium” type=“primary” @click=“export2Excel”&gt;导出明细 js //导出excel表格 export2Excel() {       require.ensure([], () =&gt; {         const { export_j...

qq_39549919的博客 469

【100%通过率】华为OD机试真题 JavaScript 实现【对称美学】【2023 Q1 | 100分】

对称就是最大的美学,现有一道关于对称字符串的美学。 已知: 第1个字符串:R 第2个字符串:BR 第3个字符串:RBBR 第4个字符串:BRRBRBBR 第5个字符串:RBBRBRRBBRRBRBBR相信你已经发现规律了,没错! 就是第i个字符串=第i-1号字符串的取反+第i-1号字符串。取反即(R->B,B->R); 现在告诉你n和k,让你求得第n个字符串的第k个字符是多少。(k的编号从0开始)

MISAYAONE的博客 9845

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

vue 导出excel表格实践

本文参考https://github.com/daoyuly/export2excel-demo vue导出Excel,依赖于如下两个插件 cnpm install --save xlsx file-saver cnpm install -D script-loader 插件安装后:需要建立一个vendor文件夹,有如下两个js 使用,书写导出方法 expor...

攻防人生3722的博客 329

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

vue3导出Excel表格

平时我们做后台项目的时候需要做列表的导出功能,有一种列表导出是纯前端导出,另一种列表导出则是需要调用后端的导出接口。(3)、单独封装成一个js,建一个exportExcel.js(很多地方都用得到)(1)、注意接口的返回类型为:responseType: ‘blob’(4)、使用,在你需要的页面引用exportExcel.js文件。(2)、引入(main.js引入或者第3步的js里引入都可以)(1)、首先下载 js-export-excel。(2)、转换二进制的方法封装成一个js。

YM123456999的博客 453

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

vue导出Excel(一)

引入工具库,下面代码是demo cnpm install -S file-saver xlsx cnpm install -D script-loader <template> <div> <el-button type="primary" @click="exportExcel">导出文件</el-button> <el-table :data="tableData" style="width: 100%" id=.

q1424966670的博客 1万+

Vue 导出excel 表格方法封装

首先需要安装导出excel所需的插件,不会的可以借鉴这篇 link. 1.新建文件exportExcel.vue <template> //导出按钮名称及格式 <el-button size="small" type="primary" @click="handleClick" icon="el-icon-download" >{{name}}</el-button > </template> <

sea9528的博客 587

vue3中基于xlsx-js-style进行excel导出且可合并

【代码】vue3中基于xlsx-js-style进行excel导出且可合并。

CHENC0518的博客 222

vue+element-ui文件导出模板及导入xlsx文件

vue文件的导出与导入前言一、导出模板二、1.引入库2.读入数据总结 前言 当我们做后台管理的时候,不免会遇到导出模版,将模版修改之后再导入传给后端,废话不多说,上代码 一、导出模板 <!-- 导出或导入评估明细弹出框 --> <el-dialog title="导入" :visible.sync="dialogLeadIn" width="40%" :modal-append-to-body="false" :a

weixin_54523278的博客 1557

XCEL界面全解析:从文件导入到结果导出的每个按钮都有什么用?

XCEL是由凹凸实验室开发的一款基于Electron和Vue的Excel数据过滤工具,专为高效处理表格数据设计。无论是数据筛选、格式转换还是结果导出,XCEL都能通过直观的界面帮助用户轻松完成复杂的数据处理任务。本文将详细解析XCEL的界面布局和核心功能按钮,让你快速掌握这款强大工具的使用方法。 ### 凹凸实验室出品:值得信赖的开源工具 XCEL由国内知名前端团队凹凸实验室(O2)开发,秉承

gitblog_01010的博客 683

vue中纯前端实现导出简单Excel表格的功能

来源 |https://www.daimajiaoliu.com/daima/479836640100408Vue中纯前端导出简单Excel表格的方法(使用vue-json-excel...

web前端开发 1万+

Vue前端实现excel的导入、导出、打印功能

Vue前端实现excel的导入、导出、打印功能 一、相关依赖 二、excel导入功能 三、table导出excel表格 1.导出行数据 2.导出table数据(也会导出合并单元格) 3.导出二维数据的table数据 4.导出合并单元格table数据 四、table导出excel表格(带样式) 1.导出带样式的excel 五、打印功能 1.直接使用window自带的打印功能: window.print() 2.使用打印插件:vue-print-nb

Litt_White的博客 1万+

基于vue 实现 excel导出导入功能

这波你必须要学会的基于vue的表格的导入和导出功能,可以不用,但是不能不会

LOxia的博客 1万+
上一篇: vue实现列表的复选框,单选,多选
下一篇: vue 前端将Excel表格导入 ,并解析成Json数据发送给后端
JKC_HOWL
博客等级 码龄6年 157粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值