无法使用javascript将xlsx文件转换为json
我正在尝试将xls文件转换为json,我可以成功地将其转换,但当我尝试将xlsx文件转换为json时,我得到一个错误,即“未捕获的头签名:预期的d0cf11e0a1b11ae1 saw 504b030414000808” Index.html无法使用javascript将xlsx文件转换为json,javascript,json,excel,Javascript,Json,Excel,我正在尝试将xls文件转换为json,我可以成功地将其转换,但当我尝试将xlsx文件转换为json时,我得到一个错误,即“未捕获的头签名:预期的d0cf11e0a1b11ae1 saw 504b030414000808” Index.html <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>XL to JSON</title
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>XL to JSON</title>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script src=" https://cdnjs.cloudflare.com/ajax/libs/xls/0.7.4-a/xls.js"></script>
</head>
<body>
<input type="file" id="my_file_input" />
<div id='my_file_output'></div>
<script>
var oFileIn;
$(function() {
oFileIn = document.getElementById('my_file_input');
if(oFileIn.addEventListener) {
oFileIn.addEventListener('change', filePicked, false);
}
});
function filePicked(oEvent) {
// Get The File From The Input
var oFile = oEvent.target.files[0];
var sFilename = oFile.name;
// Create A File Reader HTML5
var reader = new FileReader();
// Ready The Event For When A File Gets Selected
reader.onload = function(e) {
var data = e.target.result;
var cfb = XLS.CFB.read(data, {type: 'binary'});
var wb = XLS.parse_xlscfb(cfb);
// Loop Over Each Sheet
wb.SheetNames.forEach(function(sheetName) {
// Obtain The Current Row As CSV
var sCSV = XLS.utils.make_csv(wb.Sheets[sheetName]);
var oJS = XLS.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);
$("#my_file_output").html(sCSV);
console.log(oJS)
});
};
// Tell JS To Start Reading The File.. You could delay this if desired
reader.readAsBinaryString(oFile);
}
</script>
</body>
</html>
XL到JSON
莱茵变种;
$(函数(){
oFileIn=document.getElementById('my_file_input');
if(oFileIn.addEventListener){
oFileIn.addEventListener('change',filePicked,false);
}
});
功能文件(oEvent){
//从输入中获取文件
var-oFile=oEvent.target.files[0];
var sFilename=oFile.name;
//创建文件读取器HTML5
var reader=new FileReader();
//为选定文件时的事件做好准备
reader.onload=函数(e){
var数据=e.target.result;
var cfb=XLS.cfb.read(数据,{type:'binary'});
var wb=XLS.parsexlscfb(cfb);
//在每张纸上打圈
wb.SheetNames.forEach(函数(sheetName){
//以CSV格式获取当前行
var sCSV=XLS.utils.make_csv(wb.Sheets[sheetName]);
var oJS=XLS.utils.sheet_到_行_对象_数组(wb.Sheets[sheetName]);
$(“我的文件输出”).html(sCSV);
控制台日志(oJS)
});
};
//告诉JS开始读取文件..如果需要,可以延迟
reader.readAsBinaryString(oFile);
}
有谁能告诉我该如何解决这个问题吗?我在这个问题上遇到了很大困难。请提前感谢。您使用的是不支持xlsx文件的xls库。请使用最新版本:
https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js
您可以找到更多详细信息和文档。您使用的是不支持xlsx文件的xls库。请使用最新版本:
https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js
您可以找到有关此代码的更多详细信息和文档。它使用此代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>JS-XLSX Live Demo</title>
<style>
#b64data
{
width:100%;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
</head>
<body>
<b>JS-XLSX (XLSX/XLSB/XLSM/XLS/XML) Live Demo</b><br />
<div id="drop"></div>
<p><input type="file" name="xlfile" id="xlf" /></p>
<br />
<pre id="out"></pre>
<br />
<script src="shim.js"></script>
<script src="jszip.js"></script>
<script src="xlsx.js"></script>
<!-- uncomment the next line here and in xlsxworker.js for ODS support -->
<script src="ods.js"></script>
<script>
var X = XLSX;
var XW = {
/* worker message */
msg: 'xlsx',
/* worker scripts */
rABS: './xlsxworker2.js',
norABS: './xlsxworker1.js',
noxfer: './xlsxworker.js'
};
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 get_radio_value( radioName )
{
var radios = document.getElementsByName( radioName );
for( var i = 0; i < radios.length; i++ )
{
if( radios[i].checked || radios.length === 1 )
{
return radios[i].value;
}
}
}
function to_json(workbook)
{
var result = {};
var result1 = [];
var array1 = [];
var arr =[];
workbook.SheetNames.forEach(function(sheetName)
{
var arr = X.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
var array_lenght = arr.length;
for(var i = 0 ;i<array_lenght;i++ )
{
if(arr.length > 0)
{
array1 = arr[i];
result = array1;
result1.push(array1);
}
}
});
var sub_key = [];
for(var ab in result1)
{
var key = ab;
var val = result1[ab];
for(var j in val)
{
sub_key.push(j);
console.log(sub_key);
}
if((sub_key.indexOf("Last Name") && sub_key.indexOf("Email") && sub_key.indexOf("First Name")) > -1)
{
return "right format";
}
else
{
return "wrong format";
}
}
}
function process_wb(wb)
{
var output = "";
switch(get_radio_value("format"))
{
case "json":
output = JSON.stringify(to_json(wb), 2, 2);
break;
default:
output = JSON.stringify(to_json(wb), 2, 2);
}
if(out.innerText === undefined) out.textContent = output;
else out.innerText = output;
if(typeof console !== 'undefined') console.log("output", new Date());
}
var xlf = document.getElementById('xlf');
function handleFile(e)
{
rABS = document.getElementsByName("userabs")[0];
use_worker = document.getElementsByName("useworker")[0];
var files = e.target.files;
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());
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'});
}
process_wb(wb);
}
};
if(rABS) reader.readAsBinaryString(f);
else reader.readAsArrayBuffer(f);
}
}
if(xlf.addEventListener) xlf.addEventListener('change', handleFile, false);
</script>
</body>
</html>
JS-XLSX现场演示
#B64数据
{
宽度:100%;
}
JS-XLSX(XLSX/XLSB/XLSM/XLS/XML)现场演示
var X=XLSX;
变量XW={
/*工作消息*/
msg:'xlsx',
/*工作脚本*/
rABS:“./xlsxworker2.js”,
norABS:“./xlsxworker1.js”,
noxer:“./xlsxworker.js”
};
函数fixdata(数据)
{
var o=“”,l=0,w=10240;
对于(;l-1)
{
返回“正确格式”;
}
其他的
{
返回“格式错误”;
}
}
}
功能流程(wb)
{
var输出=”;
开关(获取无线电值(“格式”))
{
案例“json”:
output=JSON.stringify(to_JSON(wb),2,2);
打破
违约:
output=JSON.stringify(to_JSON(wb),2,2);
}
如果(out.innerText==未定义)out.textContent=输出;
else out.innerText=输出;
if(typeof console!=“undefined”)console.log(“output”,new Date());
}
var xlf=document.getElementById('xlf');
函数句柄文件(e)
{
rABS=document.getElementsByName(“userabs”)[0];
use_worker=document.getElementsByName(“useworker”)[0];
var files=e.target.files;
var f=文件[0];
{
var reader=new FileReader();
var name=f.name;
reader.onload=函数(e)
{
if(typeof console!=“undefined”)console.log(“onload”,new Date());
var数据=e.target.result;
如果(使用工人)
{
xw(数据、过程和wb);
}
其他的
{
var-wb;
if(rABS)
{
wb=X.read(数据,{type:'binary'});
}否则
{
var arr=固定数据(数据);
wb=X.read(btoa(arr),{type:'base64'});
}
过程wb(wb);
}
};
if(rABS)reader.readAsBinaryString(f);
else reader.readAsArrayBuffer(f);
}
}
if(xlf.addEventListener)xlf.addEventListener('change',handleFile,false);
它使用此代码:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>JS-XLSX Live Demo</title>
<style>
#b64data
{
width:100%;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
</head>
<body>
<b>JS-XLSX (XLSX/XLSB/XLSM/XLS/XML) Live Demo</b><br />
<div id="drop"></div>
<p><input type="file" name="xlfile" id="xlf" /></p>
<br />
<pre id="out"></pre>
<br />
<script src="shim.js"></script>
<script src="jszip.js"></script>
<script src="xlsx.js"></script>
<!-- uncomment the next line here and in xlsxworker.js for ODS support -->
<script src="ods.js"></script>
<script>
var X = XLSX;
var XW = {
/* worker message */
msg: 'xlsx',
/* worker scripts */
rABS: './xlsxworker2.js',
norABS: './xlsxworker1.js',
noxfer: './xlsxworker.js'
};
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 get_radio_value( radioName )
{
var radios = document.getElementsByName( radioName );
for( var i = 0; i < radios.length; i++ )
{
if( radios[i].checked || radios.length === 1 )
{
return radios[i].value;
}
}
}
function to_json(workbook)
{
var result = {};
var result1 = [];
var array1 = [];
var arr =[];
workbook.SheetNames.forEach(function(sheetName)
{
var arr = X.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
var array_lenght = arr.length;
for(var i = 0 ;i<array_lenght;i++ )
{
if(arr.length > 0)
{
array1 = arr[i];
result = array1;
result1.push(array1);
}
}
});
var sub_key = [];
for(var ab in result1)
{
var key = ab;
var val = result1[ab];
for(var j in val)
{
sub_key.push(j);
console.log(sub_key);
}
if((sub_key.indexOf("Last Name") && sub_key.indexOf("Email") && sub_key.indexOf("First Name")) > -1)
{
return "right format";
}
else
{
return "wrong format";
}
}
}
function process_wb(wb)
{
var output = "";
switch(get_radio_value("format"))
{
case "json":
output = JSON.stringify(to_json(wb), 2, 2);
break;
default:
output = JSON.stringify(to_json(wb), 2, 2);
}
if(out.innerText === undefined) out.textContent = output;
else out.innerText = output;
if(typeof console !== 'undefined') console.log("output", new Date());
}
var xlf = document.getElementById('xlf');
function handleFile(e)
{
rABS = document.getElementsByName("userabs")[0];
use_worker = document.getElementsByName("useworker")[0];
var files = e.target.files;
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());
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'});
}
process_wb(wb);
}
};
if(rABS) reader.readAsBinaryString(f);
else reader.readAsArrayBuffer(f);
}
}
if(xlf.addEventListener) xlf.addEventListener('change', handleFile, false);
</script>
</body>
</html>
JS-XLSX现场演示
#B64数据
{
宽度:100%;
}
JS-XLSX(XLSX/XLSB/XLSM/XLS/XML)现场演示
var X=XLSX;
变量XW={
/*工作消息*/
msg:'xlsx',
/*工作脚本*/
rABS:“./xlsxworker2.js”,
norABS:“./xlsxworker1.js”,
noxer:“./xlsxworker.js”
};
函数fixdata(数据)
{
var o=“”,l=0,w=10240;
对于(;l-1)
{
返回“正确格式”;
}
其他的
{
返回“格式错误”;
}
}
}
功能流程(wb)
{
var输出=”;
开关(获取无线电值(“格式”))
{
案例“json”:
output=JSON.stringify(to_JSON(wb),2,2);
打破
违约:
output=JSON.stringify(to_JSON(wb),2,2);
}
如果(out.innerText==未定义)out.textContent=输出;
else out.innerText=输出;
if(typeof console!=“undefined”)console.log(“output”,new Date());
}
var xlf=document.getElementById('xlf');
函数句柄文件(e)
{
rABS=document.getElementsByName(“userabs”)[0];
use_worker=document.getElementsByName(“useworker”)[0];