Google表格脚本:使用executeQuery()将单元格值提取为变量

问题描述 投票:0回答:1

在脚本中使用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列与该值匹配的行。

google-apps-script jdbc google-sheets
1个回答
0
投票

我相信这里的问题是您使用“ 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();
© www.soinside.com 2019 - 2024. All rights reserved.