【发布时间】:2019-07-15 19:25:45
【问题描述】:
您好,我正在使用 JDBC 连接器将一些数据从 google sheet 插入到 mysql
谁能帮助我如何忽略其中包含公式的空单元格值?
我只是用简单的 ='Sheet1'!C1 公式从另一个表中获取我的导入数据表中的数据
我试过了
var newdata = [i for each (i in data)if (isNaN(i))];
和
var newdata = data.filter(String);
但无法解决问题(可能是连接(',')过滤后导致问题)
以下日志详细信息供您参考 - 感谢您提供的任何帮助或指导。如果您需要更多详细信息,请告诉我
[19-07-15 09:22:29:522 PDT] INSERT INTO CymaxVendorReachout2(UTID,Process,BatchNo,BatchName,ReceivedDate,SKUCount,Status,VMTTicket,AssignedTo,Comments,querytype,EmailSentDate,FolUpNum,Folupfrom,FolUpDate,NextFolUpDate,Note) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
[19-07-15 09:22:29:525 PDT] [MER-8903-2019-07-29, Full Merch, MER-8903, Darlee - 903, 2019-07-24, 158, Invalid, No, Onkar, , , 2019-07-29, 1, Vendor, 2019-07-31, 2019-08-02, ]
[19-07-15 09:22:29:530 PDT] [MER-8904-2019-07-30, Full Merch, MER-8904, Darlee - 904, 2019-07-25, 159, Invalid, No, Onkar, , , 2019-07-30, 1, Vendor, 2019-08-01, 2019-08-05, ]
[19-07-15 09:22:29:536 PDT] [MER-8905-2019-07-31, Full Merch, MER-8905, Darlee - 905, 2019-07-26, 160, Invalid, No, Onkar, , , 2019-07-31, 1, Vendor, 2019-08-02, 2019-08-05, ]
[19-07-15 09:22:30:038 PDT] [, , , , , , , , , , , , , , , , ]
[19-07-15 09:22:30:044 PDT] [, , , , , , , , , , , , , , , , ]
[19-07-15 09:22:30:050 PDT] [, , , , , , , , , , , , , , , , ]
[19-07-15 09:22:30:055 PDT] [, , , , , , , , , , , , , , , , ]
[19-07-15 09:22:55:536 PDT] Data truncation: Incorrect date value: '' for column 'ReceivedDate' at row 1
我正在运行的完整谷歌应用脚本
function writeToTable() {
var ss = SpreadsheetApp.getActive();
var sheetDetails = ss.getSheetByName('Details');
var sheetData = ss.getSheetByName('Data');
var sheetImportData = ss.getSheetByName('Import Data');
var host = sheetDetails.getRange("B1").getValue();
var databaseName = sheetDetails.getRange("B2").getValue();
var userName = sheetDetails.getRange("B3").getValue();
var password = sheetDetails.getRange("B4").getValue();
var port = sheetDetails.getRange("B5").getValue();
var tableName = sheetDetails.getRange("B6").getValue();
var url = 'jdbc:mysql://'+host+':'+port+'/'+databaseName;
Logger.log(url);
var sql = 'SELECT * FROM ' + tableName;
var data = getData()
var headerString = data[1]
data = data[0]
try{
var start = new Date();
var conn = Jdbc.getConnection(url, userName, password);
conn.setAutoCommit(false);
var sql = 'INSERT INTO ' + tableName + headerString;
Logger.log(sql);
var stmt = conn.prepareStatement(sql);
var dateColumns = []; // Add the index to this array for date type column
for (var r in data) {
Logger.log(data[r]);
for (var c in data[r]){
if (dateColumns.indexOf(parseInt(c) + 1) >= 0){
var date = Utilities.formatDate(data[r][c], Session.getScriptTimeZone(), "yyyy-MM-dd HH:mm:ss");
stmt.setObject(parseInt(c) + 1, date)
}else{
stmt.setString(parseInt(c) + 1, data[r][c]);
}
}
stmt.addBatch();
}
var batch = stmt.executeBatch();
conn.commit();
conn.close();
var end = new Date();
Logger.log('Time elapsed: %sms for %s rows.', end - start, batch.length);
SpreadsheetApp.getActive().toast('Time elapsed: %sms for %s rows.', end - start, batch.length);
}catch(err){
SpreadsheetApp.getActive().toast(err.message);
Logger.log(err.message);
}
}
function getData(){
//(UTID, Process, BatchNo, BatchName, ReceivedDate, SKUCount, Status, VMTTicket, AssignedTo, Comments, querytype, EmailSentDate, FolUpNum, Folupfrom, FolUpDate, NextFolUpDate, Note ) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
var ss = SpreadsheetApp.getActive();
var sheetImportData = ss.getSheetByName('Import Data');
var data = sheetImportData.getDataRange().getValues();
var header = data[0];
var headerString = header.join(',')
headerString = '(' + headerString + ') values ('
var questions = Array(header.length + 1).join('?').split('')
headerString = headerString + questions.join(',') + ')'
Logger.log(headerString)
Logger.log(data.slice(1))
return [data.slice(1), headerString]
}
【问题讨论】:
-
请问
newdata的变量和你的脚本的关系? -
道歉 我上传的 .gs 代码不完整。我已经更新了。我尝试使用stackoverflow.com/questions/44579300/… 中给出的解决方案
-
我添加了 var newdata = data.filter(String);下面 var data = sheetImportData.getDataRange().getValues();并在脚本中用 newdata 替换数据变量,但它不起作用
-
感谢您回复和更新您的问题。对于
Import Data工作表的数据范围,您希望通过删除空值单元格而单元格具有公式来检索值。在这种情况下,当使用getValues()时,仅检索值。所以我认为你的方法是合适的。但在你的问题中,它似乎不起作用。所以为了正确理解你的情况,你能提供一个样本电子表格吗?当然,请删除您的个人信息。 -
感谢您的回复。我可以看到您的示例电子表格。您要修改
getData()的脚本。如果我的理解是正确的,您能否提供您想要的示例输出值?通过这个,我想修改getData()。
标签: javascript mysql jdbc google-apps-script google-sheets