国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

純前端實現(xiàn) 導(dǎo)入 與 導(dǎo)出 Excel

這篇具有很好參考價值的文章主要介紹了純前端實現(xiàn) 導(dǎo)入 與 導(dǎo)出 Excel。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

最近經(jīng)常在做 不規(guī)則Excel的導(dǎo)入,或者一些普通Excel的導(dǎo)出,當前以上說的都是純前端來實現(xiàn);下面我們來聊聊經(jīng)常用到的Excel導(dǎo)出與導(dǎo)入的實現(xiàn)方案,本文實現(xiàn)技術(shù)棧以 Vue2 + JS 為例

導(dǎo)入分類:

  1. 調(diào)用 API 完全由后端來解析數(shù)據(jù),清洗數(shù)據(jù),前端只負責調(diào)用 API;
  2. 前端解析 Excel ,清洗數(shù)據(jù),把對應(yīng)的數(shù)據(jù)處理成 API需要的 JSON;(本文主要介紹這個)

導(dǎo)出分類:

  1. 調(diào)用API 完全由后端來生成Excel,前端獲得 API 返回的文件名,下載即可;
  2. 前端根據(jù) JSON 數(shù)據(jù)來生成 Excel, 然后利用第三方庫 file-saver 進行下載;(本文主要介紹這個)

導(dǎo)入 Excel 需要用到 xlsx 這個 npm 庫

導(dǎo)出 Excel 需要用到 exceljs , file-saver 這兩個

直接 npm install 對應(yīng)庫即可;

1. 導(dǎo)入Excel,處理數(shù)據(jù)

1.1 需求示例

純前端實現(xiàn) 導(dǎo)入 與 導(dǎo)出 Excel,vue,前端,excel,vue

假如我現(xiàn)在有一個這種 Excel 需要導(dǎo)入,前端負責解析 Excel,清洗數(shù)據(jù),API 只需要 4-5 個有用的字段

1.2 具體實現(xiàn) – html 部分

<section>
    <el-button @click="handleUpload" size="mini" type="primary">{{l("ChooseFile")}}</el-button>
    <input v-show="false" @change="handleFileChange" ref="inputFile" type="file" />
    <el-alert type="warning" :closable="false" style="margin-top:6px;">
      {{'Please Upload (xls | xlsx) Type File'}}
    </el-alert>
</section>
import XLSX from "xlsx";

handleUpload() {
  if (!this.importResult) {
    this.$refs["inputFile"].click();
  }
},
handleFileChange(e) {
      const file = e.target.files[0];
      const fileName = file.name.substring(file.name.lastIndexOf(".") + 1);
      if (fileName !== "xlsx" && fileName !== "xls") {
        this.$message.error(this.l("FileTypeError,PleaseTryAgain"));
        return;
      }
      const reader = new FileReader();
      reader.readAsBinaryString(file);
      reader.onload = (e) => {
        const result = e.target.result;
        if (!result) {
          this.errorMsg = this.l("NoData");
          this.step = 1;
          return;
        }
        if (this.importType === 1) {
          this.handleSinglePageExcel(result);
        } else {
          this.handleMultiplePageExcel(result);
        }
      };
      reader.onerror = (err) => {
        throw new Error("UpLoadError: " + err.stack);
      };
    },

1.3 具體實現(xiàn) – 單個 sheet

handleSinglePageExcel(data) {
  const wb = XLSX.read(data, {
    type: "binary",
    cellDates: true,
  });
  const sheet = wb.SheetNames[0];
  const importData = XLSX.utils.sheet_to_json(wb.Sheets[sheet], {
    range: -1,
  });
  const arr = [];
  for (let i = 3; i < importData.length; i++) {
    // 處理業(yè)務(wù)邏輯
  }
  this.importResult = arr;
},

1.4 具體實現(xiàn) – 多個 sheet

handleMultiplePageExcel(data) {
  const wb = XLSX.read(data, {
    type: "binary",
    cellDates: true,
  });
  const sheetList = wb.SheetNames;
  const arrMap = {}; // 多 Sheet 頁數(shù)據(jù);
  sheetList.forEach((t) => {
    const importData = XLSX.utils.sheet_to_json(wb.Sheets[t], {
      range: 2,
    });
    arrMap[t] = importData;
  });
  const arr = [];
  for (let t in arrMap) {
    const importData = arrMap[t];
    // importData : 代表每個 Sheet 頁的 Excel 數(shù)據(jù)
  }
  this.importResult = arr;
},

1.4 相關(guān)參數(shù)

文件讀取類型

類型 預(yù)期輸入
base64 Base64編碼類型字符串
binary 二進制字符串(字節(jié)n是data.charCodeAt(n))
string JS字符串(僅適用于UTF-8文本格式)
buffer nodejs的buffer類型
array 數(shù)組
file 將被讀取的文件路徑(僅限nodejs)

常用方法

  • sheet_to_* 函數(shù)接受一個工作表和一個可選的options對象,主要是將excel文件轉(zhuǎn)化為對應(yīng)的數(shù)據(jù)格式,一般導(dǎo)入excel文件的時候使用
  • *_to_sheet 函數(shù)接受一個數(shù)據(jù)對象和一個可選的options對象,主要是將數(shù)據(jù)格式轉(zhuǎn)化為excel文件,一般導(dǎo)出文件的時候使用
  • sheet_add_* 函數(shù)接受工作表、數(shù)據(jù)和可選選項。主要用途是更新一個現(xiàn)有的工作表對象

2. 根據(jù)已有數(shù)據(jù),按需導(dǎo)出Excel

1.1 需求示例

純前端實現(xiàn) 導(dǎo)入 與 導(dǎo)出 Excel,vue,前端,excel,vue

假如我現(xiàn)在有一個這種查詢表格需要導(dǎo)出,因為所有的數(shù)據(jù)都在表格中,所以不需要調(diào)用API也可以實現(xiàn)

1.2 具體實現(xiàn)

import { Workbook } from "exceljs";
import { saveAs } from "file-saver";

try {
  this.loading = true;
  // 創(chuàng)建一個工作簿
  const workbook = new Workbook();
  // columns 需要生成的Excel列 { prop, label, width, sheetName | Detail }
  // sheetName 需要生成的 Sheet 頁, 如果只生成一個 Sheet Excel 不用考慮這里
  const sheets = _.uniq(this.columns.map((t) => t.sheetName || "Detail"));
  for (let i = 0; i < sheets.length; i++) {
    const columns = this.columns.filter(
      (t) => (t.sheetName || "Detail") === sheets[i]
    );
    // addWorksheet 添加一個 Sheet 頁
    const worksheet = workbook.addWorksheet(sheets[i]);
    worksheet.columns = columns.map((t) => {
      // 需求處理
      const label = t.label ? t.label : this.propToLabel(t.prop);
      return {
        header: this.l(label), // Excel 第一行標題
        key: t.prop,
        width: label.length * 2, // Excel 列的寬度
      };
    });
    // this.list -> 當前 table 數(shù)據(jù) 
    this.list.forEach((t) => {
      const row = [];
      columns.forEach((x) => {
        row.push(t[x.prop] || "");
      });
      // 生成的 Excel Sheet 添加數(shù)據(jù)
      worksheet.addRow(row);
    });
    // 第一行 Header 行添加自定義樣式
    worksheet.getRow(1).eachCell((cell, colNumber) => {
      cell.fill = {
        type: "pattern",
        pattern: "solid",
        fgColor: {
          argb: "cccccc",
        },
        bgColor: {
          argb: "#96C8FB",
        },
      };
    });
  }
  // 導(dǎo)出的文件名
  const code = this.exportTemple.code || new Date().getTime();
  workbook.xlsx.writeBuffer().then((buffer) => {
    // 調(diào)用 第三方庫 下載剛生成好的Excel
    saveAs(
      new Blob([buffer], {
        type: "application/octet-stream",
      }),
      code + "." + "xlsx"
    );
    this.loading = false;
  });
} catch (e) {
  console.error("clinet export error", e);
} finally {
  this.loading = false;
}

如果大數(shù)據(jù)的量導(dǎo)出建議還是后端來實現(xiàn),前端要用 websocket 做優(yōu)化,避免長時間 loading 帶來不好的用戶體驗文章來源地址http://www.zghlxwxcb.cn/news/detail-696981.html

到了這里,關(guān)于純前端實現(xiàn) 導(dǎo)入 與 導(dǎo)出 Excel的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • xlsx庫實現(xiàn)純前端導(dǎo)入導(dǎo)出Excel

    xlsx庫實現(xiàn)純前端導(dǎo)入導(dǎo)出Excel

    最近做了前端導(dǎo)入、導(dǎo)出 Excel 的需求,用到了 js-xlsx 這個庫,該庫文檔提供的用例很少,并不是很友好。本文總結(jié)一下我是如何實現(xiàn)需求的。 提供一個 Excel 文件,將里面的內(nèi)容轉(zhuǎn)成 JSON 導(dǎo)入數(shù)據(jù) 提供一個 JSON 文件,生成 Excel 文件并導(dǎo)出 導(dǎo)入與導(dǎo)出既可以前端做,也可以后

    2023年04月08日
    瀏覽(23)
  • Vue中如何實現(xiàn)Excel導(dǎo)入導(dǎo)出

    在前面員工的添加是一個一個進行的,如果一次性添加多個員工信息,這時候就會很繁瑣 因此需要我們開發(fā)一個批量導(dǎo)入的功能,將用戶的信息存儲到 excel 中然后進行批量導(dǎo)入 1. 分析 vue-element-admin 中的導(dǎo)入方案 在vue-element-admin中,大佬已經(jīng)封裝好了Excel的導(dǎo)入導(dǎo)出方案,我

    2023年04月14日
    瀏覽(24)
  • SpringBoot和Vue實現(xiàn)Excel導(dǎo)入導(dǎo)出

    SpringBoot和Vue實現(xiàn)Excel導(dǎo)入導(dǎo)出

    hutool工具 hutool工具 瀏覽器格式 打開瀏覽器能下載Excel即成功。 3.1 測試: 通過postman測試,send之后返回true測試成功。 在Navicat刷新,可以看到新寫入的數(shù)據(jù)。

    2024年03月17日
    瀏覽(32)
  • 前端導(dǎo)入導(dǎo)出excel記錄

    前端模塊的導(dǎo)入導(dǎo)出excel功能,大體分為兩個邏輯。 前端使用導(dǎo)入組件,獲取excel,交給 后端處理 前端使用導(dǎo)入組件,獲取excel,自己 解析數(shù)據(jù) ,然后調(diào)用數(shù)據(jù)存儲的方法。 我們分別對這兩種方法進行記錄。 導(dǎo)出 組件: 方法: api: util: 導(dǎo)入 組件: 方法: 工具方法: 導(dǎo)

    2024年02月12日
    瀏覽(30)
  • 使用vue實現(xiàn)導(dǎo)出Excel功能【純前端】

    使用vue實現(xiàn)導(dǎo)出Excel功能【純前端】

    最近接手一個項目,其中一個需求是將查詢出來table中的數(shù)據(jù)導(dǎo)出為Excel文件,并下載到本地。 問題來了,這種東西,不是應(yīng)該后端去實現(xiàn)更好一些嗎?如果放在前端做,要拿到全部數(shù)據(jù),然后把這些數(shù)據(jù)進行解析,再進行一系列的騷操作轉(zhuǎn)化成Excel文件,假如數(shù)據(jù)量少還好,

    2024年02月10日
    瀏覽(22)
  • vue 實現(xiàn)前端處理 “數(shù)組數(shù)據(jù)“ 轉(zhuǎn)excel格式文件,并導(dǎo)出excel表格

    一、安裝插件?XLSX 二、頁面引入 ? ? ? ?希望我的愚見能夠幫助你哦~,若有不足之處,還望指出,你們有更好的解決方法,歡迎大家在評論區(qū)下方留言支持,大家一起相互學(xué)習參考呀~

    2024年01月18日
    瀏覽(31)
  • 【前端】批量導(dǎo)入和導(dǎo)出Excel數(shù)據(jù)

    【前端】批量導(dǎo)入和導(dǎo)出Excel數(shù)據(jù)

    excel導(dǎo)入功能需要使用npm包 xlsx ,所以需要安裝 xlsx 插件,讀取和寫入都依賴她 vue-element-admin模板提供了一個導(dǎo)入excel數(shù)據(jù)的文件,我們只需用即可 代碼地址: https://github.com/PanJiaChen/vue-element-admin/blob/master/src/components/UploadExcel/index.vue 將vue-element-admin提供的導(dǎo)入功能新建一個組件

    2024年02月09日
    瀏覽(30)
  • Excel 導(dǎo)入導(dǎo)出(前端處理:xslx)(后端處理:hutool+poi || Easy Excel )

    Excel 導(dǎo)入導(dǎo)出(前端處理:xslx)(后端處理:hutool+poi || Easy Excel )

    ? 目錄 Excel 導(dǎo)入導(dǎo)出(前端處理:xslx) 代碼示例 導(dǎo)入Excel數(shù)據(jù) 將數(shù)據(jù)封裝好后傳給后端? 導(dǎo)出數(shù)據(jù) 預(yù)覽(vue-office/excel\\\"……;docx-preview) Excel 導(dǎo)入導(dǎo)出(后端處理:hutool+poi || Easy Excel ) 前端 后端使用Hutool處理Excel 文件 Hutool-poi是針對Apache POI的封裝,因此需要用戶自行引入

    2024年01月24日
    瀏覽(38)
  • 使用ExcelJS實現(xiàn)excel的前端導(dǎo)出功能(Vue3+TS)

    ExcelJS :讀取,操作并寫入電子表格數(shù)據(jù)和樣式到 XLSX 和 JSON 文件。一個 Excel 電子表格文件逆向工程項目。 github中文文檔:https://github.com/exceljs/exceljs/blob/master/README_zh.md ?封裝excel.ts工具文件 表格頁面調(diào)用excel工具文件?

    2024年02月14日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包