在脚本中使用executeQuery()函数时,是否可以将单元格值用作WHERE子句中的条件:
例如:
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Data');
var summarysheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Summary');
var titles = sheet.getRange('A1:AB1').getValues();
var period = sheet.getRange('C14').getValues();
var results = db.executeQuery('SELECT * FROM My_DB_View WHERE ColumnA = "'+ period +'"');
var numCols = results.getMetaData().getColumnCount();
var resultsArray = [];
function ExampleFunction() {
db.setMaxRows(2000);
while (results.next()) {
var rowArray = [];
for (var col = 0; col < numCols; col++) {
rowArray.push(results.getString(col + 1));
}
resultsArray.push(rowArray);
}
sheet.getRange('A1:AB2000').clearContent();
sheet.getRange('A1:AB1').setValues(titles);
sheet.getRange(2, 1, resultsArray.length, numCols).setValues(resultsArray);
results.close();
db.close();
}
因此,在单元格D14中,我有一个值,我希望查询仅选择A列与该值匹配的行。
我相信这里的问题是您使用“ getValues()”而不是“ getValue()”。 getValues()返回一个二维值数组,通常在从多个单元格获取数据时使用它,就像您对标题范围所做的那样。尽管getValue()从单元格返回单个值(字符串,数字,布尔值或日期)。
尝试:
var period = sheet.getRange('C14').getValue();
此外,请注意,您当前编写的代码容易受到SQL injection attacks的攻击。为了完全安全,您应该use prepared statements,而不是直接执行查询。
var query = db.prepareStatement('SELECT * FROM My_DB_View WHERE ColumnA = ?');
query.setString(1,period);
var results = query.execute();