欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用el-table實現(xiàn)純前端導出(適用于el-table任意表格)

 更新時間:2024年03月14日 11:26:19   作者:愛寫代碼的小奶龍  
我們?nèi)粘W鲰椖?特別是后臺管理系統(tǒng),常常需要導出excel文件,這篇文章主要給大家介紹了關(guān)于如何使用el-table實現(xiàn)純前端導出的相關(guān)資料,本文適用于el-table任意表格,需要的朋友可以參考下

今天我學習了如何使用el-table實現(xiàn)前端的導出功能,該方法的好處有無論你的el-table長什么樣子,導出之后就是什么樣子。

1.安裝三個插件

npm install file-save
npm install xlsx
npm install xlsx-style

2.創(chuàng)建Export2Excel.js

// 根據(jù)dom導出表格
import { saveAs } from 'file-saver'
import * as XLSX from 'xlsx'
import * as XLSXStyle from "xlsx-style";

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 exportToExcel(idSelector, fileName, titleNum = 1) {
  // 設(shè)置導出的內(nèi)容是否只做解析,不進行格式轉(zhuǎn)換     false:要解析, true:不解析
  const xlsxParam = { raw: true }
  let table = document.querySelector(idSelector).cloneNode(true)
  // 因為element-ui的表格的fixed屬性導致多出一個table,會下載重復內(nèi)容,這里刪除掉
  if (table.querySelector('.el-table__fixed-right')) {
    table.removeChild(table.querySelector('.el-table__fixed-right'))
  }
  if (table.querySelector('.el-table__fixed')) {
    table.removeChild(table.querySelector('.el-table__fixed'))
  }

  const wb = XLSX.utils.table_to_book(table, xlsxParam)
  let range = XLSX.utils.decode_range(wb.Sheets['Sheet1']['!ref'])
  let cWidth = []
  for (let C = range.s.c; C < range.e.c; ++C) {   //SHEET列
    let len = 100 //默認列寬
    let len_max = 400 //最大列寬
    for (let R = range.s.r; R <= range.e.r; ++R) {  //SHEET行
      let cell = { c: C, r: R }                    //二維 列行確定一個單元格
      let cell_ref = XLSX.utils.encode_cell(cell)  //單元格 A1、A2
      if (wb.Sheets['Sheet1'][cell_ref]) {
        // if (R == 0){
        if (R < titleNum) {
          wb.Sheets['Sheet1'][cell_ref].s = {  //設(shè)置第一行單元格的樣式 style
            alignment: {
              horizontal: 'center',
              vertical: 'center'
            }
          }
        } else {
          wb.Sheets['Sheet1'][cell_ref].s = {
            alignment: {
              horizontal: 'center',
              vertical: 'center'
            }
          }
        }
        //動態(tài)自適應:計算列寬
        let va = JSON.parse(JSON.stringify(wb.Sheets['Sheet1'][cell_ref].v))
        var card1 = JSON.parse(JSON.stringify(va)).match(/[\u4e00-\u9fa5]/g) //匹配中文
        var card11 = ''
        if (card1) {
          card11 = card1.join('')
        }
        var card2 = JSON.parse(JSON.stringify(va)).replace(/([^\u0000-\u00FF])/g, '')  //剔除中文
        let st = 0
        if (card11) {
          // st += card11.length * 16  //中文字節(jié)碼長度
          st += card11.length * 20  //中文字節(jié)碼長度
        }
        if (card2) {
          // st += card2.length * 8  //非中文字節(jié)碼長度
          st += card2.length * 10  //非中文字節(jié)碼長度
        }
        if (st > len) {
          len = st
        }
      }
    }
    if (len > len_max) {//最大寬度
      len = len_max
    }

    cWidth.push({ 'wpx': len })     //列寬
  }
  wb.Sheets['Sheet1']['!cols'] = cWidth
  const wbout = XLSXStyle.write(wb, { bookType: 'xlsx', bookSST: false, type: 'binary' })
  try {
    saveAs(new Blob([s2ab(wbout)], { type: '' }), `${fileName}.xlsx`)
  } catch (e) {
    if (typeof console !== 'undefined') {
      console.log(e, wbout)
    }
  }
  return wbout
}

3.按需引入

<template>
    <div>
      <el-table  id='table'>
        //形式一
        <el-table-column>
         <template>
           <span>可以用插槽形式</span>
         </template>
        </el-table-column>
     
        //形式二
        <el-table-column lable=可以用這種形式' prop='xxx'/>
     
        //形式三(不可用)
        <el-table-column>
          <template>
            <el-input  v-model=''/>//該方式無法識別到
          </template>
        </el-table-column>

     </el-table>//給表格一個id
      <el-button @click='demo'>導出</el-button>
    </div>
</template>

<script>
import { exportToExcel } from '@/Export2Excel'

export default{
  data(){
    return{}
 },
  methods:{
      demo(){
        exportToExcel('#table', '導出名稱')//id選擇器,導出名稱,調(diào)用這個方法就可以了
      }
  }
}
</script>

4.vue.config.js引入

  //在這個方法里面
  configureWebpack: {
    name: name,
    resolve: {
      alias: {
        '@': resolve('src')
      }
    },
    plugins: [
      // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解壓縮靜態(tài)文件
      new CompressionPlugin({
        cache: false,                   // 不啟用文件緩存
        test: /\.(js|css|html)?$/i,     // 壓縮文件格式
        filename: '[path].gz[query]',   // 壓縮后的文件名
        algorithm: 'gzip',              // 使用gzip壓縮
        minRatio: 0.8                   // 壓縮率小于1才會壓縮
      })
    ],


    //加入這三行
    externals: [{
      './cptable': 'var cptable'
    }]



  },

效果:

擴展:

當我們會出現(xiàn)這樣的表格需求時,如果只是用v-if判斷,導出來會全部也有,因為我們只做了v-if的判斷

實現(xiàn)代碼如下:

<span v-if="index===0">{{scope.row.xxxx}}</span>//如果是第一行就顯示值
<span v-else></span>//如果不是就為空

這樣就可以防止只需要第一個行數(shù)據(jù)的時候其他還會顯示的問題。

總結(jié)

到此這篇關(guān)于如何使用el-table實現(xiàn)純前端導出的文章就介紹到這了,更多相關(guān)el-table純前端導出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue element-ui實現(xiàn)input輸入框金額數(shù)字添加千分位

    vue element-ui實現(xiàn)input輸入框金額數(shù)字添加千分位

    這篇文章主要介紹了vue element-ui實現(xiàn)input輸入框金額數(shù)字添加千分位,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • vue2.0 循環(huán)遍歷加載不同圖片的方法

    vue2.0 循環(huán)遍歷加載不同圖片的方法

    下面小編就為大家分享一篇vue2.0 循環(huán)遍歷加載不同圖片的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue組件傳值異步問題子組件拿到數(shù)據(jù)較慢解決

    Vue組件傳值異步問題子組件拿到數(shù)據(jù)較慢解決

    這篇文章主要為大家介紹了Vue組件傳值異步中子組件拿到數(shù)據(jù)較慢的問題解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Vue同一路由強制刷新頁面的實現(xiàn)過程

    Vue同一路由強制刷新頁面的實現(xiàn)過程

    這篇文章主要介紹了解決VUE同一路由強制刷新頁面的問題,本文給大家分享實現(xiàn)過程,通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • vue3.x項目中,出現(xiàn)紅色波浪線問題及解決

    vue3.x項目中,出現(xiàn)紅色波浪線問題及解決

    這篇文章主要介紹了vue3.x項目中,出現(xiàn)紅色波浪線問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • axios封裝與傳參示例詳解

    axios封裝與傳參示例詳解

    這篇文章主要給大家介紹了關(guān)于axios封裝與傳參的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • vue打包后dist文件在本地啟動運行的步驟

    vue打包后dist文件在本地啟動運行的步驟

    這篇文章主要給大家介紹了關(guān)于vue打包后dist文件在本地啟動運行的簡單步驟,文中通過代碼示例以及圖文介紹的非常詳細,對大家學習或者使用vue具有一定的參考價值,需要的朋友可以參考下
    2023-09-09
  • 淺談vue項目如何打包扔向服務器

    淺談vue項目如何打包扔向服務器

    本篇文章主要介紹了淺談vue項目如何打包扔向服務器,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Vue.js實現(xiàn)表格渲染的方法

    Vue.js實現(xiàn)表格渲染的方法

    今天小編就為大家分享一篇對Vue.js實現(xiàn)表格渲染的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue導出excel文件流中文亂碼問題及解決

    vue導出excel文件流中文亂碼問題及解決

    這篇文章主要介紹了vue導出excel文件流中文亂碼問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論