JS客户端读取Excel文件插件js-xls使用方法
js-xls是一款客户端读取Excel的插件,亲测IE11、FireFox、Chrome可用,读取速度也可观。
插件Demo地址:http://oss.sheetjs.com/js-xlsx/ http://oss.sheetjs.com/js-xls/
Excel列信息

js代码如下:
var X = XLS;
function to_json(workbook) {
var result = {};
workbook.SheetNames.forEach(function (sheetName) {
var roa = XLS.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
if (roa.length > 0) {
result[sheetName] = roa;
}
});
return result;
} function fixdata(data) {
var o = "", l = 0, w = 10240;
for (; l < data.byteLength / w; ++l) o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w, l * w + w)));
o += String.fromCharCode.apply(null, new Uint8Array(data.slice(l * w)));
return o;
} function process_wb(wb,type) {
var output = "";
switch (type) {
case "json":
output = JSON.stringify(to_json(wb), 2, 2);
break;
case "form":
output = to_formulae(wb);
break;
default:
output = to_csv(wb);
}
//if (out.innerText === undefined) out.textContent = output;
//else out.innerText = output;
return output;
}
47
function ReadExcel(out) {
var selCodes = $("#selProductCodes").val();
var exlData = JSON.parse(out);
var regCode = /^[1-9]\d*$/;
var regQty = /^\d*$/;
var ids = [];
var msg = "";
if (exlData.Sheet1 == null || exlData.Sheet1 == undefined) {
msgErro("未查询到Excel文件中的数据!");
saveLoading('hide');
return;
}
for (var i = 0; i < exlData.Sheet1.length; i++) {
var sysno = exlData.Sheet1[i].ProductSysNo;
var qty = exlData.Sheet1[i].Qty;
if (sysno == undefined)
msg += "Qty列数据为 " + qty + " 的行,缺少ProductSysNo信息!\r\n";
else if (qty == undefined)
msg += "ProductSysNo列数据为 " + sysno + " 的行,缺少Qty信息!\r\n";
else if (!regCode.test(sysno))
msg += "ProductSysNo列数据为 " + sysno + " 不是有效的商品编号!\r\n";
else if (!regQty.test(qty))
msg += "Qty列数据为 " + qty + " 不是有效的数量格式!\r\n";
else {
ids.push(sysno);
}
}
//do something
}
var xlf = document.getElementById('xlf'); //<input type="file" id="xlf" />
function handleFile(e) {
if (e.target.files[0].name.indexOf(".xls") < 0) {
msgErro("请选择.xls格式文件!");
return;
}
saveLoading('show');
rABS = false;
use_worker = false;
var files = e.target.files;
var output = "";
var f = files[0];
{
var reader = new FileReader();
var name = f.name;
reader.onload = function (e) {
if (typeof console !== 'undefined') console.log("onload", new Date(), rABS, use_worker);
var data = e.target.result;
if (use_worker) {
xw(data, process_wb);
} else {
var wb;
if (rABS) {
wb = X.read(data, { type: 'binary' });
} else {
var arr = fixdata(data);
wb = X.read(btoa(arr), { type: 'base64' });
}
output = process_wb(wb, "json");
ReadExcel(output);
}
};
if (rABS) reader.readAsBinaryString(f);
else reader.readAsArrayBuffer(f);
}
} if (xlf.addEventListener) xlf.addEventListener('change', handleFile, false);
js-xls插件下载地址:下载插件
JS客户端读取Excel文件插件js-xls使用方法的更多相关文章
- C# 读取EXCEL文件的三种经典方法
1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { stri ...
- ASP.NET读取EXCEL文件的三种经典方法(转)
1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:public DataSet ExcelToDS(string Path) { str ...
- ASP.NET读取EXCEL文件的三种经典方法
1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { ...
- (转)C# 读取EXCEL文件的三种经典方法
原文地址http://www.open-open.com/code/view/1420029490093 1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取 ...
- R读取excel文件乱码 read.xlsx() 解决方法
1. 参考[R语言]R读取含中文excel文件,read.xlsx乱码问题 该文章总结得很好,可以直接跳到最后看博主的总结. 2. 如果依旧是乱码那么用read.xlsx2()去读取excel文件, ...
- 转:C# 读取EXCEL文件的三种经典方法
1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { stri ...
- Java读取Excel文件(包括xls和xlsx)的样例程序
样例程序如下所示,其中: parseXls()函数依赖于jxl,只能读取xls格式文件: parseExcel()函数依赖于apache poi,能够读取xls和xlsx两种格式的文件. jxl的依赖 ...
- .Net读取Excel文件时丢失数据的问题 (转载)
相信很多人都试过通过OleDB读取Excel文件,这种方法效率十分高,只是有一点会让人十分头痛,就是当一列中既有混合型数据,又有纯数据时,往往容易丢失数据. 百度过后,改连接字符串 “HDR=YES; ...
- Matlab 读取excel文件提示服务器出现意外情况或无法读取问题解决
1.问题描述: 该错误通常发生在应用函数读取excel文件(后缀xls或xlsx)时. 应用xlsread函数读取提示服务器出现意外情况: 应用importdata读取时提示can‘t open fi ...
随机推荐
- C++ Primer 5th 第9章 顺序容器
练习9.1:对于下面的程序任务,vector.deque和list哪种容器最为适合?解释你的选择的理由.如果没有哪一种容器优于其他容器,也请解释理由.(a) 读取固定数量的单词,将它们按字典序插入到容 ...
- 模拟键盘输入首先要用到一个API函数:keybd_event
转自:http://www.cnblogs.com/cpcpc/archive/2011/02/22/2123055.html 模拟键盘输入首先要用到一个API函数:keybd_event. 模拟按键 ...
- 一些 CSS 框架
利用 CSS 框架,可以简化你的工作,提高工作效率.CSS 框架是一系列 CSS 文件的集合体,包含了基本的元素重置,页面排版.网格布局.表单样式.通用规则等代码块.下面给你推荐了27款优秀的CSS框 ...
- ubuntu 引导删除
点开始,在搜索中输入cmd,在搜到的cmd上右键以管理员身份运行,在打开的cmd中输入命令:bcdedit在命令结果中找到类似如下的版块: 实模式启动扇区---------------------标识 ...
- Java前辈:学习J2EE流程中的经验和教训
Java前辈:学习J2EE流程中的经验和教训 在这里我谈谈我在学习j2ee流程,并谈到在此过程中领会的经验和教训.以便后来者少走弯路. Java发展到现在,按应用来分主要分为三大块:J2SE,J2 ...
- 转:enum与typedef enum的用法
来自:http://blog.sina.com.cn/s/blog_817a5eb6010146ad.html 作者:于超峰 在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#defi ...
- Activity的四种状态
Running状态:一个新的Activity启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态.Paused状态:当Activity被另一个透明或者Dialog样式的A ...
- BaseFragment
public abstract class BaseFragment extends Fragment { public FragmentActivity mActivity; /** * 此方法可以 ...
- MFC基本框架
MFC基本框架 By 小戴 发表于 2006-12-21 15:59:00 MFC 应用程序框架 1. MFC 简介: MFC ( Microsoft Foundation Class )是由 ...
- 【HDOJ】1011 Starship Troopers
第一道树形DP.很容易理解. #include <cstdio> #include <cstring> #include <cstdlib> #define MAX ...