#google-apps-script #google-sheets
#google-apps-script #google-sheets
Вопрос:
При каждом запуске функции celltest () я хочу увеличить значение i
function cell_test () {
var i=8 ;
var ss = SpreadsheetApp.getActiveSpreadsheet ();
var source = ss.getRange ("A!C1");
var destSheet = ss.getSheetByName("B");
var destRange = destSheet.getRange(i,2);
source.copyTo (destRange, {contentsOnly: true});
}
Этот код работает, как показано ниже…
Когда он вызывает cell_test (), он копирует значение из A!C1 и вставляет его в ячейку листа B (8.2) (i = 8).
При следующем вызове я хочу увеличить значение i 1 и вставить его в позицию ячейки (9.2) (i = 9).
Как увеличивать значения i при каждом cell_test ()?
Пожалуйста, помогите мне. Спасибо
Комментарии:
1. Что такое «i»? Всегда 8, когда вы открываете электронную таблицу? Первая пустая строка B? И как выполняется cell_test, из меню, пользовательской формулы, onEdit?
2. целевой ячейкой является лист B (8.2), который я хочу вставить. итак, я присваиваю i значение 8. Затем я вставлю значение в таблицу B (9.2).
3. Вы не ответили на мои вопросы.
Ответ №1:
Сохранение и увеличение переменной в службе свойств
Попробуйте это:
function initI() {
PropertiesService.getScriptProperties().setProperty('i',8);
return Number(PropertiesService.getScriptProperties().getProperty('i'));
}
function incrI() {
var ps=PropertiesService.getScriptProperties();
var i=Number(ps.getProperty('i'));
ps.setProperty('i',i 1);
}
function getI() {
var ps=PropertiesService.getScriptProperties();
var pObj=ps.getProperties();
if(pObj.hasOwnProperty('i')) {
var i=Number(ps.getProperty('i'));
return i;
}else{
return initI();
}
}
function cell_test() {
var i=getI();
var ss = SpreadsheetApp.getActiveSpreadsheet ();
var source = ss.getRange ("A!C1");
var destSheet = ss.getSheetByName("B");
var destRange = destSheet.getRange(i,2);
source.copyTo (destRange, {contentsOnly: true});
incrI();
}
Это удобно, потому что все, что вам нужно сделать, это добавить var
i=getI();
в начале любой тестовой функции и вincrI();
конце вашей тестовой функции, а об остальном позаботятся. Если ваш I не определен в службе свойств, getI () позаботится об этом за вас. Если вы хотите начать все сначала, вы можете просто запустить initI (), и это установит для него значение по умолчанию, которое в настоящее время равно 8. Если вы хотите изменить значение по умолчанию, просто измените 8 в initI () и готово. Вы можете полностью удалить значение PropertiesService для in в диалоговом окне Files / Project Properties /Script Properties.
Ответ №2:
Вы можете создать i
параметр функции и вызвать функцию из цикла for:
function main() {
var startRow = 8;
var endRow = 10;
for(var i=startRow; i<=endRow; i ) {
cell_test(i);
}
}
function cell_test(i) {
var ss = SpreadsheetApp.getActiveSpreadsheet ();
var source = ss.getRange ("A!C1");
var destSheet = ss.getSheetByName("B");
var destRange = destSheet.getRange(i,2);
source.copyTo (destRange, {contentsOnly: true});
}
Это скопирует содержимое ячейки A!C1
в ячейку B!B8
, B!B9
и B!B10
.
Ответ №3:
Я не знаю, нужно ли сбрасывать i или как выполняется cell_test, но это увеличит i при каждом запуске функции.
function cell_test() {
try {
// Increment i
var props = PropertiesService.getScriptProperties();
var i = props.getProperty("Test");
if( i === null ) {
i = 8;
}
else {
i ;
}
props.setProperty("Test", i);
// Put your code here
var ss = SpreadsheetApp.getActiveSpreadsheet ();
var source = ss.getRange ("A!C1");
var destSheet = ss.getSheetByName("B");
var destRange = destSheet.getRange(i,2);
source.copyTo (destRange, {contentsOnly: true});
}
catch(err) {
Logger.log(err);
}
}