vue 前端excel表格导入和导出,Element + xlsx 组件

打印 上一主题 下一主题

主题 511|帖子 511|积分 1533

前端必要导入表格进行数据匹配,并进行表格导出,感谢很多大佬的文章分享,有不对的地方欢迎各人指正。

Element  + xlsx 

安装命令  npm install xlsx 

页面引入  import XLSX from 'xlsx'

一、excel表格导入到表格

  1. <template>
  2.   <div class="main">
  3.     <div class="main_title">工具</div>
  4.                 <div class="main_content main_bg">
  5.       <div class="table_title" >
  6.         <div class="fl left_tbl">
  7.           <div>
  8.             <el-upload
  9.               class="fl upload-demo" action="" ref="upload" accept=".xls,.xlsx"
  10.                 :file-list="fileList" :on-change="handleChange" :show-file-list="false" :auto-upload="false">
  11.               <el-button type="success">导入数据</el-button>
  12.             </el-upload>
  13.             <div class="fl filename" >{{formName}}</div>
  14.             <div class="cf"></div>
  15.           </div>
  16.           <div class="left_tbl_1">
  17.             <el-table :data="tableData" border style="width: 100%" class="tb-edit" height="450"  @cell-click="clickCell" :row-class-name="rowClass">
  18.               <el-table-column label="序号" type="index"  width="50" v-if="tableData.length>0" align="center"></el-table-column>
  19.               <template v-for="(item,index) in dataName" v-if="tableData.length>0" align="center">
  20.                 <el-table-column :label="item" :prop="item" align="center" :key="index"></el-table-column>
  21.               </template>
  22.             </el-table>
  23.           </div>
  24.         </div>
  25.       </div>
  26.     </div>
  27.   </div>
  28. </template>
  29. <script>
  30. import XLSX from 'xlsx'
  31. export default {
  32.     data(){
  33.       return {
  34.         // 表格
  35.         fileList:[],
  36.         tableData: [],
  37.         dataName:[],//表格header
  38.         formName:'',//导入的表格名
  39.       }
  40.     },
  41.     created(){
  42.     },
  43.     methods:{
  44.       
  45.       // 导入表格数据
  46.       handleChange(file) {
  47.         const _this = this
  48.         _this.tableData = []
  49.         _this.fileName = file.name;
  50.         _this.formName = file.name;
  51.         const reader = new FileReader();
  52.         //提取excel中文件内容
  53.         reader.readAsArrayBuffer(file.raw);
  54.         reader.onload = function () {
  55.             const buffer = reader.result;
  56.             const bytes = new Uint8Array(buffer);
  57.             const length = bytes.byteLength;
  58.             let binary = "";
  59.             for (let i = 0; i < length; i++) {
  60.                 binary += String.fromCharCode(bytes[i]);
  61.             }
  62.             const XLSX = require("xlsx");
  63.             const wb = XLSX.read(binary, {
  64.                 type: "binary",
  65.             });
  66.             const outdata = XLSX.utils.sheet_to_json(wb.Sheets[wb.SheetNames[0]]);
  67.             outdata.forEach((i) => {
  68.                 _this.tableData.push(i);
  69.             });
  70.             _this.dataName = Object.keys(_this.tableData[0]);//获取抬头
  71.         };
  72.       },
  73.       
  74. }
  75. </script>
  76. <style >
  77. </style>
复制代码
二、表格数据导出成excel

此处参考Vue中如何进行数据导出与Excel导出?_vue导出excel文件-CSDN博客;
中间一定更要记得引xlsx;
这边的数据是固定的,如果想改成动态的,可以本身写循环更换map方法;
  1. <template>
  2.   <div>
  3.     <button @click="exportData">导出数据</button>
  4.   </div>
  5. </template>
  6. <script>
  7. import XLSX from 'xlsx'
  8. export default {
  9.   data() {
  10.     return {
  11.       tableData: [
  12.         { name: '张三', age: 18, gender: '男' },
  13.         { name: '李四', age: 20, gender: '女' },
  14.         { name: '王五', age: 22, gender: '男' }
  15.       ]
  16.     }
  17.   },
  18.   methods: {
  19.     exportData() {
  20.       const XLSX = require("xlsx");
  21.       const headers = ['姓名', '年龄', '性别']
  22.       const data = this.tableData.map(item => [item.name, item.age, item.gender])
  23.       const worksheet = XLSX.utils.aoa_to_sheet([headers, ...data])
  24.       const workbook = XLSX.utils.book_new()
  25.       XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1')
  26.       XLSX.writeFile(workbook, 'data.xlsx')
  27.     }
  28.   }
  29. }
  30. </script>
复制代码


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

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

张国伟

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

标签云

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