0

Я не могу заставить этот скрипт работать. У меня есть шаблон, который я использую для выставления счетов, и я пытаюсь клонировать этот лист, а затем обновлять информацию для новых клиентов, контрактов и т. Д. В конце каждого месяца. Мне не нужна вся информация из таблицы «bsf», а только столбцы, которые использовались в моем шаблоне фактуры. Я тестировал его, и все работает, но не включая цикл for. Что-то там происходит.Сравнение значений заголовков в двух документах Google Таблиц и вставке всего столбца, если они соответствуют

С циклом for, я пытаюсь выполнить цикл через каждый столбец, захватить его, сравнить заголовок из моего документа doc с документом BSF, и если они совпадут, вставьте весь столбец в новый документ фактуры. Если нет, я хочу, чтобы он перешел к следующему столбцу и сделал то же самое.

function newBillingDoc() { 
    var billingTemplate = SpreadsheetApp.getActiveSpreadsheet(); 
    var destFolder = DriveApp.getFolderById("0B1U5evaRId6xYi1rNGhZbUtBV0U"); 
    var newId = DriveApp.getFileById(billingTemplate.getId()).makeCopy("billing doc template", destFolder).getId(); 
    var billingMaster = SpreadsheetApp.openById(newId).getSheetByName('2016 Master'); 
    billingMaster.clearContents(); 

    var bsf = SpreadsheetApp.openById('1qKaZXpCk7Vw3uvRNft8Cl4vuCC_6PMRR9xyc2tNE7Cc').getSheetByName('Copy of 2016 Master'); 
    var lastRow = bsf.getLastRow(); 
    var lastColumn = bsf.getLastColumn(); 
    var billingHeader = billingTemplate.getSheetByName('2016 Master').getRange('A1:J1').getValue(); 
    billingMaster.getRange('A1:J1').setValue(billingHeader); 

for(var j = 1; j < lastColumn; j++); { 
    var billingBody = billingMaster.getRange(1, j, lastRow, 1); 
    billingHeader = billingTemplate.getSheetByName('2016 Master').getRange(1, j, 1, 1).getValue(); 
    var masterHeader = bsf.getRange(1, j, 1, 1).getValue(); 
    if (billingHeader == masterHeader) { 
     var billingBodyChunk = bsf.getRange(1, j, lastRow, 1).getValues(); 
     billingBody.setValues(billingBodyChunk); 
    } 
    } 
} 

Когда я поставил billing Header и masterHeader в Logger.log(data) я получаю следующее:

[16-05-31 16:01:15:403 PDT] [[]] 
[16-05-31 16:01:15:403 PDT] [[Percentage]] 

Я думаю, что мне нужно, чтобы объявить массив или что-то, но я действительно не знаю. Я попытался добавить массивы, но, похоже, он не работал с объектами, с которыми я работаю.

+0

Измените оба экземпляра '.getValues ​​()' на '.getValue()'. Также (возможно, ответ на вопрос, который вы не задали), гораздо лучше сначала получить все данные с помощью '.getDataRange(). GetValues ​​()' и выполнить итерацию результирующих 2D-массивов. – AdamL

+0

Я пробовал это, а также писал billingHeader перед циклом for (как это предложил Бобби С), но он не работает. Вы просто имеете в виду два 'getValues ​​()' после объявлений переменных для masterHeader и billingHeader, правильно? Я обновляю исходный вопрос с помощью моего обновленного кода. Я сохраню ваш комментарий re: 'getDataRange(). GetValues ​​()' в виду! Это действительно моя первая попытка кодирования. – Grandin

ответ

0

Похоже, вы сравниваете заголовки от мастера до выставления счетов, однако заголовки от мастера никогда не будут скопированы по биллингам и, таким образом, в вашем цикле for утверждение if никогда не будет разрешено true. Попробуйте сначала скопировать первый заголовок 1 строки. Это должно допускать хороший огонь.

+0

Я пробовал это, и он все еще не работает. Верхний ряд успешно переносится, но ничего больше не заполняется. – Grandin