Как связать ячейку в таблицах Google с ячейкой в ​​другом документе?


178

У меня есть ежемесячная электронная таблица, основанная на данных за предыдущий месяц. Я хотел бы импортировать эти значения динамически, а не вырезать и вставить их. Это возможно? Как это сделать?


Между прочим, я знаю, что это возможно, поскольку я сделал это однажды, но я больше не могу найти информацию или лист, в котором я сделал это. Если я найду это, я опубликую обновление.
Джефф Йейтс

Ответы:


184

IMPORTRANGE() кажется, что функция, которую вы хотите.

Из списка функций электронных таблиц Google :

Google Spreadsheets позволяет вам ссылаться на другую рабочую книгу в электронной таблице, которую вы в настоящее время редактируете, с помощью функции ImportRange. ImportRange позволяет извлекать одно или несколько значений ячеек из одной электронной таблицы в другую. Чтобы создать собственные формулы ImportRange, введите = importRange (ключ таблицы, диапазон). Для языков, в которых запятая используется для десятичного разделения, используйте точку с запятой вместо запятой для разделения аргументов в формуле.

Spreadsheet-key - это STRING, значение ключа из URL-адреса электронной таблицы.

Range - это STRING, представляющая диапазон ячеек, которые вы хотите импортировать, при желании включая имя листа (по умолчанию первый лист). Вы также можете использовать имя диапазона, если хотите.

Учитывая, что два аргумента являются STRING, вам необходимо заключить их в кавычки или обратиться к ячейкам, в которых есть строковые значения.

Например:

= importrange ("abcd123abcd123", "sheet1! A1: C10") "abcd123abcd123" - это значение в атрибуте "key =" в URL целевой электронной таблицы, а "sheet1! A1: C10" - это диапазон, который требуется импортироваться

= importrange (A1, B1) Ячейка A1 содержит строку ABCD123ABCD123, а ячейка B1 содержит лист1! A1: C10

Примечание. Чтобы использовать ImportRange, необходимо добавить его в качестве средства просмотра или соавтора в электронную таблицу, из которой ImportRange извлекает данные. В противном случае вы получите эту ошибку: «#REF! Error: запрошенный ключ электронной таблицы, заголовок листа или диапазон ячеек не найден».

«ключ» - это, конечно, строка в URL для электронной таблицы, которая соответствует key=параметру.

Я только что проверил это, создав две таблицы. В ячейку А1 первой я положил строку. В ячейку A1 второй я положил, =importRange("tgR2P4UTz_KT0Lc270Ijb_A","A1")и она отображала строку из первой электронной таблицы. (Ваш ключ, очевидно, будет другим.)

(Формат функции может зависеть от вашей местности во Франции формула не действует с запятой, так что вам нужно заменить его с запятой:. =importRange("tgR2P4UTz_KT0Lc270Ijb_A";"A1"))

ПРИМЕЧАНИЯ:

  1. В настоящее время Google устанавливает жесткое ограничение в 50 "справочных формул кросс-книги" на электронную таблицу. Источник: Google Docs, Sheets и Slides ограничения по размеру . (ч / т Джей Джей Рорер )

  2. «Новая» электронная таблица Google (скоро станет стандартом) устраняет 50-кратный 50-кратный справочник по формулам книги ( служба поддержки Google ) (х / т Джейкоб Ян Туинстра )

  3. В «новых» Google Sheets вы также используете весь URL-адрес в качестве ключа ( поддержка Google ) (h / t  Punchlinern )


3
@Al: Да! Это оно! Благодарю.
Джефф Йейтс

+1 Вау! Я не осознавал, что была встроенная версия. Другой вариант - использовать скрипты Google Apps. Создайте функцию, которая использует SpreadsheetApp.openById ([ID]). GetRange (), и установите для нее локальный диапазон.
Эван Плейс

4
Возможно, стоит отметить, что вы будете ограничены 50 из них (на электронную таблицу?) (Жесткий лимит Google): support.google.com/drive/answer/37603?hl=en
JJ Rohrer

5
В новой электронной
таблице

5
Кроме того, в новых Google Sheets вы используете весь URL в качестве ключа. Кроме того, вам предлагается предоставить доступ к запрошенному листу при первом входе в функцию.
Punchlinern

29

К вашему сведению, если вы хотите сослаться на другой лист в этой другой электронной таблице, имя листа НЕ должно быть в кавычках:

использование

=importRange("tgR2P4UTz_KT0Lc270Ijb_A","Sheet Name!A1:A10")

вместо

=importRange("tgR2P4UTz_KT0Lc270Ijb_A","'Sheet Name'!A1:A10")


6
Благодарю. Вы должны добавить это как комментарий к другому ответу или даже просто отредактировать этот ответ.
Studgeek

10

В новом интерфейсе вы просто сможете ввести =ячейку, а затем просто перейти на другой лист и выбрать нужную ячейку. Если вы хотите сделать это вручную или используете старый интерфейс, вы можете просто указать =Sheet1!A1, где Sheet1находится имя листа и A1какая ячейка на этом листе вам нужна. Это идентично Microsoft Excel.


6
если в имени листа есть пробелы, используйте «Этот другой лист»! A1
akira

12
Как насчет совершенно другого документа, как я спросил в вопросе?
Джефф Йейтс

@jeff Извините; Вы не упомянули «документ» в теле, и почему-то, в моей голове, я подумал «лист». Насколько я знаю, вы не можете динамически ссылаться на другой документ . Но вы можете использовать несколько листов, а не несколько документов, после чего вы сможете сделать то, что я предложил. Именно так я управляю своими ежемесячными финансами именно по этой причине.
Бенджамин Поллак

Это нормально :) Я знаю, что есть способ сделать это, так как я сам это сделал, но я забыл и не могу найти лист, в котором я это сделал.
Джефф Йейтс

Это не отвечает на опубликованный вопрос - речь идет о других листах в том же документе.
Брендан

4

Я нашел этот синтаксис, используя Вставить -> Определить новый диапазон

ОБЛАСТЬ СПРАВОЧНИКА:

Целый столбец: «Электронная таблица с пробелами в имени»! A: A

Целый столбец B: «Электронная таблица с пробелами в имени»! B: B

и т.п.

Тогда вы можете использовать его как:

=COUNTIF('First Page'!B:B, "valueToMatch")

1
Это также возможно для ссылки вне таблицы?
Джейкоб Ян Туинстра

@JacobJanTuinstra Что вы имеете в виду «вне» таблицы?
Том Роггеро

6
Ну, IMPORTRANGEфункция может импортировать данные из другой таблицы. Задание диапазонов подразумевается (возможно) только в электронной таблице. Это то, что я имел в виду снаружи.
Джейкоб Ян Туинстра

Это не отвечает на поставленный вопрос - оно только описывает, как ссылаться на другой лист в том же документе.
Брендан

@brendan использовать, IMPORTRANGEкак сказал Джейкоб.
Том Роггеро

2

вот как я это сделал (переопределено 'importrange ()'):

  • откройте редактор скриптов («инструменты» -> «скрипты» -> «редактор скриптов»)
  • предоставьте такую ​​функцию (без каких-либо проверок, это должно быть улучшено, но вы получите общее представление):
function REMOTEDATA (inKey, inRange) {

  var outData;  
  var ss = SpreadsheetApp.openById (inKey);

  if (ss) {
     outData = ss.getRange (inRange) .getValues ​​();
  }

  вернуть outData;
}
  • используйте следующую формулу в своей таблице:
= SUM (REMOTEDATA («ключ», «SheetName! A1: A10»))

«ключ» - это ключ документа, его можно найти в параметре «ключ = xyz» URL-адреса документа.

документация по « службам электронных таблиц » содержит дополнительную информацию по этой теме.


4
В чем преимущество реализации этого самостоятельно, а не использования существующей функции?
Джефф Йейтс

1
@Jeff Yates: нет, я просто реализовал это, не зная importrange (). спортивное мастерство, ты знаешь? все на пути просто потому, что я могу :)
Акира

1
к сожалению, пользовательские функции электронных таблиц больше не могут открываться другими электронными таблицами, используя SpreadsheetApp.openById()или SpreadsheetApp.openByUrl()-> developers.google.com/apps-script/guides/sheets/…
Франческо Вадикамо,

-2

Я сделал это очень простым способом, используя Query, например, у меня есть 2 листа ABC и XYZ, и я хочу импортировать диапазон от A1 до C30 из Abc в XYZ, щелкните ячейку, в которой вы хотите, чтобы диапазон появился, и напишите это:

=QUERY(ABC!A1:C30)

Примечание. Если в имени вашего листа есть пробелы, то, конечно, вы пишете так:

=QUERY('ABC 1'!A1:C30)


7
ОП спросил, как импортировать ячейки из другого документа . Можно QUERYэто сделать?
Видар С. Рамдал

4
@ VidarS.Ramdal Может, но нужно, importrange("abcd123abcd123", "sheet1!A1:C10")например, =query(importrange("abcd123abcd123", "sheet1!A1:C10"));-)
Fuhrmanator
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.