Почему на листе Google отображаются старые данные при использовании IMPORTRANGE?
Я создал простой скрипт Google App, связанный с простым листом Google.
Лист Google имеет 2 листа: один лист с именем "Источник" и второй лист с именем "Импортировано":
https://docs.google.com/spreadsheets/d/1NODMmY8ua-enfjECumm76qszgogE2hyNkhygy8qe1uk/edit
Лист "Импортировано" импортирует данные из ячейки "А1" из листа "Источник".
Однако, когда я запускаю код, я замечаю, что код не может подобрать импортированные данные, даже когда новые импортированные данные видны человеческому глазу на листе "Импортировано".
Шаги, чтобы повторить проблему:
- Шаг 1: Перейдите на лист "Источник" и введите название страны "ИСПАНИЯ" в ячейку A1.
- Шаг 2: Запустите код.
- Шаг 3: Проверьте журналы. Вы заметите, что несмотря на то, что в коде мы назначили "Америка", код все равно записывает имя "Испания", которое было старыми данными.
Если вы запускаете код во второй раз, все работает, как ожидалось. Чтобы повторить код, вам придется начать с шага 1 снова.
Любой указатель в правильном направлении, где я могу исследовать это?
Мой код для вашей быстрой ссылки:
function Stack_Overflow_Function() {
var name = "America";
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Source").activate();
var ss_source = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
ss_source.getRange(1,1).setValue(name);
Utilities.sleep(1000)
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Imported").activate();
var ss_imported = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var lr = ss_imported.getLastRow();
var current_name = ss_imported.getRange(1,1).getValue();
Logger.log('The Current name in Imported sheet is '+current_name);
}
Изменить: извините за то, что не упомянул об этом, данные импортируются с помощью IMPORTRANGE на листе "Импортировано" с использованием стандартной функции IMPORTRANGE("URL-адрес листа Google", Источник!A1:A1)
1 ответ
Я прокомментировал код повсюду, но кажется, что вы никогда не копировали значение на лист "Импортировано". Кроме того, рекомендуется использовать только .activate()
когда вы хотите изменить то, что отображается для пользователя, в противном случае следует избегать просто получения объектов Spreadsheet и Sheet.
function stackOverflowFunction() {
var name = "America";
/* Consider the method I've used below for getting the Spreadsheet and Sheet Object.
You should only use .activate() when you want to change what the user is looking at.
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Source").activate();
var ss_source = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
*/
var spread = SpreadsheetApp.getActiveSpreadsheet();
var ss_source = spread.getSheetByName("Source");
var sourceRange = ss_source.getRange(1,1); //Get the soure range.
sourceRange.setValue(name); //Sets the value of the source range.
Utilities.sleep(1000);
var ss_imported = spread.getSheetByName("Imported"); //Get the imported sheet
var importedRange = ss_imported.getRange(1, 1); //Gets the imported sheet range.
importedRange.setValue(sourceRange.getValue()); //Gets source sheet value and uses it to set the imported sheet value.
// var lr = ss_imported.getLastRow(); //Not sure what this was for but getLastRow() gets an Integer representing the last row in the sheet.
//Now lets check the imported range value...
var current_name = ss_imported.getRange(1,1).getValue();
Logger.log('The Current name in Imported sheet is '+ current_name);
}
Пожалуйста, дайте мне знать, если я неправильно понял ваш вопрос.