appScript для объединения и инкриминирования запросов из ссылочных ячеек при наличии данных.Чего мне не хватает? - PullRequest
0 голосов
/ 19 ноября 2018

Я пойду лысый, почесывая голову, поэтому мне действительно нужно столько помощи, сколько я могу получить, пожалуйста.Могу ли я также узнать у вас тоже, а не получить решение, которое я не понимаю.

У меня есть appScript, который объединяет подстроки и переменную инкримации, которые вместе приводят к комплексному запросу для анализа данных транзакции для каждогоключевые слова референс-кода «план счетов», а затем соответственно выводит «закодированные» совпадающие транзакции.

Я проверил запрос, инкриминируя его вручную и накладывая на отдельный лист WIP_Query:

={QUERY(Transactions, "Select A, B, C, D, P, "&COA!$B21&" where D MATCHES '\s?.*?\s?"& TEXTJOIN("\s?.*\s?|",True,Indirect("AutoCodeKeys!"&COA!$C21&"2:"&COA!$C21))&"\s?.*?\s?'LABEL "&COA!$B21&" 'CODE'",1); QUERY(Transactions, "Select A, B, C, D, P, "&COA!$B22&" where D MATCHES '\s?.*?\s?"& TEXTJOIN("\s?.*\s?|",True,Indirect("AutoCodeKeys!"&COA!$C22&"2:"&COA!$C22))&"\s?.*?\s?'LABEL "&COA!$B22&" 'CODE'",1)}

(я тестировал больше в стеке, чем опубликовано выше)

Он отлично работает, но когда я пробую один из инкриминированных appScript, я получаю:

"Ошибка: в ARRAY_LITERAL для литерала массива отсутствовали значения для одной или нескольких строк."

Мне кажется, что автоматический запрос показывается мне нормально (я иду косоглазо))

function incrimentingQuerystring() {

  Logger.clear();

  var app = SpreadsheetApp.getActive();
  var targetSheet = app.getSheetByName("scriptedQuery");
  var targetCell = targetSheet.getRange(2, 1);
  var refSheet = app.getSheetByName("ref");
  var query;

  //buildQueryFromSubStrings:

  var beginString = ("={"); // Only to be added to first iteration.
  var s1 = refSheet.getRange(3, 9).getValue();
  var s2 = refSheet.getRange(4, 9).getValue();
  var s3 = refSheet.getRange(5, 9).getValue();
  var s4 = refSheet.getRange(6, 9).getValue();
  var s5 = refSheet.getRange(7, 9).getValue();
  var endString = (";"); // To be deducted from last iteration  *************HOW????????*****************

  //Get Chart Of Account Reference Codes to Query:

  var data = app.getSheetByName("COA").getDataRange().getValues();

  //Incriment though each accont in Chart of Acconts Sheet.

  for (var i = 6; i < data.length; i++) {

    var queryIteration = (s1 + (i - 1) + s2 + (i - 1) + s3 + (i - 1) + s4 + (i - 1) + s5 + endString);

    //Logger.log(queryIteration);

    var thisIteration = (queryIteration + thisIteration);

    //Logger.log(thisIteration);
  }

  //Logger.log(i);
  
  //******My attempt at removing var endString****

  var finalIteration = (s1 + ("5") + s2 + ("5") + s3 + ("5") + s4 + ("5") + s5 + "}"); 

  //Logger.log(finalIteration) // This seems correct but is preceded by "undefined" when added to query below:

  var query = (beginString + thisIteration + finalIteration); // results "undefined" being added prior to finalIteration.

  //Logger.log(query); //Runs out of space to see error. Error can be seen in targetCell in spreadsheet.

  targetCell.setValue(query);
}

LinkToSpreadSheet

1 Ответ

0 голосов
/ 25 ноября 2018

Глупый я .... Я не определил var b перед циклом for, поэтому результат цикла начинался с "undefined".У меня также было "" "в моей" COA "листе" строка описания аккаунта ", которая при конкатенации заставляла appScript выходить из строкового значения.

Функция ниже - мое упрощение цикла в моем исходном вопросе.Его можно использовать для объединения инкрементных ссылок на ячейки со статическими подстроками запросов для построения длинных суммированных запросов.

Я подумал, что лучше всего оставить все различные cell.gets в моем исходном вопросе и просто убедиться, что у меня естьправильность основного цикла с использованием статических кодированных строк.Как только я определил var b правильно перед циклом, все заработало нормально.

Спасибо всем, кто потратил время, пытаясь докопаться до сути моего давнего вопроса для меня.

function loopy() {

  var app = SpreadsheetApp.getActive();

  var ss = app.getSheetByName("results");

  var resultCell = ss.getRange(1, 1);

  var b = 1;

  var beginString = "EQUALS SIGN TO GO HERE{ This is only to appear at the very start..."

  var s1 = "someText, ";

  var s2 = "someMoreText, ";

  var s3 = "evenMoreText, ";

  var midEndString = "Phew End of Text  ;  ";

  var veryEndString = "This is only to appear at the very end...}"

  for (var i = 1; i <= 20; i++) {

    var a = i;

    var b = b + i + s1 + i + s2 + i + s3 + i + midEndString;

    Logger.log(b); // How do remove "undefined" from the first iteration?

  }

  resultCell.setValue(beginString + b + veryEndString);
}

var beginString = "РАВНЫЕ ЗНАКИ, ЧТОБЫ ИДЕТ ЗДЕСЬ {Это должно появиться только в самом начале ..."

var s1 = "someText,";

var s2 = "someMoreText, ";

var s3 =" evenMoreText, ";

var midEndString =" Phew End of Text; ";

var veryEndString =" Это только для отображения всамый конец ...} "

for(var i=1;i<=20;i++){

   //var iterationCounta = i;

   var a = i;

   var b = b+i+s1+i+s2+i+s3+i+midEndString;

   Logger.log(b); // How do remove "undefined" from the first iteration?

  }

resultCell.setValue (beginString + b + veryEndString);}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...