在Google Spreadsheets中,我有一个应用程序脚本,用于从MysQL数据库中获取数据(结果)并将其插入特定工作表上的lastRow()+ 1。我想运行数据验证,以确保结果中的第一项不等于A列中最后一个单元格的内容。
除了数据验证之外,所有内容都在脚本中运行(它抓取数据并将其放在我想要的位置,它只是不进行数据检查)。任何帮助/指导都会非常感激 - 谢谢!
可能相关:我希望结果[0]以格式' YYYY-MM-DD'返回日期。匹配lastRow()单元格值中的内容。
这是我的代码:
function cleverlynamedfunction() {
// make the connection
var connection = Jdbc.getConnection("jdbc:mysql://[host]/[database]", "[user]", "[password]");
// perform the query
var SQLstatement = connection.createStatement();
var result = SQLstatement.executeQuery("[some query]");
// choose a range in sheet
var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("data_dash");
var cell = ss.getRange("A".concat(ss.getLastRow()+1));
// validate the data doesn't already exist in the spreadsheet DOES NOT WORK YET
var test = ss.getRange("A".concat(ss.getLastRow()));
if (test.getValue() == result[0]) {
return;
}
// loop through result object, setting cell values to database data
var row = 0;
while(result.next()) {
for(var i=0; i<43; i++) { // 43 fields per record
cell.offset(row, i).setValue(result.getString(i+1));
}
row++;
}
// tidy up
result.close();
SQLstatement.close();
connection.close();
}
答案 0 :(得分:0)
你从单元格得到的值是(我猜)一个日期,而你比较它的值看似是一个字符串,比较永远不会成真。
有很多方法可以解决这个问题;要么将两个值都转换为日期,要么将两者都转换为字符串。
第二种解决方案可能更容易,更不容易出现问题。
所以你应该在你的代码中使用这样的东西:
...
var testAsString = Utilities.formatDate(new Date(test.getValue()), Session.getScriptTimeZone(),'yyy-MM-dd');
if (testAsString == result[0]) {
return;
}