Vue中導(dǎo)入導(dǎo)出Excel

由于項(xiàng)目需要導(dǎo)出Excel,所以測(cè)試了兩種的方法

第一種:使用vue-json-excel
  • 這個(gè)庫導(dǎo)出數(shù)據(jù)的時(shí)候只能導(dǎo)出為xlscsv格式曾棕,并且由于是通過html強(qiáng)制轉(zhuǎn)換成xls的所以生成的文件打開時(shí)會(huì)報(bào)錯(cuò)刊懈,導(dǎo)出后用office打開會(huì)提示“文件格式和擴(kuò)展名不匹配”
    所以不建議使用這種方式赌厅,直接跳過
第二種:使用js-xlsx

js-xlsxSheetJS出品的一款非常方便的只需要純JS即可讀取和導(dǎo)出excel的工具庫恢氯,功能強(qiáng)大靖苇,支持格式眾多杉辙,支持xls模捂、xlsxods(一種OpenOffice專有表格文件格式)等十幾種格式蜘矢。

  • 安裝xlsx
npm install -S xlsx
  • 引入xlsx
import * as xlsx from 'xlsx'
  • 導(dǎo)入Excel轉(zhuǎn)換為json數(shù)據(jù)
    ExcelToJson.vue源碼
<template>
  <div>
    <el-upload
      class="upload-demo"
      action="/"
      :before-upload="beforeUpload"
      multiple
      :limit="3"
      :file-list="fileList">
      <el-button size="small" type="primary">點(diǎn)擊上傳</el-button>
      <div slot="tip" class="el-upload__tip">只能上傳大小不超過500kb</div>
    </el-upload>
    <el-table
        :data="tableData"
        border
        style="width: 100%">
      <el-table-column
          prop="__rowNum__"
          label="序號(hào)">
      </el-table-column>
      <el-table-column
          prop="wlmc"
          label="物料名">
      </el-table-column>
      <el-table-column
          prop="jg"
          label="價(jià)格">
      </el-table-column>
      <el-table-column
          prop="sl"
          label="數(shù)量">
      </el-table-column>
    </el-table>
  </div>
</template>
 
<script>
import { doReadExcelFile } from '@/utils/file.js'

export default {
  components: {},
  data() {
    return {
      tableData: [],
      fileList:[]
    };
  },
  props: {},
  created() {},
  mounted() {},
  computed: {},
  methods: {
    async beforeUpload(file){
      let data = await doReadExcelFile(file)
      this.tableData = data
      return false //false不上傳文件
    }
  },
  watch: {}
};
</script>
 
<style lang="scss" scoped>
</style>

utils/readfile.js源碼

import * as xlsx from 'xlsx'

export const readFile = (file)=>{
  return new Promise(resolve => {
    let reader = new FileReader()
    reader.readAsBinaryString(file)
    reader.onload = ev => {
      resolve(ev.target.result)
    }
  })
}
export const doReadExcelFile= async (file)=>{
  let dataBinary = await readFile(file)
  let workBook = xlsx.read(dataBinary, {type: 'binary', cellDates: true})
  let workSheet = workBook.Sheets[workBook.SheetNames[0]]
  const data = xlsx.utils.sheet_to_json(workSheet)
  console.log(data)
  return data
}
  • 導(dǎo)出json數(shù)據(jù)生成Excel文件
    源碼:
 
<template>
  <div>
    <el-button type="success" @click='json2Excel'>導(dǎo)出Excel</el-button>
    <el-table
        :data="tableData"
        border
        style="width: 100%">
      <el-table-column
          prop="wlmc"
          label="物料名">
      </el-table-column>
      <el-table-column
          prop="jg"
          label="價(jià)格">
      </el-table-column>
      <el-table-column
          prop="sl"
          label="數(shù)量">
      </el-table-column>
    </el-table>

  </div>
</template>
 
<script>
import * as xlsx from 'xlsx'
export default {
  components: {},
  data() {
    return {
      tableData: [{
        wlmc: '氯化鈉',jg: '10',sl: '100'}, 
        {wlmc: '鹽酸',jg: '20',sl: '50'}, 
        {wlmc: '硫酸',jg: '30',sl: '100'}, 
        {wlmc: '蔗糖',jg: '15',sl: '20'}]
    };
  },
  props: {},
  created() {},
  mounted() {},
  computed: {},
  methods: {
    json2Excel(){
      // 創(chuàng)建工作表
      let data = xlsx.utils.json_to_sheet(this.tableData);
      // 創(chuàng)建工作簿
      let wb = xlsx.utils.book_new();
      // 將工作表放入工作簿中
      xlsx.utils.book_append_sheet(wb, data, 'Sheet1');
      // 生成文件并下載
      xlsx.writeFile(wb, 'test.xlsx');
    }
  },
  watch: {}
};
</script>
 
<style lang="scss" scoped>
</style>

若是需要導(dǎo)出后端中的數(shù)據(jù)可以利用AJAX,fech,Axios等方法獲取后端數(shù)據(jù)狂男,但要注意異步和跨域等問題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市品腹,隨后出現(xiàn)的幾起案子岖食,更是在濱河造成了極大的恐慌,老刑警劉巖珍昨,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件县耽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡镣典,警方通過查閱死者的電腦和手機(jī)兔毙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兄春,“玉大人澎剥,你說我怎么就攤上這事「嫌撸” “怎么了哑姚?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)芜茵。 經(jīng)常有香客問我叙量,道長(zhǎng),這世上最難降的妖魔是什么九串? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任绞佩,我火速辦了婚禮,結(jié)果婚禮上猪钮,老公的妹妹穿的比我還像新娘品山。我一直安慰自己,他們只是感情好烤低,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布肘交。 她就那樣靜靜地躺著,像睡著了一般扑馁。 火紅的嫁衣襯著肌膚如雪涯呻。 梳的紋絲不亂的頭發(fā)上凉驻,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音魄懂,去河邊找鬼沿侈。 笑死闯第,一個(gè)胖子當(dāng)著我的面吹牛市栗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播咳短,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼填帽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了咙好?” 一聲冷哼從身側(cè)響起篡腌,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎勾效,沒想到半個(gè)月后嘹悼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡层宫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年杨伙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萌腿。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡限匣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出毁菱,到底是詐尸還是另有隱情米死,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布贮庞,位于F島的核電站峦筒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏窗慎。R本人自食惡果不足惜物喷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捉邢。 院中可真熱鬧脯丝,春花似錦、人聲如沸伏伐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽藐翎。三九已至材蹬,卻和暖如春实幕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背堤器。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工昆庇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人闸溃。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓整吆,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親辉川。 傳聞我的和親對(duì)象是個(gè)殘疾皇子表蝙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容