html导入excel文件,使用js-xlsx简单实现一个导入excel
因为是老项目,所以我用的是jquery,css库是bootsharp。
需求是点击按钮实现上传excel转换成表格,代码如下
html
导入Excel
复制代码
js
$(".btn-express").on("click", function (e) {//将input[file]隐藏,点击按钮才触发上传文件
$(".btn-file").trigger("click")
})
$(".btn-file").on("change", function (ev) {//当文件上传
// console.log(ev.target.files)
var reader = new FileReader();
reader.onload = function (e) {
try {
var data = e.target.result;
var workbook = XLSX.read(data, { type: 'binary' });
var sheetNames = workbook.SheetNames; // 工作表名称集合
var worksheet = workbook.Sheets[sheetNames[0]]; // 只读取第一张sheet
var html = XLSX.utils.sheet_to_html(worksheet);//解析成html
console.log(html)
$("#demo").html(html)//将解析的html放入表格
} catch (err) {
console.log(err)
Anim.msg("文件类型不正确");
return false;
}
};
reader.readAsBinaryString(ev.target.files[0]);
})
复制代码
解析
读取excel需要通过XLSX.read(data, {type: type})方法来实现,返回一个叫WorkBook的对象,type主要取值如下:
base64: 以base64方式读取;
binary: BinaryString格式(byte n is data.charCodeAt(n))
string: UTF8编码的字符串;
buffer: nodejs Buffer;
array: Uint8Array,8位无符号数组;
file: 文件的路径(仅nodejs下支持);
返回的格式如图:
可以使用插件自身写好工具类XLSX.utils来对worksheet进行解析,常用的方法如下:
XLSX.utils.sheet_to_csv:生成CSV格式
XLSX.utils.sheet_to_txt:生成纯文本格式
XLSX.utils.sheet_to_html:生成HTML格式
XLSX.utils.sheet_to_json:输出JSON格式
通过sheet_to_json解析会返回数组,html虽然会返回html格式,但也会把html,meta,body给打印出来
项目用到的是jq+layUI
完整代码如下:
html:
寄件信息 :
导入Excel
下载寄件导入模板
重置
提交订单
复制代码
js:
var fileExcel = null;//需要发送的file
var skipType=1//订单类型
var tbodyArr=null
//获取传递过来的excel
$(".btn-express").on("click", function (e) {
$(".btn-file").trigger("click")
})
//触发上传excel
$(".btn-file").on("change", function (ev) {
var files = new FormData();
files.append("file", ev.target.files[0])
files.append("kdid", $("#expressType").val())
$.ajax({
url: "{上传upload接口}",
type: "POST",
data: files,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
if (returndata.success == false) {
layer.msg(returndata.m, {
time: 1000 //1秒关闭(如果不配置,默认是3秒)
}, function () {
location.reload();
});
} else {
var arr=returndata.d
tbodyArr=returndata.d
var shipSum=0//运费总和
// console.log(arr)
for(var i=0;i
shipSum+=parseFloat(arr[i].M)
}
$(".sumNum").text(shipSum)
}
},
error: function (returndata) {
}
});
// return false;
var files = ev.target.files
var rawFile = files[0] // only use files[0]
fileExcel = files[0]
if (!rawFile) return
var reader = new FileReader();
reader.onload = function (e) {
var msg = ""
loading = layer.load(1, {
shade: [0.1, '#000'] //1透明度的白色背景
});
try {
var data = e.target.result;
var workbook = XLSX.read(data, { type: 'binary' });
var firstSheetName = workbook.SheetNames[0]
var worksheet = workbook.Sheets[firstSheetName]
var headers = getHeaderRow(worksheet)//表头
var results = XLSX.utils.sheet_to_json(worksheet);//表主体
setThead(headers)
setTbody(tbodyArr)
$(".box-footer").show()
if (reader.onload) {
reader.onload = null
}
// console.log(headers, results)
layer.closeAll('loading');
} catch (err) {
console.log(err)
Anim.msg("文件类型不正确");
layer.closeAll('loading');
return false;
}
};
reader.readAsBinaryString(rawFile);
})
//渲染表格thead
function setThead(headers) {
headers.push("运费")
$("#demo thead").html("")
if (headers.length == 0) {
return false
}
var tr = $("
")
for (var i = 0; i < headers.length; i++) {
var td = $("
" + headers[i] + "")
tr.append(td)
}
$("#demo thead").append(tr)
}
//渲染表格tbody
function setTbody(data) {
$("#demo tbody").html("")
if (data.length == 0) {
return false
}
for (var j = 0; j < data.length; j++) {
var tr = $("
")
for (key in data[j]) {
var item=data[j][key]?data[j][key]:''
var td = $("
" + item+ "")
tr.append(td)
}
$("#demo tbody").append(tr)
}
}
//对数据进行过滤
function getHeaderRow(sheet) {
var headers = []
var range = XLSX.utils.decode_range(sheet['!ref'])
var C
var R = range.s.r
/* start in the first row */
for (C = range.s.c; C <= range.e.c; ++C) { /* walk every column in the range */
const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
/* find the cell in the first row */
let hdr = 'UNKNOWN ' + C //
if (cell && cell.t) hdr = XLSX.utils.format_cell(cell)
headers.push(hdr)
}
return headers
}
复制代码
最终结果如下:
如果本篇文章有什么没有表达好的地方请见谅(ˇˍˇ)
html导入excel文件,使用js-xlsx简单实现一个导入excel相关推荐
- python不能处理excel文件-python处理excel文件(xls和xlsx)
一.xlrd和xlwt 使用之前需要先安装,windows上如果直接在cmd中运行python则需要先执行pip3 install xlrd和pip3 install xlwt,如果使用pycharm ...
- python处理excel文件(xls和xlsx)
一.xlrd和xlwt 使用之前需要需要先安装,windows上如果直接在cmd中运行python则需要先执行pip3 install xlrd和pip3 install xlwt,如果使用pycha ...
- a标签下载文件,js/jq创建a标签导出Excel文件
a标签下载文件,js/jq 创建a标签导出Excel文件 1.设置dom(html) <button type="button" class="layui-btn ...
- R读取excel文件乱码 read.xlsx() 解决方法
1. 参考[R语言]R读取含中文excel文件,read.xlsx乱码问题 该文章总结得很好,可以直接跳到最后看博主的总结. 2. 如果依旧是乱码那么用read.xlsx2()去读取excel文件, ...
- pycharm导入本地文件,程序运行正常,但导入模块时出现红色波浪线
pycharm导入本地文件,程序运行正常,但导入模块时出现红色波浪线,如下所示: 两种解决办法: (1)在文件前面加"." (2)点击菜单栏的"PyCharm" ...
- js 读取excel 导入mysql_可以读取EXCEL文件的js代码
首页给个有中文说明的例子,下面的例子很多大家可以多测试. function readExcel() { var excelApp; var excelWorkBook; var excelSheet; ...
- ThinkPHP导入Excel文件到数据库的简单实现
第一步:在官网下载PHPExcel插件下载传送门,放在ThinkPHP/Library/Vendor目录下 第二步:前端简单代码 <!DOCTYPE html> <html> ...
- JAVA导入/导出EXCEL文件,自定义校验,错误回写excel,使用简单快捷
github地址: https://github.com/alan-et/alanpoi/tree/develop/alanpoi-analysis 项目中使用: <dependency> ...
- h5页面如何预览excel文件_如何使用JavaScript实现前端导入和导出excel文件?(H5编辑器实战复盘)...
前言 最近笔者终于把H5-Dooring的后台管理系统初步搭建完成, 有了初步的数据采集和数据分析能力, 接下来我们就复盘一下其中涉及的几个知识点,并一一阐述其在Dooring H5可视化编辑器中的解 ...
最新文章
- Android系统架构图及简单的系统架构介绍
- (莱昂氏unix源代码分析导读-46)权限、管道
- App 即时通讯 SDK
- 【Spring学习】spring依赖注入用法总结
- selenium模拟鼠标和键盘操作的基本方法
- [JavaWeb-MySQL]多表查询概述
- [转]C++的Json解析库:jsoncpp和boost
- OpenShift 4 - Istio-Tutorial (1) 教程说明和准备环境
- LeetCode刷题系列(一)把回溯算法框架将给爷爷奶奶听
- [JAVA毕业设计]Web企业差旅在线管理系统源码获取和系统演示
- 从编程角度阐述有限元最佳入门方法:以Abaqus 和OpenSees 为例
- ElementUI 标签组件
- Chrome\Edge 更新后访问网站变慢或加载不出来,其他浏览器正常
- Codeforces Round #322 A Vasya the Hipster
- 【图解CAN总线】-6-classic CAN 2.0总线网络“负载率”计算
- AndroidStudio:The application‘s minSdkVersion is newer than the device API level.
- android学习笔记之GoogleMap
- vue 微信html,vue 实现微信端网页分享
- 【opencv】背景消除
- python 反转字符串
热门文章
- 公司内部流量控制案例
- hibernate中load和get方法的区别 lazy的策略
- C++ int与string的相互转换(含源码实现)
- chrome 扩展开发注意事项
- proto buffer
- atitit. java jsoup html table的读取解析 总结
- 开源纯C日志函数库iLOG3快速入门(八、如果你喜欢简单日志函数甚于日志函数库)...
- linux 魔兽 qq
- 【Vegas2006】自我介绍for校青春风采大赛
- linux -L -l区别,linux ls -l 详解[转]