我的excel文件中有大约20000行(从另一个基于数据库的工具导出),我想保存在我的数据库中。
if(typeof require !== 'undefined') XLSX = require('xlsx');
var xlsx = "tmp8704.xlsx";
var url = "extFiles/"+xlsx;
var oReq = new XMLHttpRequest();
oReq.open("GET", url, true);
oReq.responseType = "arraybuffer";
var dataXLS;
oReq.onload = function(e) {
var arraybuffer = oReq.response;
/* convert data to binary string */
var data = new Uint8Array(arraybuffer);
var arr = new Array();
for(var i = 0; i != data.length; ++i) arr[i] = String.fromCharCode(data[i]);
var bstr = arr.join("");
/* Call XLSX */
var workbook = XLSX.read(bstr, {type:"binary"});
var first_sheet_name = workbook.SheetNames[0];
/* Get worksheet */
var worksheet = workbook.Sheets[first_sheet_name];
dataXLS = XLSX.utils.sheet_to_json(worksheet, {header:1});
var mysql = require("mysql");
var connection = mysql.createConnection({
host: 'xxx.xxx.xxx.xxx',
user: 'muser',
password: 'massword',
database: 'matabase'
});
connection.connect((err) => {
if(err) {
return console.log(err.stack);
}
console.log("Connection succesfully established");
});
for(var x in dataXLS){
if(parseInt(x)+2 != dataXLS.length) {
var myNumber = dataXLS[parseInt(x)+2][6];
console.log("Stelle " + x + " :" + dataXLS[parseInt(x)+2][0] + " " + dataXLS[parseInt(x)+2][1] + " " + parseFloat(myNumber));
$queryString = "INSERT INTO `articles` (articleno,text,price) VALUES ("+parseInt(dataXLS[parseInt(x)+2][0])+",'"+dataXLS[parseInt(x)+2][1]+"',"+parseFloat(myNumber)+");";
connection.query($queryString, (err, rows, fields) => {
if(err) {
return console.log("An error ocurred with the query", err);
}
});
} else {
console.log(parseInt(x)+2);
console.log(dataXLS.length); //19610
break;
}
}
connection.end(() => {
console.log("Connection successfully closed");
});
}
oReq.send();
第一个问题:它是在我的表中保存数据,但只是一次又一次,而不是全部。为什么呢?
第二个问题:有更有效的方法吗?
答案 0 :(得分:0)
当我必须将大型Excel工作表导出到MySQL时,我使用了this website。您必须将您的Excel文件导出为csv并稍微调整网站上的设置,但我发现它快速可靠。
答案 1 :(得分:0)
您可以在Excel中实现一个VBA宏,它为Excel工作表中的所有数据创建一组插入语句。或者,如果您不想使用宏,只需定义一个新的Excel工作表,您可以在其中定义一个简单的公式,例如
=CONCAT("INSERT INTO xxx (a,b,c) values (";Sheet2!A1;", ";Sheet2!A2);")")
在工作表1上为您在工作表2上粘贴的所有数据创建插入语句
(取决于数据类型,您必须在数据列周围添加'插入一些数据类型转换,...)
然后将所有20000行的公式复制下来,并获得20000个插入语句。或者,您可以在需要更新现有记录时将其更改为更新语句。