Почему на листе Google отображаются старые данные при использовании IMPORTRANGE? - PullRequest
0 голосов
/ 19 февраля 2019

Я создал простой скрипт Google App, связанный с простым листом Google.

В листе Google есть 2 листа: один лист с именем «Источник» и второй лист с именем «Импортировано»:

https://docs.google.com/spreadsheets/d/1NODMmY8ua-enfjECumm76qszgogE2hyNkhygy8qe1uk/edit#gid=0

Лист «Импортировано» импортирует данные из ячейки «A1» из листа «Источник».

Однако, когда я запускаю код, я замечаю, что кодневозможно выбрать импортированные данные, даже если новые импортированные данные видны человеческому глазу на листе «Импортировано».

Шаги, чтобы повторить проблему:

  • Шаг 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 Ответ

0 голосов
/ 19 февраля 2019

Я прокомментировал код повсюду, но кажется, что вы никогда не копировали значение на лист «Импортировано».Кроме того, рекомендуется использовать .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);
}

Пожалуйста, дайте мнезнаете, если я неправильно понял ваш вопрос.

...