項目中我們可能會碰到導出Excel文件的需求,一般后臺管理系統(tǒng)中居多,將table中展示的數據導出保存到本地。當然我們也可以通過一些處理來修改要導出的數據格式,具體需求具體對待。
1、首先我們需要安裝3個依賴,file-saver、xlsx和script-loader。
使用npm安裝:
npm install file-saver xlsx -Snpm install script-loader -D
使用yarn安裝:
yarn add file-saver xlsx -Syarn add script-loader -D
2、在/src目錄下新建一個vendor(名字也可自取)文件夾,存入Blob.js和Export2Excel.js文件。
Blob.js和Export2Excel.js文件地址:https://github.com/han6054/export-excel
當然也可以自行下載,或許會有版本的問題吧。
3、在/build/webpack.base.conf.js中新增一行代碼(vendor的名字必須和第二步新建的文件夾名字相同)。
resolve: { extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.esm.js', '@': resolve('src'), 'vendor': path.resolve(__dirname, '../src/vendor') // 新增這一行 }}
4、在vue項目中的使用。
/** * excel導出 */exportTable () { // this.DefaultData.exportExcelMax限制一下導出的總條數 if (this.totals <= this.DefaultData.exportExcelMax) { this.$confirm('確定要導出當前<strong>' + this.totals + '</strong>條數據?', '提示', { dangerouslyUseHTMLString: true, confirmButtonText: '確定', cancelButtonText: '取消' }).then(() => { this.getExpportData() }).catch(() => { }) } else { this.$confirm('當前要導出的<strong>' + this.totals + '</strong>條數據,數據量過大,不能一次導出!<br/>建議分時間段導出所需數據。', '提示', { dangerouslyUseHTMLString: true, showCancelButton: false }).then(() => { }).catch(() => { }) }},/** * 對導出數據格式處理 */formatJson (filterVal, jsonData) { return jsonData.map(v => filterVal.map(j => v[j]))},/** * 導出的列表數據 */getExpportData: function () { const loading = this.$loading({ lock: true, text: '正在導出,請稍等......', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)' }) const data = { phoneNo: this.formInline.phoneNo, userName: this.formInline.userName, amount: this.formInline.amount, fee: this.formInline.fee, currentPage: this.currentPage, pageSize: this.DefaultData.exportExcelMax } // 這里封裝了axios,根據自身情況修改即可 this.http( this.ApiSetting.orderExport, data ).then((res) => { // handleDataList這里可以對導出的數據根據需求做下處理 const handleDataList = res.data.list for (let i in res.data.list) { handleDataList[i].amount = res.data.list[i].amount * 100 handleDataList[i].fee = res.data.list[i].fee + '%' } if (res.data.list.length > 0) { require.ensure([], () => { /* eslint-disable */ // 這里的徑路要修改正確 const { export_json_to_excel } = require('../../vendor/Export2Excel') /* eslint-enable */ // 導出的表頭 const tHeader = ['手機號碼', '用戶姓名', '交易金額', '手續(xù)費'] // 導出表頭要對應的數據 const filterVal = ['phoneNo', 'userName', 'amount', 'fee'] // 如果對導出的數據沒有可處理的需求,把下面的handleDataList換成res.data.list即可,刪掉上面相應的代碼 const data = this.formatJson(filterVal, handleDataList) // this.DefaultData.formatLongDate.getNow()自己寫的一個獲取當前時間,方便查找導出后的文件。根據需求自行可處理。 export_json_to_excel(tHeader, data, '訂單查詢列表-' + this.DefaultData.formatLongDate.getNow()) this.$message({ message: '導出成功', duration: 2000, type: 'success' }) }) } else { this.$message({ message: '數據出 主站蜘蛛池模板: 盖州市| 东莞市| 饶平县| 华安县| 大悟县| 辽中县| 安多县| 唐海县| 广平县| 万宁市| 游戏| 嵊泗县| 绿春县| 绥阳县| 平果县| 广汉市| 淅川县| 巴林左旗| 哈尔滨市| 偏关县| 会理县| 张家口市| 饶平县| 峨山| 上饶县| 旺苍县| 扶绥县| 临沂市| 柏乡县| 鄂温| 灵台县| 柯坪县| 达日县| 威远县| 通州市| 大荔县| 玉树县| 陈巴尔虎旗| 阿坝县| 敦煌市| 礼泉县|