Як можна змусити Google Таблиці автоматично оновлювати посилання на інший аркуш?


20

Я використовую зовнішню програму для введення даних у електронну таблицю Google. Дана робоча книга посилається на окрему робочу книжку (з IMPORTRANGE(spreadsheet_key, range_string)функцією), яка маніпулює та інтерпретує дані. Моя проблема полягає в тому, що кожного разу, коли я особисто змінюю посилання на цей посібник, оновлення книги оновлюється просто чудово, але щоразу, коли зовнішня програма змінює її, вона не оновлюється.

Я спробував редагувати "Налаштування електронної таблиці", щоб перерахунок робився щохвилини та кожного зміни. Крім того, я також встановив розширення в Google Chrome, яке автоматично оновлює сторінку щогодини. Однак дані не повторно імпортуються із посилань на робочу книгу. Навіть якщо я скопіюю формулу в нову комірку, дані все одно не повторно імпортуються.

Чи можу я зробити що-небудь із посиланням на робочу книгу, щоб запустити Google Sheets повторно імпортувати дані?

Редагування: Для того, щоб було зрозуміло, на даний момент у мене є одна робоча книга з даними, внесеними зовнішньою програмою в неї (називайте її "вихідний аркуш"), та інша робоча книга з IMPORTRANGEфункцією в ній (називайте її "довідковий аркуш"). Дані, показані IMPORTRANGEфункцією у "довідковому аркуші", не включають жодних даних, введених зовнішньою програмою, оскільки я востаннє особисто редагував "аркуш джерела". Також обидва робочі зошити використовують нові таблиці Google.

Редагувати: Також це питання не збігається з тим, як я можу пов’язати клітинку в електронних таблицях Google до комірки в іншому документі? тому що я використовую функцію, задану як рішення цього питання, щоб імпортувати дані з електронної таблиці. Проблема полягає не в тому, як імпортувати дані, а в тому, як оновлювати джерело даних. Моє припущення, що Google би подбав про це за мене, але дані на "довідковому аркуші" не оновлюються, і єдиний спосіб, коли я можу знайти його для оновлення, - це фізично зайти в "вихідний аркуш" "і відредагуйте її самостійно.



@pnuts Чи можете ви пояснити, що ви маєте на увазі, "гарантуючи, що правильна версія використовується як джерело"? У мене налаштування обох аркушів налаштовані для оновлення кожної хвилини, а вкладки - для оновлення щохвилини. Як, де і на якому аркуші я оновлюю джерело?
tlewis3348

@pnuts Ну, дані відображаються в separate workbookпорядку. З усіх поглядів, схоже, що це було щойно набрано.
tlewis3348

Так, це нові Google Таблиці. В одній робочій книжці відображаються додані дані, а в іншій - немає. Я додам це до початкового питання для уточнення.
tlewis3348

Відповіді:


14

Я боровся з тією ж проблемою. Замість того , щоб писати для користувача функцію, додати інший рядок запиту spreadsheet_urlв IMPORTRANGEв надії , що кожен раз , коли сторінка оновлюється, Google вважає , що це необхідно для отримання даних з нової таблиці. Я просто додаю нову позначку часу, щоб кожен раз зробити URL унікальним. Це кричущий хак, але він працює для мене на багатьох аркушах.

Моя формула раніше виглядала приблизно так:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/123123123123/edit#gid=1816927174","'Sheet1'!A1:B25")

А тепер це виглядає так:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/123123123123/edit#gid=1816927174"&"?"&now(),"'Sheet1'!A1:B25")

Оновлення:

Цей метод більше не працює, оскільки Google більше не дозволяє now()всередину importrange(). Дивіться коментар Х'ю нижче.


6
Я натрапив на цю відповідь, намагаючись зробити те саме. Схоже, Google зробив це так, що зараз (), rand () та randbetween () не можна використовувати у виклику importrange ().
Х'ю

Якщо я встановлю електронну таблицю оновлювати кожну хвилину, чи формула також буде оновлена ​​та отримає нові дані (якщо вони доступні)?
Ніхілу Sahu

5

Далі йде відповідь від Джиммі у цій відповіді на веб-програми .

  1. В обох електронних таблицях вставити =now()рівняння у випадкову клітинку, скажімоZ1
  2. В обох електронних таблицях вставити =importrange()функцію, що посилається на nowфункцію інших електронних таблиць.
  3. Зайдіть у налаштування електронної таблиці та виберіть перерахунок щохвилини.

Я спробував багато інших пропозицій, включаючи використання =now()функції, фокус URL-адреси тепер у цій темі або Службовий скрипт, щоб вставити випадковий текст через встановлений інтервал, але нічого не змусить importrange оновити, окрім ручного редагування аркуша джерела.


Працював для мене в грудні 2018 року
MalcolmOcean

4

Я знайшов, що найпростішим способом було скласти просту ifзаяву навколо importrange.

B1 = Sheet ID
B2 = Sheet Name and Range
B3 = Now()
=if (B3> now()-1, IMPORTRANGE(B1,B2),)

Це працює щоразу.


Я намагався реалізувати ваше рішення, але мені незрозуміло, як користуватися B3. Ти кажеш, що B3 = Now (), тоді=if (Now() > now()-1, IMPORTRANGE(B1,B2),)
Євген ван дер Мерве

3

Начебто, вирішення проблеми мітки дат не працює для мене - є явна примітка, що використання позначок дат та функцій rand заборонено.

Моє дуже хакітне рішення - видалити комірку, а потім натиснути ctrl + z. Це примушує оновити щоразу. Сценарій цього онові, або через певні проміжки часу, тривожно, щоб зберегти дані свіжими.


2

Я знайшов простий хак для імітації оновлення осередку вручну та запуску модифікацій у зовнішній електронній таблиці.

  1. Створена спеціальна функція на зразок цієї:

    // Hack function used just to simulate a manual update
    function hack(value) {
      var list = []
      list.push(value);
      return list;
    }
    
  2. Потім на своєму аркуші я називаю це так:

    =arrayformula(hack(tab!B1))
    

    де tab!B1одна з комірок, які я змінюю за кодом.


Як це імітує ручне оновлення комірок?
haemse

2

АБО ... ви можете зробити простий скрипт, спочатку давши значення cero (0), потім включивши формулу назад, і зробіть цей трюк:

  var cell = sheet.getRange("B1:B1"); //SHEET TO INSERT VALUE
  cell.setFormula("=0");
   Utilities.sleep(2000); //JUST TO GIVE TIME TO UPDATE (OPTIONAL)
  var cell = sheet.getRange("B1:B1");
  cell.setFormula("=ImportRange(\"YOUR_SHEET_ID\",\"RANGE_TO_INSERT\")");  

ще краще було б cell.setFormula ("=" & cell.getValue ()) ;, так що користувач не бачить нуля протягом 2 секунд ....
Тоні БенБрахім,

1

Мені вдалося знайти спосіб вирішити свою проблему (детальніше тут ) за допомогою сценарію додатків із власною функцією.

Якщо ви замініть =IMPORTRANGE(spreadsheet_url, range_string)у своїй електронній таблиці на =DynamicImportRange(spreadsheet_url, sheet_name, range)та вставте код нижче в Інструменти -> Редактор сценаріїв -> Пустий проект, він повинен працювати (див. Це для отримання додаткової інформації про написання сценаріїв програм).

/**
Usage: =DynamicImportRange(spreadsheet_url, sheet_name, range)
Compare to: =IMPORTRANGE(spreadsheet_url, range_string)

Where the given arguments are placeholders that should be replaced
by arguments specific to your use-case.
 */
function DynamicImportRange(sheet_url, sheet_name, sheet_range) {
  var values = SpreadsheetApp.openByUrl(sheet_url).getSheetByName(sheet_name).getRange(sheet_range).getValues();
  return values
};

/**
*/
function RefreshSheet() {
  // Update the following two variables to suit your particular situation
  var sheet_name = "sample_sheet_sheet"
  var range = "A1"

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheet_name);
  var formula1 = "Loading...";
  var formula2 = sheet.getRange(range).getFormula().toString().replace('"', '\"');
  // The following assumes that the data is being inserted into the sheet in the same
  // location as it is in in the source sheet.
  var form_range = formula2.split(",")[2].split("\"")[1];
  sheet.getRange(form_range).clear();
  sheet.getRange(range).setValue(formula1);
  Utilities.sleep(245);
  sheet.getRange(range).setValue(formula2);
};

Якщо ви хочете регулярно оновлювати аркуш, ви можете встановити тригер, перейшовши до ресурсів -> Поточні активатори проекту у вікні сценарію програм.


4
ДЛЯ ВСІХ GOOGLERS закінчуються ТУТ : спеціальні функції електронної таблиці не можуть відкривати (більше) інші електронні таблиці за допомогою SpreadsheetApp.openById()або SpreadsheetApp.openByUrl(). Перевірте тут і тут
Франческо Вадікамо

1

Як спосіб вирішення проблеми now()блокування руху, ви можете змінювати параметри електронної таблиці, щоб оновлюватись щогодини.

Файл -> Налаштування електронної таблиці -> Розрахунок

Оновіть аркуш, щоб перерахувати себе на " У зміну та щогодини " або "На зміну і щохвилини". Хоча майте на увазі, вибір перерахунку щохвилини може закрити електронну таблицю.


0

Ви можете використовувати додатки Sheetgo для Google Таблиць, щоб автоматично оновлювати свою посилання з іншого аркуша. Ви можете використовувати 30 оновлень безкоштовно на місяць або отримати платну підписку для додаткових оновлень. Це відео має пояснити вам основне використання.


2
Будь ласка, майте на увазі, що, хоча це вміло зазначено на сайті " Встановити безкоштовно ", це додатки з одним обмеженим безкоштовним планом з наступними 3 платними . Посилання на сторінку з ціноутворенням можна знайти лише внизу сайту.
marikamitsos
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.