- «Лист1» имеет дату и идентификатор в столбцах «А» и «В» соответственно.
- «Лист2» имеет идентификатор в столбце «А».
- Вы хотите скопировать дату «Sheet1» в столбец «P» «Sheet2», когда идентификаторы «Sheet1» и «Sheet2» совпадают.
- Вы хотите добиться этого с помощью скрипта Google Apps.
Если мое понимание верно, как насчет этой модификации?
Точки модификации:
- О
for(var i = 0; i > sheetA.getLastRow(); i++){
, в данном случае цикл forне используется, потому что i > sheetA.getLastRow()
. dataA
и dataB
являются 2-х мерными массивами типа [[columnA of row1, columnB of row1],[columnA of row2, columnB of row2],,,]
.Таким образом, в dataA[2][i] == dataB[1][i]
сравниваются строка 2 в Sheet1 и строка 1 в Sheet2. - Когда в цикле используется
setValue()
, стоимость становится очень высокой.Поэтому, пожалуйста, поместите значения, используя setValues()
после создания значения для размещения. - В вашем случае, когда используется
var dataA = sheetA.getRange(1, 1, sheetA.getLastRow(), 2).getValues()
вместо sheetA.getRange('A:B').getValues()
, стоимость процесса может быть уменьшена.
Когда вышеуказанные точки отражаются в вашем скрипте, он становится следующим:
Модифицированный скрипт:
function CopyDate() {
var ss = SpreadsheetApp.openById('Name'); // If you want to use openById(), please replace the Spreadsheet ID to ``Name``.
var sheetA = ss.getSheetByName('Sheet1');
var dataA = sheetA.getRange(1, 1, sheetA.getLastRow(), 2).getValues();
var sheetB = ss.getSheetByName('Sheet2');
var dataB = sheetB.getRange(1, 1, sheetB.getLastRow(), 1).getValues();
var values = dataB.map(function(e) {
var t = dataA.filter(function(f) {return f[1] == e[0]});
return t.length > 0 ? [t[0][0]] : [""];
});
sheetB.getRange(1, 16, values.length, 1).setValues(values); // 16 means the column "P".
}
Примечание:
- В вашем скрипте:
Name
можно увидеть в ss= SpreadsheetApp.openById( 'Name');
.Если вы используете имя таблицы, пожалуйста, используйте идентификатор таблицы.Если я неправильно понял это, пожалуйста, игнорируйте. - Если вы не хотите снижать стоимость процесса, я приношу свои извинения.
Ссылки:
Если это не тот результат, который вам нужен, я прошу прощения.В то время, чтобы правильно понять вашу ситуацию, можете ли вы предоставить образец электронной таблицы?Конечно, удалите вашу личную информацию из него.По этому я хотел бы изменить скрипт.