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

Vue中如何實現Excel導入導出

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

目標

在前面員工的添加是一個一個進行的,如果一次性添加多個員工信息,這時候就會很繁瑣
因此需要我們開發(fā)一個批量導入的功能,將用戶的信息存儲到 excel 中然后進行批量導入

實現方式

1. 分析 vue-element-admin 中的導入方案

在vue-element-admin中,大佬已經封裝好了Excel的導入導出方案,我們需要引入借鑒,拷貝 vue-element-admin 中提供的 excel 導入功能組件到自己項目中

講解

導入相關的代碼文件有兩個:

  • 使用組件:src/views/excel/upload-excel.vue

  • 定義組件:src/components/UploadExcel/index.vue // 注冊全局組件

    • 最新版的xlsx包, 導出的方式改變了, 所以我們要修改UploadExcel組件代碼
// import XLSX from 'xlsx'
// 上面改成下面這樣, 按需引入所有然后形成一個對象保存到XLSX變量上
import * as XLSX from 'xlsx'
  1. Excel 的導入導出都是依賴于js-xlsx來實現的,

  2. js-xlsx的基礎上又封裝了Export2Excel.js來方便導出數據

  3. 由于 Export2Excel不僅依賴js-xlsx還依賴file-saverscript-loader,因此我們需要提前安裝

    • file-saver 用戶在客戶端保存文件的
    • script-loader 用于在前端執(zhí)行一次js腳本文件的
npm install xlsx file-saver -S
npm install script-loader -S -D

tips:-S和-D (默認就是–save不寫即可, -S -D(是–save-dev)

2. Excel導入

目標

數據格式轉換:將 excel 解析好的數據經過處理后,轉成可以傳給接口調用的數據

分析

調用接口進行excel上傳的重點其實是數據的處理
按照接口的要求,把 excel 表格中經過插件處理好的數據處理成后端接口要求的格式

實現

按接口要求,處理excel導入的數據。處理內容包含:

  • 字段中文轉英文。excel中讀入的是姓名,而后端需要的是username
  • 日期處理。從excel中讀入的時間是一個 number 值,而后端需要的是標準日期
代碼(邏輯很重要,多寫幾遍)
methods: {
  // 將表格中的數據進行格式化
  transExcel(results) {
    const userRelations = {
      '入職日期': 'timeOfEntry',
      '手機號': 'mobile',
      '姓名': 'username',
      '轉正日期': 'correctionTime',
      '工號': 'workNumber',
      '部門': 'departmentName',
      '聘用形式': 'formOfEmployment'
    }

    return results.map(item => {
      const obj = {}

      // 1. 取出這個對象所有的屬性名: ['姓名', ‘手機號’]
      // 2. 遍歷這個數組,通過 中文名去 userRelations 找對應英文名, 保存值
      const contentKeys = Object.keys(item)
      contentKeys.forEach(key => {
        // 找到對應的英文名
        const transKey = userRelations[key]
        // 如果格式化的是時間,需要進行轉換
        if (transKey === 'timeOfEntry' || transKey === 'correctionTime') {
            // 表格的天數->轉成日期對象
            const transDate = new Date(formatExcelDate(item[key]))
            // 再把日期對象轉成->'年-月-日'保存到對象屬性里給后臺
            obj[transKey] = parseTime(transDate, '{yyyy}-{mm}-{dd}')
          } else {
            obj[transKey] = item[key]
          }
      })

      return obj
    })
  },

  // 導入成功以后的回調函數
  handleSuccess({ results, header }) {
    const arr = this.transExcel(results)
    console.log('轉換之后的格式是', arr)
  }
}

上面用到的日期處理函數在 utils/index.js 中定義如下

// 把excel文件中的日期格式的內容轉回成標準時間
export function formatExcelDate(numb, format = '/') {
  const time = new Date((numb - 25567) * 24 * 3600000 - 5 * 60 * 1000 - 43 * 1000 - 24 * 3600000)
  time.setYear(time.getFullYear())
  const year = time.getFullYear() + ''
  const month = time.getMonth() + 1 + ''
  const date = time.getDate() + ''
  if (format && format.length === 1) {
    return year + format + month + format + date
  }
  return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date)
}

小結 表格讀出中文key對象, 如何轉換英文key的對象的?

  • 準備一個中文key和英文key映射關系的對象, 然后遍歷數據里所有中文key拿出來, 換取英文key
  • 再準備一個新的對象, 組織英文key和value值

調用接口

// 導入成功以后的回調函數
async handleSuccess({ results, header }) {
    const arr = this.transExcel(results)
    const res = await importEmployeeAPI(arr).catch(err => err)
    if (!res.success) return this.$message.error(res.message)
    this.$router.back()
    this.$message.success('操作成功')
}

3. Excel導出

分析
  1. 把vue-element-admin 中的導出功能,遷移本項目
  2. 使用靜態(tài)數據實現基礎的導出功能(先不使用從接口獲取的數據)

給導出按鈕添加點擊事件
<el-button type="success" size="small" @click="downloadExcel">導出excel</el-button>

// 導出excel按鈕->點擊事件
downloadExcel() {
    import('@/vendor/Export2Excel').then(excel => {
        // excel表示導入的模塊對象
        excel.export_json_to_excel({
            header: ['姓名', '工資'], // 表頭 必填
            data: [
                ['劉備', 100],
                ['關羽', 500]
            ], // 具體數據 必填
            filename: 'excel-list', // 文件名稱
            autoWidth: true, // 寬度是否自適應
            bookType: 'xlsx' // 生成的文件類型
        })
    })
}

以上代碼表示:

  1. 當我們正式點擊導出按鈕之后,才去加載 vendor 文件夾中的Export2Excel模塊
  2. import 方法執(zhí)行完畢返回的是一個 promise 對象,在then方法中我們可以拿到使用的模塊對象
  3. 重點關注 data 的配置部分,我們發(fā)現它需要一個嚴格的二維數組

Excel導出參數說明:

參數 說明 類型 可選值 默認值
header 導出數據的表頭 Array / []
data 導出的具體數據 Array / [[]]
filename 導出文件名 String / excel-list
autoWidth 單元格是否要自適應寬度 Boolean true / false true
bookType 導出文件類型 String xlsx, csv, txt, more xlsx
Excel導出嘗試實現

分析:

  1. 從后臺重新獲取數據(這樣才能確保是最新的)
  2. 對數據的格式進行轉換(后端給的數據字段名都是英文的),以用來做導出

核心在于把后端接口返回的數據轉成 Export2Excel 這個插件需要的格式

準備表頭header數據
因為接口中返回的數據中的key是英文,而我們期望導出的表頭是中文,所以提前準備中文和英文的映射關系

const map = {
  'id': '編號',
  'password': '密碼',
  'mobile': '手機號',
  'username': '姓名',
  'timeOfEntry': '入職日期',
  'formOfEmployment': '聘用形式',
  'correctionTime': '轉正日期',
  'workNumber': '工號',
  'departmentName': '部門',
  'staffPhoto': '頭像地址'
}

具體的表格數據我們需要通過接口從后端獲取回來,難點在于如何把后端返回的數據處理成Export2Excel插件需求的二維數組格式。

示例

const dataArr = [
 ["13600000001", "呂勇銳", "1992-08-04", "正式", "2020-01-01", "0001", "總裁辦"]
 ["13600000002", "袁永安", "1993-08-04", "正式", "2020-01-01", "0002", "總裁辦"]
]

最終的代碼

methods: {
    // 處理數據的方法
    transData(rows) {
        // 寫代碼
        const map = {
            'id': '編號',
            'password': '密碼',
            'mobile': '手機號',
            'username': '姓名',
            'timeOfEntry': '入職日期',
            'formOfEmployment': '聘用形式',
            'correctionTime': '轉正日期',
            'workNumber': '工號',
            'departmentName': '部門',
            'staffPhoto': '頭像地址'
        }

        const headerKeys = Object.keys(rows[0])
        const header = headerKeys.map(item => {
            return map[item]
        })

        const data = rows.map(obj => {
            return Object.values(obj)
        })

        return { header, data }
    }
    // 導出 Excel
    async downloadExcel() {
        const res = await getEmployeeList()
        // 調用上面定義的方法,處理返回的數據
        const excelObj = this.transData(res.data.rows)
        import('@/vendor/Export2Excel').then(excel => {
            // excel表示導入的模塊對象
            excel.export_json_to_excel({
                header: excelObj.header, // 表頭 必填
                data: excelObj.data, // 具體數據 必填
                filename: '員工列表', // 文件名稱
                autoWidth: true, // 寬度是否自適應
                bookType: 'xlsx' // 生成的文件類型
            })
        })
    },
}

優(yōu)化處理方法:數據順序對應文章來源地址http://www.zghlxwxcb.cn/news/detail-413436.html

transData(rows) {
 // 考慮順序 (頁面上列保持一致順序)
      // 4.0 準備一個列表頭中文數組 (8個)
      const headerArr = ['序號', '姓名', '頭像', '手機號', '工號', '聘用形式', '部門', '入職時間']
      // 4.1 數據key的映射關系(思路: 遍歷上邊數組里按照順序, 取出中文的名字, 但是對應數組值的數組, 要從英文key對象中取出value值, 我要用中文key換到英文key然后去取到值)
      const myObj = {
        // 序號可以等遍歷的時候直接用索引值, 而不是來自于英文對象里
        '姓名': 'username',
        '頭像': 'staffPhoto',
        '手機號': 'mobile',
        '工號': 'workNumber',
        '聘用形式': 'formOfEmployment',
        '部門': 'departmentName',
        '入職時間': 'timeOfEntry'
      }
      // 4.2 按照順序, 形成值的數組 (明確目標->想要數據結構->讀代碼(每個變量意思)讀2-3遍->仿寫3-5遍)
      const resultArr = rows.map((item, index) => {
        const valueArr = [] // 值小數組
        headerArr.forEach(zhKey => {
          if (zhKey === '序號') {
            valueArr.push(index + 1)
          } else {
            const enKey = myObj[zhKey]
            valueArr.push(item[enKey])
          }
        })
        return valueArr
      })

      return { header: headerArr, data: resultArr }
    }

到了這里,關于Vue中如何實現Excel導入導出的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • vue+xlsx實現前端模版下載、導入和導出excel文件

    vue+xlsx實現前端模版下載、導入和導出excel文件

    產品需求:后端不想寫下載,導入和導出的接口,讓我們前端自己實現。 這里我們就可以用xlsx插件來實現,我們不多說了,先放一下實現的圖片,下面我們分別把模版下載、導入和導出的代碼放上來,想用的話,直接復制粘貼即可! 模版下載圖片 導出圖片: 好了,下面我

    2024年02月13日
    瀏覽(95)
  • Vue3 導入導出Excel

    Vue3 導入導出Excel

    提供一個 Excel 文件,將里面的內容導出成 JSON 數組 提供一個 JSON 數組,生成 Excel 文件并下載 表格 1. 安裝步驟 2.使用 3.導出 導出之后發(fā)現數據結構不是我們想要的那種,此時就能通過以下方法轉換。 更改列寬 4.導入 如果excel中含有日期,需要解析時間格式的內容。 XLSL.re

    2024年02月14日
    瀏覽(26)
  • vue+element UI Excel導入導出

    vue+element UI Excel導入導出

    ?1.終端執(zhí)行命令 2.script中導入 3.單表頭效果圖 4.html代碼: ?

    2024年02月04日
    瀏覽(24)
  • POI 實現Excel導入導出

    什么是POI Apache POI 是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。POI為“Poor Obfuscation Implementation”的首字母縮寫,意為“簡潔版的模糊實現”。 生成xls和xlsx有什么區(qū)別呢? XLS XLSX 只能打開xls格式,無法直接打開x

    2024年02月03日
    瀏覽(27)
  • SpringBoot實現Excel導入導出

    SpringBoot實現Excel導入導出

    話不多說,直接上代碼 依賴文檔 找到pom文件,如下圖所示 引入需要的依賴 導出寫法: 導入寫法: 已上就是導入導出

    2024年02月09日
    瀏覽(22)
  • 【Go】excelize庫實現excel導入導出封裝(三),基于excel模板導出excel

    【Go】excelize庫實現excel導入導出封裝(三),基于excel模板導出excel

    大家好,這里是符華~ 關于excelize庫實現excel導入導出封裝,我已經寫了兩篇了,我想要的功能基本已經實現了,現在還差一個模板導出,這篇文章就來講講如何實現用模板導出excel。 前兩篇: 【Go】excelize庫實現excel導入導出封裝(一),自定義導出樣式、隔行背景色、自適應

    2024年01月25日
    瀏覽(64)
  • 純前端實現 導入 與 導出 Excel

    純前端實現 導入 與 導出 Excel

    最近經常在做 不規(guī)則 Excel 的導入,或者一些普通 Excel 的導出,當前以上說的都是純前端來實現;下面我們來聊聊經常用到的Excel導出與導入的實現方案,本文實現技術棧以 Vue2 + JS 為例 導入分類: 調用 API 完全由后端來解析數據,清洗數據,前端只負責調用 API ; 前端解析

    2024年02月09日
    瀏覽(28)
  • 使用luckysheet實現excel導入導出

    使用luckysheet實現excel導入導出

    luckysheet-demo: luckysheet-demoexcel導入導出實例 使用組件 1.?luckysheet在線excel 2. luckyexcel excel導入插件 3. exceljs 導出excel數據 導出exceljs的二次封裝,可直接使用如下

    2024年02月12日
    瀏覽(19)
  • 使用EasyExcel實現Excel的導入導出

    在真實的開發(fā)者場景中,經常會使用excel作為數據的載體,進行數據導入和導出的操作,使用excel的導入和導出有很多種解決方案,本篇記錄一下EasyExcel的使用。 EasyExcel是一個開源的項目,是阿里開發(fā)的。EasyExcel可以簡化Excel表格的導入和導出操作,使用起來簡單快捷,易上手

    2023年04月15日
    瀏覽(33)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包