使用JavaScript实现纯前端读取excel文件并与后台进行交互
下载并引入SheetJS文件GitHub下载地址:https://github.com/SheetJS/sheetjs下载之后打开其中的dist文件目录,能看到其中有xlsx.core.min.js和xlsx.full.min.js两个JS文件,使用其中一个文件就行,一般情况下使用xlsx.core.min.js就可以了。此处以xlsx.core.min.js为例将其引入到...
·
下载SheetJS文件
GitHub下载地址:https://github.com/SheetJS/sheetjs
下载之后打开其中的dist文件目录,能看到其中有xlsx.core.min.js和xlsx.full.min.js两个JS文件,使用其中一个文件就行,一般情况下使用xlsx.core.min.js就可以了。
此处以xlsx.core.min.js为例
具体用法如下:
1.首先在HTML中定义如下
<input type="file" id="inputfilename"> <!--选择文件的input-->
<button onclick="readWorkbookFromLocalFile()">读取Excel表格</button> <!--读取文件的按钮-->
<div id="result"></div> <!--显示所读取excel的区域-->
2. 引入JS
<script src="../../js/xlsx.core.min.js"></script>
3. 使用XLSX.read方法读取本地excel文件
function readWorkbookFromLocalFile() {
var file = document.getElementById('inputfilename').files[0];
if (file) {
var reader = new FileReader();
reader.onload = function (e) {
var data = e.target.result;
var workbook = XLSX.read(data, { //XLSX.read()方法会返回一个workbook 对象
type: 'binary'
});
readWorkbook(workbook);
};
reader.readAsBinaryString(file);
} else {
alert('请先选择文件');
}
}
4. 得到exce文件的csv和json格式
得到csv格式是为了在网页中显示读取到的表格
得到json格式是为了与后台进行数据交互
var json = null;
var csv = '';
function readWorkbook(workbook) {
var sheetNames = workbook.SheetNames; // 工作表名称集合
var worksheet = workbook.Sheets[sheetNames[0]]; // 这里我们只读取第一张sheet的内容
csv = XLSX.utils.sheet_to_csv(worksheet); //这里便可以得到csv格式
document.getElementById('result').innerHTML = csv2table(csv); //使用csv2table()函数将其转换为简单的HTML表格,csv2table()函数定义在下一个代码块中
json = XLSX.utils.sheet_to_json(worksheet);
// 成功转换为json格式后,可能表格中的中文属性名并不是后台所需要的字段名
// 那么,就可以使用如下方法,遍历这个json对象,然后对其中的字段名进行修改
for (var i in json) {
for (var key in json[i]) {
if (key == '年龄') {
json[i]['age'] = json[i][key] //修改属性名为“age”
delete json[i]['年龄'] //删除“年龄”
} else if (key == '性别') {
if (json[i][key] == '男') {
json[i][key] = '1';
} else {
json[i][key] = '0';
}
json[i]['sex'] = json[i][key] //修改属性名为“sex”
delete json[i]['性别'] //删除“性别”
} else if (key == '姓名') {
json[i]['username'] = json[i][key] //修改属性名为“username”
delete json[i]['姓名'] //删除“姓名”
} else if (key == '工号') {
json[i]['workId'] = json[i][key] + ''; //修改属性名为“workId”
delete json[i]['工号'] //删除“工号”
}
}
}
}
5. 将csv转换成简单的表格,会忽略单元格合并,在第一行和第一列追加类似excel的索引
function csv2table(csv) {
var html = '<table>';
var rows = csv.split('\n');
rows.pop(); // 最后一行没用的
rows.forEach(function (row, idx) {
var columns = row.split(',');
columns.unshift(idx + 1); // 添加行索引
if (idx == 0) { // 添加列索引
html += '<tr>';
for (var i = 0; i < columns.length; i++) {
html += '<th>' + (i == 0 ? '' : String.fromCharCode(65 + i - 1)) + '</th>';
}
html += '</tr>';
}
html += '<tr>';
columns.forEach(function (column) {
html += '<td>' + column + '</td>';
});
html += '</tr>';
});
html += '</table>';
return html;
}
到这里就能够实现通过SheetJS在页面中显示从本地读取到的excel文件了,也能够拿到想要与后台进行交互时的标准json数据格式,最后只需要发送Ajax与后台进行交互就OK拉!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献1条内容
所有评论(0)