我如何将本地Excel文件数据传递到Javascript数组(用于谷歌图表)
How can I pass local Excel file data to Javascript array (for google charts)?
我有一个简单的问题,但我找不到一个简单的解决方案:
我有一个Excel文件(总是相同的),有几个工作表,非it同事希望能够更新,以便它也更新谷歌图表(或其他图表API,你可以建议我)网页。
(顺便说一下,我只需要每个工作表的某一部分,所以如果你知道一种方法,只提取我需要的,那将是伟大的:))
我想避免服务器端操作,但这可能是不可能的,因为我想读取本地文件。
我已经看过转换为JSON的方法,或者使用xlsx.js加载为base64字符串,但我发现没有什么简单的,我的同事可以很容易地使用。
非常感谢。
<标题>编辑我找到了一种方法来做我想做的事情,所以如果它能帮助任何人:
首先,我把所有需要的数据放在一个csv文件中。
然后,我使用HTML5 FileAPI读取我用文件输入加载的csv文件。
最后,我使用cvstojson脚本来解析文件,然后将其传递给google graph dataTable我想要的方式。
然而,这只允许加载一次数据,所以我为文件输入使用了一个按钮样式的标签,在文件加载后触发一个隐藏的"重置"按钮(实际上克隆多于重置),所以现在它看起来像一个按钮,允许在我更改其中的数据后多次加载文件。我还使用了jQuery的localStorage来填充json。我知道这很乱,所以这里有一个代码摘录:
<div id="load">
<button id="clear">Clear</button>
<label id="forcvs" for="cvs" > Load data </label>
<input type="file" id="cvs" onchange="handleFiles(this.files);" accept=".csv"><br/>
</div>
"handleFiles"函数指向cvstojson脚本:
var json = JSON.parse(localStorage.getItem('json'))
function handleFiles(files) {
// Check for the various File API support.
if (window.FileReader) {
// FileReader are supported.
getAsText(files[0]);
} else {
alert('FileReader are not supported in this browser.');
}
}
function getAsText(fileToRead) {
var reader = new FileReader();
// Read file into memory as UTF-8
reader.readAsText(fileToRead);
// Handle errors load
reader.onload = loadHandler;
reader.onerror = errorHandler;
}
function loadHandler(event) {
var csv = event.target.result;
processData(csv);
}
function processData(csv) {
object = $.csv.toObjects(csv, {separator:";"})
drawOutput(object);
}
function errorHandler(evt) {
if(evt.target.error.name == "NotReadableError") {
alert("Canno't read file !");
}
}
function drawOutput(object){
json = object
localStorage.setItem('json', JSON.stringify(json))
drawChart()
$( "#clear" ).trigger( "click" );
}
,然后在更新我的数据和绘制我的图表之前,我使用:
json = JSON.parse(localStorage.getItem('json'))
这是我使用的jquery的一个摘录:
var load = $('#cvs')
$('#clear').click(function () {
load.replaceWith(load = load.clone(true))
})
和CSS:
#cvs, #clear {
display: none;
}
#forcvs {
-webkit-appearance: button;
-moz-appearance: button;
appearance: button;
line-height: 16px;
padding: .2em .4em;
margin: .2em;
}
希望它能帮助一些人,谢谢你的回复:)
标题>您可以尝试Alasql JavaScript库将XLSX数据加载到JavaScript数组中,而无需任何复杂的编程。Alasql使用XLSX.js库处理Excel文件。
这是一个示例:
<script src="alasql.min.js"></script>
<script src='xlsx.core.min.js'></script>
<script>
alasql('select * from xlsx("cities.xlsx",{headers:true, sheetid:"Sheet1", range:"A1:B6"})',
[],function(data) {
console.log(data);
});
</script>
您可以在alasql.org站点运行此示例。
默认情况下,header选项为false,工作表为"Sheet1",范围-工作表上的所有单元格。
Alasql还支持TXT、TAB、CSV、JSON和XLS格式。您还可以生成XLSX文件from JavaScript array:
var stars = [{star:"Aldebaran"},{star:"Algol"},{star:"Vega"}];
alasql('SELECT * INTO XSLX("stars.xlsx",{headers:true}) FROM ?',[stars]);
您可以使用sheet.js读取系统excel文件而无需上传
$(document).ready( function() {
var data = SheetName = '';
var fileUrl = "data.xlsx";
var oReq;
if(window.XMLHttpRequest) oReq = new XMLHttpRequest();
else if(window.ActiveXObject) oReq = new ActiveXObject('MSXML2.XMLHTTP.3.0');
else throw "XHR unavailable for your browser";
oReq.open("GET", fileUrl, true);
if(typeof Uint8Array !== 'undefined') {
oReq.responseType = "arraybuffer"; // Set response type
oReq.onload = function(e) {
if(typeof console !== 'undefined')
var arraybuffer = oReq.response;
var data = new Uint8Array(arraybuffer);
var wb = XLSX.read(data, {type:"array"}); // Read file data
toJson(wb);
};
}
else {
oReq.setRequestHeader("Accept-Charset", "x-user-defined");
oReq.onreadystatechange = function() {
if(oReq.readyState == 4 && oReq.status == 200) {
var ff = convertResponseBodyToText(oReq.responseBody);
if(typeof console !== 'undefined')
var wb = XLSX.read(ff, {type:"binary"});
toJson(wb);
}
};
}
oReq.send(); // sends request
function toJson(excel) {
SheetName = excel.SheetNames[0];
excel.SheetNames.forEach(function(sheetName) {
var json = XLSX.utils.sheet_to_json(excel.Sheets[sheetName]); // convert sheet into json format
if( !json.length ) return false;
data = json;
});
}
});
您可以在这里获得更多帮助:
http://onegibi.com/programming/javascript-jquery-read-system-excel-file-without-uploading/- 如何遍历包含对象的数组-javascript
- 保存数组javascript
- 查找数组javascript中包含的元素类型
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 从多维数组javascript中提取特定值
- 如何在数组javascript中选择伪随机值
- 拆分字符串数组(JavaScript)后未定义
- 从数组JavaScript中删除并返回最后n个项的最快方法
- 使用条件for循环更新数组-Javascript
- 从数组javascript创建新对象
- 用数组(javascript)中的值替换regex捕获
- 从数组[Javascript]的总长度中减去一个干净的数字
- 将一个字符串数组解析为一个新的数组javascript
- 如何将对象转换为对象数组javascript
- 赢得't循环数组javascript
- 从不同的数组 JavaScript 中获取值
- 多维数组 JAVASCRIPT 出了点问题
- 可以't分配给一个对象数组javascript
- 比较数组JavaScript中的对象
- 如何完成缺少(连续)元素的数组|Javascript