Я не могу заставить этот скрипт работать. У меня есть шаблон, который я использую для выставления счетов, и я пытаюсь клонировать этот лист, а затем обновлять информацию для новых клиентов, контрактов и т. Д. В конце каждого месяца. Мне не нужна вся информация из таблицы «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]]
Я думаю, что мне нужно, чтобы объявить массив или что-то, но я действительно не знаю. Я попытался добавить массивы, но, похоже, он не работал с объектами, с которыми я работаю.
Измените оба экземпляра '.getValues ()' на '.getValue()'. Также (возможно, ответ на вопрос, который вы не задали), гораздо лучше сначала получить все данные с помощью '.getDataRange(). GetValues ()' и выполнить итерацию результирующих 2D-массивов. – AdamL
Я пробовал это, а также писал billingHeader перед циклом for (как это предложил Бобби С), но он не работает. Вы просто имеете в виду два 'getValues ()' после объявлений переменных для masterHeader и billingHeader, правильно? Я обновляю исходный вопрос с помощью моего обновленного кода. Я сохраню ваш комментарий re: 'getDataRange(). GetValues ()' в виду! Это действительно моя первая попытка кодирования. – Grandin