纯前端读取excel (SheetJS js-xlsx.js框架)

介绍

应项目需求需要做一个纯前端读取excel文件的功能。各方面评估框架后选择了SheetJS的xlsx.js。
SheetJS功能强大。使用方便,文档详细。
github地址:SheetJS
参考文献:Jiao_0805 《js-xlsx使用》

兼容性

浏览器兼容性

使用方法

实现思路

通过<input type="file" >获取选中的本地excel文件流。再通过 FileReader 对象读取文件,然后使用FileReader.onload 事件监听操作,最后用js-xlsx.js处理数据

文件引用

  • https://github.com/SheetJS/sheetjs/tree/master/dist
    js文件
    一般来说只需要xlsx.core.min.js,xlsx.full.mini.js则包含了全部的功能。
    直接引入即可。
    <script lang="javascript" src="dist/xlsx.full.min.js"></script>
    npm:
    npm install xlsx
    bower:
    bower install js-xlsx

代码示例及详解

import XLSX from ".../dist/js/sheetjs/xlsx.core.min.js"

if(!document.getElementById('readLocalFile')){    //如若已经有对应的dom元素直接点击,没有则add一个
	let inputFile =	document.createElement("input");
	inputFile.setAttribute("id","readLocalFile");
	inputFile.setAttribute("type","file");
	inputFile.setAttribute("accept","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel");
	 inputFile.setAttribute("multiple", false);  //是否可以多选。这里设置为否
	inputFile.click();
	document.body.appendChild(inputFile);
	console.log("使用 ID为readLocalFile 的 input dom对象获取上传文件的内容,以json格式数据返回");
	document.getElementById('readLocalFile').addEventListener('change', function(e) {   //选择文件后执行
		let  files = e.target.files;
		if(files.length == 0) return;
		let  file = files[0];
		let  reader = new FileReader();
		reader.readAsBinaryString(file);
		reader.onload = function(e) {   //处理load事件。读取操作完成时触发。
			let  data = e.target.result;
			let  workbook = XLSX.read(data, {type: 'binary'}); //XLSX:/xlsx.core.min.js 通过XLSX.read(data, {type: type})方法读取excel 后面介绍
			console.log(workbook ); 
			let  sheetNames = workbook.SheetNames; // 工作表名称集合
			let  worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet 
			let  json = XLSX.utils.sheet_to_json(worksheet); //  读取workbook  这里可以自己写方法输出表格 这里建议使用XLSX.utils.工具类输出数据   这里以json格式输出数据 还有其他格式 代码后介绍
			if(typeof(callback) == "function") callback(json);   //回调 
			 document.getElementById('readLocalFile').value = null; //读取后清空
		};
	});
  }else{
	  document.getElementById('readLocalFile').click();  //已有dom元素则点击
  }

XLSX.read(data, {type: type})方法读取excel,返回WorkBook的对象,type主要取值如下:
base64: 以base64方式读取;
binary: BinaryString格式(byte n is data.charCodeAt(n))
string: UTF8编码的字符串;
buffer: nodejs Buffer;
array: Uint8Array,8位无符号数组;
工具类常用导出格式:
XLSX.utils.sheet_to_csv:生成CSV格式
XLSX.utils.sheet_to_txt:生成纯文本格式
XLSX.utils.sheet_to_html:生成HTML格式
XLSX.utils.sheet_to_json:生成JSON格式

workBook对象示例:workbook对象

开发注意

FileReader仅用于以安全的方式从用户(远程)系统读取文件内容 它不能用于从文件系统中按路径名简单地读取文件。 要在JavaScript中按路径名读取文件,应使用标准Ajax解决方案进行服务器端文件读取,如果读取跨域,则使用CORS权限。

转至目录

好的,以下是一个简单的登录页面示例代码: ```html <!DOCTYPE html> <html> <head> <title>Login Page</title> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div class="login-box"> <h2>Login</h2> <form> <label>Username</label> <input type="text" name="username" id="username" required> <label>Password</label> <input type="password" name="password" id="password" required> <button type="button" onclick="login()">Login</button> </form> </div> <script src="script.js"></script> </body> </html> ``` 接下来是样式表 `style.css`: ```css .login-box { width: 300px; margin: auto; margin-top: 100px; padding: 20px; border: 1px solid #ccc; border-radius: 5px; text-align: center; } h2 { margin-top: 0; } label { display: block; margin-bottom: 5px; text-align: left; } input[type="text"], input[type="password"] { width: 100%; padding: 5px; margin-bottom: 10px; border: 1px solid #ccc; border-radius: 3px; } button { background-color: #4CAF50; color: #fff; padding: 5px 10px; border: none; border-radius: 3px; cursor: pointer; } ``` 最后是 JavaScript 文件 `script.js`: ```javascript function login() { var username = document.getElementById("username").value; var password = document.getElementById("password").value; // 发送登录请求到后端 fetch('/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: username, password: password }) }) .then(response => response.json()) .then(data => { if (data.success) { alert("登录成功!"); } else { alert("登录失败:" + data.message); } }) .catch(error => console.error(error)); } ``` 在后端使用 Node.js 和 Express 框架读取本地 Excel 数据使用了 `xlsx` 库,以下是后端代码: ```javascript const express = require('express'); const app = express(); const xlsx = require('xlsx'); const bodyParser = require('body-parser'); const workbook = xlsx.readFile('users.xlsx'); const worksheet = workbook.Sheets['Sheet1']; const users = xlsx.utils.sheet_to_json(worksheet); app.use(bodyParser.json()); app.post('/login', (req, res) => { const username = req.body.username; const password = req.body.password; const user = users.find(u => u.username === username && u.password === password); if (user) { res.json({ success: true }); } else { res.json({ success: false, message: '用户名或密码错误' }); } }); app.listen(3000, () => console.log('Server started on port 3000')); ``` 这个示例代码使用了简单的用户名和密码验证,可以根据实际需求进行修改。需要注意的是,这个示例代码并没有对密码进行加密处理,实际应用中需要使用加密算法对密码进行保护。同时,这个示例代码也没有使用 HTTPS 协议,实际应用中需要使用 HTTPS 协议来保证通信的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值