使用Google Spreadsheets App Script中的MySQL数据进行数据验证

时间:2014-11-11 21:52:01

标签: mysql google-apps-script google-sheets google-spreadsheet-api

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

}

1 个答案:

答案 0 :(得分:0)

你从单元格得到的值是(我猜)一个日期,而你比较它的值看似是一个字符串,比较永远不会成真。

有很多方法可以解决这个问题;要么将两个值都转换为日期,要么将两者都转换为字符串。

第二种解决方案可能更容易,更不容易出现问题。

所以你应该在你的代码中使用这样的东西:

  ...
  var testAsString = Utilities.formatDate(new Date(test.getValue()), Session.getScriptTimeZone(),'yyy-MM-dd');
  if (testAsString == result[0]) {
  return;
}