读取excel表格中的数据展示到页面中,不是点击上传那种
我现在本地上传是可以用的,但是我这些数据都在excel中,就像图片一样的静态文件放在自己项目里,然后当我第一次进入页面就执行一次读取xlsx
文件把这些数据展示到页面表格上,再把读取过的数据保存到浏览器中,这种可以实现吗?
我试了下,一用 import
导入 xlsx
文件就会报错。
// 子组件
<div class="table-box">
<!-- <vxe-toolbar> // 这是上传按钮
<template v-slot:buttons>
<vxe-button @click="impotEvent">选择文件</vxe-button>
</template>
</vxe-toolbar>
-->
<vxe-table
border
resizable
show-overflow
keep-source
ref="xTable"
width="100%"
height="auto"
max-height="600"
class="xTable"
:loading="loading"
:data="dataSource"
>
<vxe-table-column
v-for="(item, i) in tableColumn"
:key="i"
:type="item.type"
:title="item.title"
:field="item.field"
:fixed="item.fixed"
:width="item.width"
:min-width="item.mWidth"
></vxe-table-column>
</vxe-table>
</div>
<script>
import XLSX from "xlsx";
// import fires from '../assets/xlsx/fires.xlsx' // 会报错
export default {
props: ["tableColumn"],
data() {
return {
loading: false, // table蒙层
dataSource: [],
};
},
created() {
this.impotEvent()
},
methods: {
impotEvent() {
this.$refs.xTable
// .readFile({
// types: ["xls", "xlsx"]
// })
.then(params => {
const { files } = params;
const fileReader = new FileReader();
fileReader.onload = ev => {
const data = ev.target.result;
const workbook = XLSX.read(data, { type: "binary" });
const csvData = XLSX.utils.sheet_to_csv(workbook.Sheets.Sheet1);
const tableData = [];
// 解析数据
csvData.split("\n").forEach(vRow => {
if (vRow) {
const vCols = vRow.split(",");
const item = {};
vCols.forEach((val, cIndex) => {
if(cIndex < this.tableColumn.length) {
const column = this.tableColumn[cIndex];
if(column.field) {
item[column.field] = val;
}
}
});
tableData.push(item);
}
});
console.log(tableData)
this.dataSource = tableData;
};
fileReader.readAsBinaryString(files[0]);
});
}
}
};
</script>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
xlsx文件只能通过本地文件读取方式去获取,如果是在浏览器中执行,还可能有浏览器安全限制。
关于解析xlsx的库需要用其它方式引入,而不是在html页面中import引入。