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

Vue實(shí)現(xiàn)Excel預(yù)覽功能使用場(chǎng)景示例詳解

 更新時(shí)間:2023年09月07日 10:39:46   作者:光法V3  
這篇文章主要為大家介紹了Vue實(shí)現(xiàn)Excel預(yù)覽功能使用場(chǎng)景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

使用場(chǎng)景

項(xiàng)目中經(jīng)常能遇到要求預(yù)覽excel文件的需求,下面分享一下常用的方法以及可能遇到的問(wèn)題。

通過(guò)解析excel功能,實(shí)現(xiàn)PDF導(dǎo)入時(shí)的預(yù)覽

首先我們用到了XLSX(sheetJs)這個(gè)庫(kù)來(lái)處理Excel類(lèi)型的文件

地址:

https://docs.sheetjs.com/

https://www.npmjs.com/package/xlsx

支持大部分的現(xiàn)代瀏覽器版本

具體使用

下載: npm i xlsx

首先我們獲取一Excel類(lèi)型的文件。

這里我直接用了el-upload組件返回的文件

然后使用FileReader讀取文件,注冊(cè)初始化onload方法,并且在其onload方法中使用xlsx庫(kù)處理文件;

  • 首先使用xlsx的read方法,配置處理的詳情。
const workbook = XLSX.read(data, {
      type: "binary",
      cellText: false,
      cellDates: true,
    });
  • 再輪詢(xún)讀取文件
for (let sheet in workbook.Sheets) {
      //循環(huán)讀取每個(gè)文件
      const header = XLSX.utils.sheet_to_json(workbook.Sheets[sheet], {
        header: 1,
      });
      const sheetArray = XLSX.utils.sheet_to_json(
        workbook.Sheets[sheet],
        // 配置單元的數(shù)據(jù)轉(zhuǎn)換方法,dateNF不生效
        { raw: true, cellDates: true, dateNF: "yyyy/mm/dd" }
      );
      //若當(dāng)前sheet沒(méi)有數(shù)據(jù),則continue
      if (sheetArray.length == 0) {
        continue;
      }
      this.tableHeader = header[0];
      this.handleNetX(sheetArray, header[0]);
    }
  } catch (e) {
    this.$message.warning("上傳失敗");
  }

注意sheet_to_json方法中此時(shí)cellDates配置為true之后,如果excel文件內(nèi)的數(shù)據(jù)類(lèi)型為時(shí)間,會(huì)被轉(zhuǎn)成Date格式。

官方文檔中允許配置dateNF來(lái)進(jìn)行時(shí)間格式化,但是實(shí)際使用起來(lái)并沒(méi)有效果。

所以針對(duì)時(shí)間格式的處理,筆者這里直接轉(zhuǎn)為Date格式,在后續(xù)過(guò)程中進(jìn)行了手動(dòng)處理。

我們初始化load方法后,將excel文件源文件,轉(zhuǎn)為bolb格式,在塞給fileReader.readAsBinaryString,進(jìn)行文件處理方法的執(zhí)行。

const blob = new Blob([file.raw]);
      fileReader.readAsBinaryString(blob);

最后輪詢(xún)sheetArray來(lái)進(jìn)行數(shù)據(jù)的二次處理,最后得到前端可以使用的Array類(lèi)型的文件,展示在頁(yè)面中或者展示在表單中。

時(shí)間格式處理

處理時(shí)間的方法寫(xiě)的比較簡(jiǎn)單,主要就是判斷了Date的object類(lèi)型,來(lái)格式化日期類(lèi)型

handleNetX(sheetArray, header) {
      const totalTable = [];
      for (let index in sheetArray) {
        let row = {};
        header.map(index1 => {
          const tempKey = this.mapTableTitle[index1];
          if (typeof sheetArray[index][index1] === "object") {
            row[tempKey] = this.handleExcelDate(sheetArray[index][index1]);
          } else {
            row[tempKey] = sheetArray[index][index1];
          }
        });
        totalTable.push(row);
      }
      this.tableData = totalTable;
    },
    handleExcelDate(date) {
      if (!date) {
        return;
      }
      return formatDate(date.getTime(), "YYYY/MM/DD");
    },

代碼總結(jié)

async handleChangePre(file) {
      this.file = file;
      this.showResult = false;
      const fileReader = new FileReader();
      fileReader.onload = ev => {
        try {
          const data = ev.target.result;
          const workbook = XLSX.read(data, {
            type: "binary",
            cellText: false,
            cellDates: true,
          });
          for (let sheet in workbook.Sheets) {
            //循環(huán)讀取每個(gè)文件
            const header = XLSX.utils.sheet_to_json(workbook.Sheets[sheet], {
              header: 1,
            });
            const sheetArray = XLSX.utils.sheet_to_json(
              workbook.Sheets[sheet],
              { raw: true, cellDates: true, dateNF: "yyyy/mm/dd" }
            );
            //若當(dāng)前sheet沒(méi)有數(shù)據(jù),則continue
            if (sheetArray.length == 0) {
              continue;
            }
            this.tableHeader = header[0];
            console.log(sheetArray, "sheetArray");
            this.handleNetX(sheetArray, header[0]);
          }
        } catch (e) {
          this.$message.warning("上傳失敗");
        }
      };
      const blob = new Blob([file.raw]);
      fileReader.readAsBinaryString(blob);
    },

以上就是Vue實(shí)現(xiàn)Excel預(yù)覽功能使用場(chǎng)景示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Vue Excel預(yù)覽功能的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue-router中query和params的區(qū)別解析

    vue-router中query和params的區(qū)別解析

    vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,適合用于構(gòu)建單頁(yè)面應(yīng)用,這篇文章主要介紹了vue-router中query和params的區(qū)別 ,需要的朋友可以參考下
    2022-10-10
  • vue使用pinia實(shí)現(xiàn)全局無(wú)縫通信

    vue使用pinia實(shí)現(xiàn)全局無(wú)縫通信

    這篇文章主要為大家詳細(xì)介紹了vue如何使用pinia實(shí)現(xiàn)全局無(wú)縫通信,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下
    2023-11-11
  • vue 屬性攔截實(shí)現(xiàn)雙向綁定的實(shí)例代碼

    vue 屬性攔截實(shí)現(xiàn)雙向綁定的實(shí)例代碼

    這篇文章主要介紹了vue 屬性攔截實(shí)現(xiàn)雙向綁定的實(shí)例代碼,代碼簡(jiǎn)答易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • antd form表單數(shù)據(jù)回顯操作

    antd form表單數(shù)據(jù)回顯操作

    這篇文章主要介紹了antd form表單數(shù)據(jù)回顯操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • vue+iview如何實(shí)現(xiàn)拼音、首字母、漢字模糊搜索

    vue+iview如何實(shí)現(xiàn)拼音、首字母、漢字模糊搜索

    這篇文章主要介紹了vue+iview如何實(shí)現(xiàn)拼音、首字母、漢字模糊搜索,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue 仿百度搜索功能實(shí)現(xiàn)代碼

    Vue 仿百度搜索功能實(shí)現(xiàn)代碼

    本文通過(guò)實(shí)例代碼給大家介紹了vue仿百度搜索功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-02-02
  • el-select二次封裝實(shí)現(xiàn)可分頁(yè)加載數(shù)據(jù)的示例代碼

    el-select二次封裝實(shí)現(xiàn)可分頁(yè)加載數(shù)據(jù)的示例代碼

    使用el-select時(shí)一次性渲染幾百條數(shù)據(jù)時(shí)會(huì)造成頁(yè)面克頓, 可以通過(guò)分頁(yè)來(lái)實(shí)現(xiàn),所以本文給大家介紹了el-select二次封裝實(shí)現(xiàn)可分頁(yè)加載數(shù)據(jù),文中有詳細(xì)的代碼講解,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-12-12
  • Vue結(jié)合Element-Plus封裝遞歸組件實(shí)現(xiàn)目錄示例

    Vue結(jié)合Element-Plus封裝遞歸組件實(shí)現(xiàn)目錄示例

    本文主要介紹了Vue結(jié)合Element-Plus封裝遞歸組件實(shí)現(xiàn)目錄示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue中@click和@click.native.prevent的區(qū)別

    vue中@click和@click.native.prevent的區(qū)別

    這篇文章主要介紹了vue中@click和@click.native.prevent的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue router的基本使用和配置教程

    vue router的基本使用和配置教程

    這篇文章主要介紹了vue-router的基本使用和配置教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧,需要的朋友可以參考下
    2018-11-11

最新評(píng)論