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

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

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

今天我學(xué)習(xí)了如何使用el-table實(shí)現(xiàn)前端的導(dǎo)出功能,該方法的好處有無(wú)論你的el-table長(zhǎng)什么樣子,導(dǎo)出之后就是什么樣子。

1.安裝三個(gè)插件

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

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

// 根據(jù)dom導(dǎo)出表格
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è)置導(dǎo)出的內(nèi)容是否只做解析,不進(jìn)行格式轉(zhuǎn)換     false:要解析, true:不解析
  const xlsxParam = { raw: true }
  let table = document.querySelector(idSelector).cloneNode(true)
  // 因?yàn)閑lement-ui的表格的fixed屬性導(dǎo)致多出一個(gè)table,會(huì)下載重復(fù)內(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 //默認(rèn)列寬
    let len_max = 400 //最大列寬
    for (let R = range.s.r; R <= range.e.r; ++R) {  //SHEET行
      let cell = { c: C, r: R }                    //二維 列行確定一個(gè)單元格
      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'
            }
          }
        }
        //動(dòng)態(tài)自適應(yīng):計(jì)算列寬
        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é)碼長(zhǎng)度
          st += card11.length * 20  //中文字節(jié)碼長(zhǎng)度
        }
        if (card2) {
          // st += card2.length * 8  //非中文字節(jié)碼長(zhǎng)度
          st += card2.length * 10  //非中文字節(jié)碼長(zhǎng)度
        }
        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=''/>//該方式無(wú)法識(shí)別到
          </template>
        </el-table-column>

     </el-table>//給表格一個(gè)id
      <el-button @click='demo'>導(dǎo)出</el-button>
    </div>
</template>

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

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

4.vue.config.js引入

  //在這個(gè)方法里面
  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才會(huì)壓縮
      })
    ],


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



  },

效果:

擴(kuò)展:

當(dāng)我們會(huì)出現(xiàn)這樣的表格需求時(shí),如果只是用v-if判斷,導(dǎo)出來(lái)會(huì)全部也有,因?yàn)槲覀冎蛔隽藇-if的判斷

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

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

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

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

    Vue同一路由強(qiáng)制刷新頁(yè)面的實(shí)現(xiàn)過(guò)程

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

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

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

    axios封裝與傳參示例詳解

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

    vue打包后dist文件在本地啟動(dòng)運(yùn)行的步驟

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

    淺談vue項(xiàng)目如何打包扔向服務(wù)器

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

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

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

    vue導(dǎo)出excel文件流中文亂碼問(wèn)題及解決

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

最新評(píng)論