在開發后台管理系統的時候,很多地方都要用到導出excel 表格,比如將table中的數據導出到本地,那么實現這種需求往往有兩種方案:
一、后端開發一個下載鏈接,前端將這個鏈接放到 a 標簽的 href 中,一點就能下載。
優點:對於前端來說實現簡單,不用寫過多的代碼,也不依賴第三方庫,兼容性好
缺點:如果前端操作數據更改了,需要發給后端才能導出
二、前端借助一些第三方庫實現
下面以vue項目為例:
首先需要安裝三個依賴
npm install file-saver xlsx -S // 加載script 需要 npm install script-loader -D
或者使用 yarn 安裝
yarn add file-saver xlsx -S
yarn add script-loader -D
在 /src 目錄下新建 vendor文件夾,用於存放 Blob.js 和 Export2Excel.js 文件,這兩個文件可以再 CSDN 上下載,當然如果沒有積分的 可以去我的 gitHub 上下載。
注意:如果不叫 vendor 名字,則需要修改 Export2Excel.js 中的代碼。
配置webpack,這里使用的是 vue-cli 2.9 搭建的項目,如果使用vue-cli3 請自行百度
在 /build/webpack.base.config.js 的resolve 模塊中添加一個別名
resolve: { extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.esm.js', '@': resolve('src'), 'vendor': path.resolve(__dirname, 'src/vendor') // 添加一個別名 } }
那么接下來就是在vue項目中使用就行了
<template>
<div :class="$options.name">
<button @click="exportExcel">導出表格</button>
</div>
</template>
<script>
export default {
name: 'export',
data() {
return {
loading: false
};
},
methods: {
exportExcel() {
let sourceOriginAmount = [
{
goodsName: '蘋果',
sourceCode: '123'
},
{
goodsName: '香蕉',
sourceCode: '234'
}
]; // 需要導出的數據,可以動態獲取
this.loading = true; // 設置一個loading,生成Excel需要時間
import('@/vendor/Export2Excel.js').then(excel => { // 導入js模塊
const tHeader = ['編號', '商品名稱', '溯源碼']; // 導出excel 的標題
const filterVal = ['index', 'goodsName', 'sourceCode']; // 每個標題對應的字段
const list = (sourceOriginAmount || []).map((item, key) => { // 通過 map 方法遍歷,組裝數據成上面的格式
return {
index: key + 1,
goodsName: item.goodsName,
sourceCode: item.key
};
});
if (list) {
const data = this.formatJson(filterVal, list); // 生成json數據
excel.export_json_to_excel({ // 調用excel方法生成表格
header: tHeader,
data,
filename: this.goodsName
});
} else {
alert('暫無無數據');
}
this.loading = false;
})
},
formatJson (filterVal, jsonData) {
return jsonData.map(v => filterVal.map(j => v[j]));
}
}
};
</script>
可以參考 iview 組件庫中的 table 表格 https://www.iviewui.com/components/table#DCcsv
兼容性,據測試,IE9以上都支持,但是在IE9上導出中文會有亂碼,如果項目不要求兼容到IE9以下,且數據量不大的情況下可以考慮使用前端方法。
