Скрипт Google Sheets: использование executeQuery (), извлекающего значение ячейки как переменную - PullRequest
0 голосов
/ 02 марта 2020

Можно ли использовать значение ячейки в качестве критерия в предложении WHERE при использовании функции executeQuery () в сценарии:

Например:

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 соответствует этому значению.

1 Ответ

1 голос
/ 02 марта 2020

Я считаю, что проблема в том, что вы используете " getValues ​​() " вместо " getValue () ". getValues ​​() возвращает двумерный массив значений, обычно он используется, когда вы получаете данные из нескольких ячеек, как вы делаете с вашим диапазоном заголовков. Хотя getValue () возвращает единственное значение (строку, число, логическое значение или дату) из ячейки.

try:

var period = sheet.getRange('C14').getValue();

Кроме того, обратите внимание, что ваш код в том виде, в котором он написан в данный момент уязвим для SQL инъекционных атак . Чтобы быть в полной безопасности, вы должны использовать подготовленные операторы вместо непосредственного выполнения запроса.

var query = db.prepareStatement('SELECT * FROM My_DB_View WHERE ColumnA = ?');
query.setString(1,period);
var results = query.execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...