在MySQL中保存excel中的大数据集,不保存所有行

我有或多或less20000行在我的Excel文件(从另一个基于数据库的工具导出),我想保存在我的数据库。

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(); 

第一个问题:它将数据保存在我的表格中,但只是一次又一次,而不是全部。 为什么?

第二个问题:有没有更有效的方法呢?

当我不得不将大的Excel工作表导出到MySQL中时,我使用了这个网站 。 你将不得不导出你的excel文件作为CSV文件,并稍微调整网站上的设置,但我发现它是快速和可靠的。

你可以在Excel中实现一个VBAmacros,它为你的Excel工作表中的所有数据创build一组插入语句。 或者,如果你不想使用macros,只需定义一个新的Excel工作表,在其中定义一个简单的公式如

 =CONCAT("INSERT INTO xxx (a,b,c) values (";Sheet2!A1;", ";Sheet2!A2);")") 

它会在工作表1上为您粘贴在工作表2上的所有数据创build插入语句

(取决于数据types,你必须添加'在数据列周围,插入一些数据types转换,…​​)

然后将所有20000行的公式向下复制,并获得20000个插入语句。 或者,您可以将其更改为在需要更新现有logging时更新语句。