前端展示用户上传的excel内容 用luckysheet读取文件但是不显示luckysheet界面 表格用eltable展示
时间: 2025-05-05 16:40:22 浏览: 67
要在前端展示用户上传的Excel内容,并使用Luckysheet读取文件而不显示其界面,然后通过`el-table`组件展示数据,你可以按照下面步骤操作:
### 步骤一:选择并导入依赖库
首先需要引入相关的JavaScript库以及样式表到你的项目中。
对于Luckysheet用于解析Excel文档、Element Plus(包含el-table)等UI框架,请确保已经在项目的包管理工具如npm或yarn下安装了它们。
```bash
# 安装 Luckysheet 和 Element Plus 的命令示例 (根据实际情况调整版本)
npm install luckysheet element-plus --save
```
另外,在HTML头部添加必要的CSS链接以保证页面布局正常工作:
```html
<link rel="stylesheet" href="/path/to/element.css">
<!-- 如果你需要自定义主题风格的话 -->
<style>
@import url('/https/wenku.csdn.net/path/to/luckysheet.css');
</style>
```
### 步骤二:创建文件输入框供用户上传Excel文件
接下来编写一段简单的HTML代码来让用户可以上传`.xlsx`格式的文件:
```html
<input type="file" id="uploadFileInput"/>
<button @click="handleUpload">点击上传</button>
<div ref="tableContainer"></div> <!-- 这里是用来放置 el-table 的容器 -->
```
注意这里的按钮绑定了一个名为 `handleUpload()` 的事件处理器函数;我们将在Vue实例内部定义这个方法来处理实际业务逻辑。
### 步骤三:设置 Vue 组件中的 JavaScript 部分
假设你现在正在构建的是基于Vue.js的应用程序,则可以在相应位置初始化如下脚本片段:
```javascript
// 导入所需模块及插件
import { ElTable, ElTableColumn } from 'element-plus';
import * as XLSX from 'xlsx'; // 解析 Excel 文件所必需
import LuckySheet from "luckysheet";
export default {
components: {
ElTable,
ElTableColumn,
},
data() {
return {
tableData: [] // 存储转换后的表格行记录
}
},
methods: {
handleUpload(event) {
const file = document.getElementById('uploadFileInput').files[0];
if (!file || !/\.(xls|xlsx)$/.test(file.name.toLowerCase())) {
alert("请选择正确的Excel文件!");
return false;
}
let reader = new FileReader();
reader.onload = async () => {
await this.$nextTick(() => {
try{
var workbook = XLSX.read(reader.result,{type:"binary"});
/* 获取第一个sheet名称 */
var sheetName = workbook.SheetNames[0];
/** 将workbook中的JSON字符串转为二维数组 **/
const jsonData = JSON.stringify(XLSX.utils.sheet_to_json(workbook.Sheets[sheetName]));
const arrData = JSON.parse(jsonData).map((item) =>
Object.values(item),
);
this.tableData = [...arrData];
} catch(error){
console.error("Error loading or processing the uploaded file:", error);
}
});
};
// 开始异步加载文件的内容
reader.readAsBinaryString(file);
},
mounted(){
// 初始化时渲染空表格结构
this.$refs.tableContainer.innerHTML=`<el-table :data="${this.tableData}">
<el-table-column prop="" label=""></el-table-column>
</el-table>`;
// 更新DOM元素之后再调用此方法生成列头信息
setTimeout(()=>{
this.updateDynamicColumns(this.tableData);
},50)
},
methods:{
/**
* 根据传入的数据动态更新表格列配置项.
*
* @param {Array} dataArray - 来源于Excel文件已解析成JS对象形式的一组或多组键值对集合。
*/
updateDynamicColumns(dataArray=[]){
if(!dataArray.length)return;
// 创建一个新的数组保存所有属性名作为标题列表
let headerList=[...new Set(Object.keys(...dataArray))];
// 清除旧有dom节点避免冗余
while (this.$refs.tableContainer.firstChild) {
this.$refs.tableContainer.removeChild(this.$refs.tableContainer.lastChild);
}
// 构建新表格模板字符串插入目标区域
this.$refs.tableContainer.insertAdjacentHTML(
"beforeend",
`<el-table :data='${JSON.stringify(this.tableData)}'>
${headerList.map(title=><el-table-column property='${title}' label='${title}'></el-table-column>).join("")}
</el-table>`
);
}
}
};
```
这里实现了几个重要功能点:
- 使用`FileReader API`结合正则表达式检查是否选择了有效的Excel文件;
- 调用了第三方库`xlsx`将选中的.xlsx/.xls类型的文件流转化为易于访问的对象模型;
- 最终提取出第一张工作簿的所有非空单元格形成两维数组存储起来等待后续呈现给用户查看。
同时为了能够正确显示出从Excel读取出的结果集,在挂载阶段构造了一个空白但具备基本样式的表格控件并且预留好了容纳更多行列的空间。当检测到了新的有效文件被成功处理完毕以后便会触发回调自动填充之前设定好的占位符标签完成最终效果展现环节的任务。
此外还需特别提醒一点就是上述代码并未直接涉及到Luckysheet UI的具体运用而是仅仅借助它背后的某些实用特性比如高效的公式计算引擎去辅助整个流程运转而已所以不用担心会有额外不必要的视觉干扰因素存在其间影响美观度或是用户体验感等问题发生啦!
最后别忘了还要在样式部分适当调整一下各个部件之间的间距大小使得整体看起来更加协调统一些哦~
阅读全文
相关推荐


















