Сценарий Google App regex заменяет несколько значений, не работающих с одинарной кавычкой - PullRequest
0 голосов
/ 11 февраля 2020

Проблема

Используя приведенный ниже код, я хотел бы заменить все значения "NULL" на "NULL". В настоящее время он заменит только одно значение.

Код

function generateSQLCode() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('seed-data');
  var row_count = sheet.getLastRow();
  var input_data = sheet.getRange(1, 1, row_count, 20).getValues();
  var data = [];

  for (var i = 0; i < row_count; i++) {

      var row_data; 

      } else if (input_data[i][0] == "entry") {
        row_data = input_data[i].shift();
        row_data = "('" + input_data[i].filter(e=> e!=="").join("', '").replace(/'NULL'/gi, "NULL") + "');";


      data.push([row_data]);
  }
  sheet.getRange(1, 21, data.length, 1).setValues(data);
}

Данные

previous_version_id   dev_id    build_number                                            
NULL                  1         NULL

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Вместо повторения для всего массива, который может быть очень трудоемким, позвольте мне порекомендовать вам хороший класс, встроенный в скрипт Apps, который называется TxtFinder.

Это может упростить большую часть вашего кода и сделать его быстрее.

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  Logger.log(sheet.getName());
  var range = sheet.getDataRange();


  var txtFinder = range.createTextFinder("'NULL'");
  txtFinder.replaceAllWith("NULL")


}

Попробуйте использовать этот фрагмент и посмотрите, как он работает.

Объяснение

Чтобы использовать класс TxtFinder, вам сначала нужно создать объект, вы можете сделать это с помощью метода createTextFinder.

На самом деле вы можете использовать этот метод не только для диапазона, как я, но для листа или даже всей таблицы .

После создание этого объекта (txtFinder в моем примере). Вы можете сделать много вещей, перечисленных в классе TxtFinder. Для вашего случая просто используйте replaceAllWith(), чтобы заменить все совпадения.


Также обратите внимание, что если вы хотите просмотреть все данные в вашем листе, вы можете просто позвонить getDataRange()

0 голосов
/ 12 февраля 2020

Пришлось переназначить row_data для получения полной строки перед заменой любых значений NULL.

else if (input_data[i][0] == "entry") {
row_data = input_data[i].shift();
row_data = "('" + input_data[i].filter(e=> e!=="").join("', '") + "'),";
row_data = row_data.replace(/'NULL'/gi, "NULL")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...