最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中如何使用xlsx讀取excel文件實(shí)例代碼

 更新時(shí)間:2023年12月12日 16:00:54   作者:捂耳聽楓  
在Vue中使用xlsx庫可以幫助我們讀取和寫入Excel文件,下面這篇文章主要給大家介紹了關(guān)于vue中如何使用xlsx讀取excel文件的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

下載安裝插件

npm install xlsx
or
yarn add xlsx

在項(xiàng)目的node_modules文件夾和package.json文件中可以找到xlsx依賴

導(dǎo)入項(xiàng)目

import * as XLSX from "../../node_modules/xlsx"

獲取文件對象

這里使用的h5原生文件上傳項(xiàng)

        <input type="file" id="uploadExcel" multiple @change="Change" />

其中multiple屬性允許上傳多個(gè)文件

在選擇文件的過程中,觸發(fā)事件的流程是下面這樣的:

首先觸發(fā)的是鼠標(biāo)按下事件mousedown,然后就是焦點(diǎn)到了input上面,然后鼠標(biāo)抬起事件mouseup,觸發(fā)click事件,失去焦點(diǎn)onblur以后彈出文件選擇框,選中文件以后觸發(fā)焦點(diǎn)focus,最后觸發(fā)change事件。

其中,可以發(fā)現(xiàn)fileList是一個(gè)類數(shù)組,由傳入的file對象組成。每個(gè)file對象包含一下屬性:

打印fileList信息

  let fileList = event.target.files;

屬性屬性值描述
lastModifiedNumber表示最近一次的修改時(shí)間的時(shí)間戳
lastModeifiedDateObject表示最后一次修改時(shí)間的Date對象,可以在其中調(diào)用Date對象的有關(guān)方法。
name文件上傳時(shí)的文件名
size文件的字節(jié)大小
typeString文件的MIME類型
weblitRelativePath當(dāng)在input上添加webkitdirectory屬性時(shí),可選文件夾,此時(shí)weblitRelativePath表示文件夾中文件的相對路徑。未加時(shí)為空

創(chuàng)建一個(gè)FileReader實(shí)例:

let reader = new FileReader();

FileReader提供了如下方法:

方法定義方法定義
readAsArrayBuffer(file)按字節(jié)讀取文件內(nèi)容,結(jié)果用ArrayBuffer對象表示
readAsBinaryString(file)按字節(jié)讀取文件內(nèi)容,結(jié)果為文件的二進(jìn)制串
readAsDataURL(file)將文件讀取為DataURL,因此可以讀取圖片。
readAsText(file, encoding)將文件讀取為文本,第二個(gè)參數(shù)是文本的編碼方式,默認(rèn)為utf-8
abort()終止文件讀取操作

FileReader提供了如下 事件:

事件描述
onabort當(dāng)讀取操作被終止時(shí)調(diào)用
onerror當(dāng)讀取操作發(fā)生錯(cuò)誤時(shí)調(diào)用
onload當(dāng)讀取操作成功完成時(shí)調(diào)用
onloaded當(dāng)讀取操作完成時(shí)調(diào)用,無論成功或失敗
onloadstart當(dāng)讀取操作開始時(shí)調(diào)用
onprogress在讀取數(shù)據(jù)過程中周期性調(diào)用

讀取excel主要是通過以下語句實(shí)現(xiàn):

XLSX.read(data, { type: type });

返回的對象

FileReader方法對應(yīng)的type取值如下:

base64以base64方法讀取
binaryBinatyString格式(byte n is data.charCodeAt (n))
stringUTF-8編碼的字符串
buffernodejs Buffer
arrayUint8Array,8位無符號數(shù)組
file文件的路徑(僅nodejs下支持)

vue中的v-for()展示數(shù)據(jù)

演示

代碼

<template>
  <div class="container">
    <div class="header">
      <div class="btn">
        <button @click="Add">添加</button>
        <button>保存</button>
        <button @click="AllAdd">全部刪除</button>
      </div>
      <div class="inp">
        <input type="file" id="uploadExcel" multiple @change="Change" />

      </div>
    </div>

    <table id="table">
      <thead>
        <tr>
          <th>學(xué)號</th>
          <th>姓名</th>
          <th>年齡</th>
          <th>班級</th>
          <th>操作</th>
        </tr>
      </thead>
      <tbody style="text-align: center">
        <tr v-for="item in dataList" :key="item.id">
          <td>{{ item.__EMPTY }}</td>
          <td>{{ item.__EMPTY_1 }}</td>
          <td>{{ item.__EMPTY_2 }}</td>
          <td>{{ item.__EMPTY_3 }}</td>
          <td>
            <button @click="del(item.__EMPTY)">刪除</button>
            <button @click="Add()">修改</button>
          </td>
        </tr>
      </tbody>
    </table>

    <div id="shade" class="c1 hide"></div>
    <div id="modal" class="c2 hide">
      <h2>學(xué)生信息</h2>
      <p>學(xué)號<input type="text" /></p>
      <p>姓名<input type="text" /></p>
      <p>年齡<input type="text" /></p>
      <p>班級<input type="text" /></p>
      <p>

        <button type="button">添加</button>
        <button type="button" @click="Hide();">取消</button>
      </p>
    </div>
  </div>
</template>
<script>
import * as XLSX from "../../node_modules/xlsx"
export default {
  data() {
    return {
      dataList: []
    };
  },

  methods: {
    Change(event) {
      // 獲取到文件夾
      let fileList = event.target.files;
      // 如果數(shù)據(jù)不為空
      if (fileList) {
        // 前言:FileReader是一種異步文件讀取機(jī)制,結(jié)合input:file可以很方便的讀取本地文件。
        let reader = new FileReader();
        let file = fileList[0]; //拿到第一條數(shù)據(jù)
        reader.readAsBinaryString(file)// 將文件以二進(jìn)制形式讀入頁面
        console.log(this);  //這里的this指向 vue中的data
        let _this = this //把data里的數(shù)據(jù)賦值給新的變量
        // wb:wordbook 工作表  
        reader.addEventListener("load", function (e) {
          console.log(this);  //FileReader實(shí)例對象
          var data = e.target.result; //讀取成功后result中的數(shù)據(jù)
          var wb = XLSX.read(data, { type: 'binary' });  //以base64方法讀取 結(jié)果

          let sheetName = wb.SheetNames[0] //是獲取Sheets中第一個(gè)Sheet的名字
          let sheets = wb.Sheets[sheetName] //wb.Sheets[Sheet名]獲取第一個(gè)Sheet的數(shù)據(jù)
          //將數(shù)據(jù)解析為json字符串
          let dataList2 = JSON.stringify(XLSX.utils.sheet_to_json(sheets))
          let dataList3 = (JSON.parse(dataList2)) //講json轉(zhuǎn)為 數(shù)組的格式 看格式所需
          _this.dataList = dataList3//賦值
     
        })
      }
    },
    Add() {
      document.getElementById('shade').classList.remove('hide');
      document.getElementById('modal').classList.remove('hide');
    },
    Hide() {
      document.getElementById('shade').classList.add('hide');
      document.getElementById('modal').classList.add('hide');
    },
    AllAdd() {

    },
    del(id) {
      console.log(id);
      let index = null
      index = this.dataList.findIndex(item => {
        if (item.id === id) return true
      })
      this.dataList.splice(index, 1)
    },

  },
};
</script>

<style scoped>
.container {
  width: 800px;
  margin: 0 auto;
}

.header {
  display: flex;
  justify-content: space-between;
  margin-bottom: 10px;
}

table {
  width: 100%;
  border-collapse: collapse;
  border: 1px solid;
}

tr,
th,
td {
  border: 1px solid #000;
  padding: 5px;
}

button {
  border: none;
  padding: 5px;
  background-color: #00a297;
  color: #fff;
  border-radius: 5px;
  cursor: pointer;
  margin: 0 5px;
}

tr:nth-child(2n) {
  background-color: #dcdcdc;
}

.hide {
  display: none;
}

.c1 {
  position: fixed;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  background: rgba(0, 0, 0, .5);
  z-index: 2;
}

.c2 {
  background-color: white;
  position: fixed;
  width: 400px;
  height: 300px;
  top: 50%;
  left: 50%;
  z-index: 3;
  margin-top: -150px;
  margin-left: -200px;
}
</style>

總結(jié) 

到此這篇關(guān)于vue中如何使用xlsx讀取excel文件的文章就介紹到這了,更多相關(guān)vue xlsx讀取excel文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue3 KeepAlive緩存組件實(shí)現(xiàn)方式

    Vue3 KeepAlive緩存組件實(shí)現(xiàn)方式

    文章主要介紹了Vue中內(nèi)置組件的使用,其中著重講解了KeepAlive的使用方式和細(xì)節(jié),KeepAlive用于在多個(gè)組件間動態(tài)切換時(shí)緩存被移除的組件實(shí)例,可以使用include/exclude和max屬性來定制緩存行為,同時(shí),還介紹了onActivated和onDeactivated生命周期鉤子的使用方法
    2026-04-04
  • Vue3封裝自動滾動列表指令(含網(wǎng)頁縮放滾動問題)

    Vue3封裝自動滾動列表指令(含網(wǎng)頁縮放滾動問題)

    本文主要介紹了Vue3封裝自動滾動列表指令(含網(wǎng)頁縮放滾動問題),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Vue中搭配Bootstrap實(shí)現(xiàn)Vue的列表增刪功能

    Vue中搭配Bootstrap實(shí)現(xiàn)Vue的列表增刪功能

    日常開發(fā)中,我們可以用?“拿來主義”?借助Bootstarp現(xiàn)成的一些樣式,快速生成我們想要的頁面布局,避免書寫大量的HTML和CSS代碼,省下了許多不必要的時(shí)間,可以直接搭配vue使用
    2022-11-11
  • 實(shí)例詳解vue中的代理proxy

    實(shí)例詳解vue中的代理proxy

    這篇文章主要介紹了vue中的代理proxy,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • vue中Element-ui 輸入銀行賬號每四位加一個(gè)空格的實(shí)現(xiàn)代碼

    vue中Element-ui 輸入銀行賬號每四位加一個(gè)空格的實(shí)現(xiàn)代碼

    我們在輸入銀行賬號會設(shè)置每四位添加一個(gè)空格,輸入金額,每三位添加一個(gè)空格。那么,在vue,element-ui 組件中,如何實(shí)現(xiàn)呢?下面小編給大家?guī)砹藇ue中Element-ui 輸入銀行賬號每四位加一個(gè)空格的實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧
    2018-09-09
  • vue 避免變量賦值后雙向綁定的操作

    vue 避免變量賦值后雙向綁定的操作

    這篇文章主要介紹了vue 避免變量賦值后雙向綁定的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • Vue基于Element-ui實(shí)現(xiàn)表格彈窗組件

    Vue基于Element-ui實(shí)現(xiàn)表格彈窗組件

    這篇文章主要為大家詳細(xì)介紹了Vue基于Element-ui實(shí)現(xiàn)表格彈窗組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue cli 3.0 搭建項(xiàng)目的圖文教程

    vue cli 3.0 搭建項(xiàng)目的圖文教程

    這篇文章主要介紹了vue cli 3.0 搭建項(xiàng)目的圖文教程,本文通過圖片文字相結(jié)合的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • Vue.js+cube-ui(Scroll組件)實(shí)現(xiàn)類似頭條效果的橫向滾動導(dǎo)航條

    Vue.js+cube-ui(Scroll組件)實(shí)現(xiàn)類似頭條效果的橫向滾動導(dǎo)航條

    這篇文章主要介紹了Vue.js+cube-ui(Scroll組件)實(shí)現(xiàn)類似頭條效果的橫向滾動導(dǎo)航條,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-06-06
  • vue如何點(diǎn)擊多個(gè)tab標(biāo)簽打開關(guān)閉多個(gè)頁面

    vue如何點(diǎn)擊多個(gè)tab標(biāo)簽打開關(guān)閉多個(gè)頁面

    這篇文章主要介紹了vue如何點(diǎn)擊多個(gè)tab標(biāo)簽打開關(guān)閉多個(gè)頁面,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09

最新評論

西和县| 芒康县| 海淀区| 谷城县| 东兴市| 桐庐县| 大邑县| 灌阳县| 宁波市| 青冈县| 南漳县| 长春市| 准格尔旗| 章丘市| 子长县| 江孜县| 昭苏县| 富源县| 那坡县| 罗山县| 章丘市| 西城区| 永康市| 霍州市| 永丰县| 普兰县| 潮安县| 呼伦贝尔市| 涞源县| 营山县| 苍梧县| 柳州市| 濮阳市| 民乐县| 青冈县| 平谷区| 宜宾县| 赤峰市| 井研县| 商都县| 浦县|