因为是老项目,所以我用的是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

下载寄件导入模板

合计运费:0元

重置

提交订单

复制代码

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相关推荐

  1. python不能处理excel文件-python处理excel文件(xls和xlsx)

    一.xlrd和xlwt 使用之前需要先安装,windows上如果直接在cmd中运行python则需要先执行pip3 install xlrd和pip3 install xlwt,如果使用pycharm ...

  2. python处理excel文件(xls和xlsx)

    一.xlrd和xlwt 使用之前需要需要先安装,windows上如果直接在cmd中运行python则需要先执行pip3 install xlrd和pip3 install xlwt,如果使用pycha ...

  3. a标签下载文件,js/jq创建a标签导出Excel文件

    a标签下载文件,js/jq 创建a标签导出Excel文件 1.设置dom(html) <button type="button" class="layui-btn ...

  4. R读取excel文件乱码 read.xlsx() 解决方法

    1. 参考[R语言]R读取含中文excel文件,read.xlsx乱码问题  该文章总结得很好,可以直接跳到最后看博主的总结. 2. 如果依旧是乱码那么用read.xlsx2()去读取excel文件, ...

  5. pycharm导入本地文件,程序运行正常,但导入模块时出现红色波浪线

    pycharm导入本地文件,程序运行正常,但导入模块时出现红色波浪线,如下所示: 两种解决办法: (1)在文件前面加"." (2)点击菜单栏的"PyCharm" ...

  6. js 读取excel 导入mysql_可以读取EXCEL文件的js代码

    首页给个有中文说明的例子,下面的例子很多大家可以多测试. function readExcel() { var excelApp; var excelWorkBook; var excelSheet; ...

  7. ThinkPHP导入Excel文件到数据库的简单实现

    第一步:在官网下载PHPExcel插件下载传送门,放在ThinkPHP/Library/Vendor目录下 第二步:前端简单代码 <!DOCTYPE html> <html> ...

  8. JAVA导入/导出EXCEL文件,自定义校验,错误回写excel,使用简单快捷

    github地址: https://github.com/alan-et/alanpoi/tree/develop/alanpoi-analysis 项目中使用: <dependency> ...

  9. h5页面如何预览excel文件_如何使用JavaScript实现前端导入和导出excel文件?(H5编辑器实战复盘)...

    前言 最近笔者终于把H5-Dooring的后台管理系统初步搭建完成, 有了初步的数据采集和数据分析能力, 接下来我们就复盘一下其中涉及的几个知识点,并一一阐述其在Dooring H5可视化编辑器中的解 ...

最新文章

  1. Android系统架构图及简单的系统架构介绍
  2. (莱昂氏unix源代码分析导读-46)权限、管道
  3. App 即时通讯 SDK
  4. 【Spring学习】spring依赖注入用法总结
  5. selenium模拟鼠标和键盘操作的基本方法
  6. [JavaWeb-MySQL]多表查询概述
  7. [转]C++的Json解析库:jsoncpp和boost
  8. OpenShift 4 - Istio-Tutorial (1) 教程说明和准备环境
  9. LeetCode刷题系列(一)把回溯算法框架将给爷爷奶奶听
  10. [JAVA毕业设计]Web企业差旅在线管理系统源码获取和系统演示
  11. 从编程角度阐述有限元最佳入门方法:以Abaqus 和OpenSees 为例
  12. ElementUI 标签组件
  13. Chrome\Edge 更新后访问网站变慢或加载不出来,其他浏览器正常
  14. Codeforces Round #322 A Vasya the Hipster
  15. 【图解CAN总线】-6-classic CAN 2.0总线网络“负载率”计算
  16. AndroidStudio:The application‘s minSdkVersion is newer than the device API level.
  17. android学习笔记之GoogleMap
  18. vue 微信html,vue 实现微信端网页分享
  19. 【opencv】背景消除
  20. python 反转字符串

热门文章

  1. 公司内部流量控制案例
  2. hibernate中load和get方法的区别 lazy的策略
  3. C++ int与string的相互转换(含源码实现)
  4. chrome 扩展开发注意事项
  5. proto buffer
  6. atitit. java jsoup html table的读取解析 总结
  7. 开源纯C日志函数库iLOG3快速入门(八、如果你喜欢简单日志函数甚于日志函数库)...
  8. linux 魔兽 qq
  9. 【Vegas2006】自我介绍for校青春风采大赛
  10. linux -L -l区别,linux ls -l 详解[转]