Как сделать импорт рендж

Обновлено: 04.07.2024

Я работаю над проектом, в котором я пытаюсь получить лист для автоматического обновления информации с нового листа каждый день, чтобы сформировать еженедельный агрегат данных. Новый лист будет помещен в ту же папку и каждый день будет получать одно и то же имя. В настоящее время процесс работает, когда я помещаю новый лист в папку, он получает идентификатор ключа и импортирует новые уникальные данные из указанного листа.

Я почти закончил, и моя последняя проблема - сделать так, чтобы код не перезаписывал данные предыдущего дня. Мне нужно сделать так, чтобы код считывал лист, видел активный диапазон (сколько там строк), а затем помещал функцию importrange в ячейку непосредственно под последней записью на листе (т.е. если данные предыдущего дня заканчиваются на строка 166, функция диапазона импорта на сегодняшний день идет на A: 167).

Как лучше всего выполнять эту функцию диапазона каждый день? Я знаю, что выполнение этого, вероятно, будет таким же простым, как добавление +1 к переменной для диапазона импорта, но как я могу выполнить эту функцию чтения диапазона? Подойдет ли getRange или есть что-то более конкретное, связанное с номером строки?

Я испробовал широкий спектр решений, но все они, похоже, работают только временно, после чего при обновлении запроса ему иногда удается получить данные, размер диапазона не является проблемой, поскольку проблема возникает при большом импорте, а также при импорте. это только 1 клетка.

до сих пор лучшее решение, которое у меня есть, это удаление = из формулы, а затем добавление его обратно, чтобы заставить данные загружаться снова, однако это длится всего около 30 минут, прежде чем importrange возвращается к выдаче той же ошибки.

формулы ничего необычного

Я пробовал варианты заглавных букв для диапазонов, а также добавление ошибки, чтобы попытаться загрузить вариант формулы

но, кажется, ничего не работает, или когда это работает, решение, похоже, не прилипает.

любая помощь или понимание того, что может быть причиной этой проблемы, будет принята с благодарностью.

Эта проблема была ненастоящей на некоторое время, просто случается так часто в случайные моменты, ничего не меняется. Я также не знаю, как воспроизвести проблему, но я дам подробное объяснение того, что происходит.

Обычно функция importRange работает просто отлично и выглядит примерно так:

enter image description here

Правильно напечатан текст таблицы. Я использовал эту стратегию в Google Spreadsheets некоторое время.

Каждый раз, как правило, Google Spreadsheets, кажется, ломается, или, по крайней мере, функция importRange делает. и производит что-то вроде следующего:

enter image description here

Google, казалось, время от времени замерзает, а это происходит. Я попытался настроить параметры importRange на! X1: X,! X2: X5, изменив заголовок импортируемого листа и т.д.

Кто-нибудь знает потенциальную причину этого срыва? Иногда он исправляет себя, иногда это не так. Это случается случайным образом, и только для некоторых электронных таблиц (у меня есть набор из 8 или около того, что все используют importRange , и одновременно не более 2). Поэтому я честно не знаю, откуда это происходит.

Боковое примечание. Google в целом сегодня немного не отвечает на запросы всех своих услуг - мой почтовый сервис в App Engine для Google Apps снизился примерно на полчаса. Может ли ограничение ресурсов/сетевых злоумышленников вызывать подобное поведение в таблицах?

ОТВЕТЫ

Ответ 1

Это немного поздно, но я нашел его в поиске, чтобы он мог помочь кому-то другому - попробуйте что-то вроде этого:

В принципе, идея состоит в том, чтобы заставить Google повторно использовать варианты исходного адреса (буквы в верхнем/нижнем регистре).

Ответ 2

Проблемы с функцией IMPORTRANGE() были в некотором роде проблемой. За эти годы появилось несколько ошибок, и Google решил найти стабильное решение, поэтому оно работает так, как было разработано.

До тех пор это может помочь вам:

Вместо того, чтобы редактировать ячейку, создавая новую электронную таблицу или делать что-либо еще, чтобы перезагрузить страницу (почти как играть в лотерею), вы можете заставить листы Google автоматически перезагружать функцию автоматически, когда она не загружается:

Оберните функцию IMPORTRANGE(), которая вызывает проблемы с функцией IFERROR(). Таким образом, лист пытается импортировать, и только если он терпит неудачу, он повторяет попытку. Функция может вставляться в несколько попыток подряд.

Вы можете добавить именованные диапазоны к исходным данным (щелкните правой кнопкой мыши-source > define-named-range) для облегчения. Например, вы можете создать 3 разных именованных диапазона для диапазона "J: J". Назовите их "J", "Ja" и "Jay", затем вы вызываете свою функцию IFERROR() в листе, который хотите импортировать:

Эта формула будет пытаться импортировать и доставлять ее, если она преуспеет, и если она не будет автоматически повторять попытку в 5 раз подряд, что не гарантирует, что вы добьетесь успеха, но если у вас есть 50% шансов на успех, ваш импорт, вложенный 5 подряд, должен дать вам шанс 96%, что намного лучше. Мой личный опыт был в том, что он не сработал, так как я сделал гнездо IFERROR().

Надеюсь, что это поможет.

Ответ 3

У меня были подобные проблемы, и они были решены, НЕ используя публичные ссылки на электронные таблицы. Я заметил, что ссылки открыты для общего доступа и ссылки из адресной строки при открытии листа si.

Также я заметил некоторые трудности при открытии общих таблиц из других моих учетных записей Google. Мне пришлось повторно разрешить доступ к некоторым таблицам, которые я импортировал.

Извините за мой английский.

Ответ 4

Это действительно так, в моем случае просто Ctrl + X, ожидая секунды, а затем вставляя формулу назад, механизм Sheets повторно импортирует, а затем успешно импортирует. Если вы не можете выполнить эту процедуру вручную, вы должны использовать решение Tim.

Ответ 5

У меня была такая же проблема, и я нашел решение!

Уменьшите размер исходного файла

Чтобы уменьшить, разделить его и снова указать ссылку на импортный диапазон

Теперь вы сможете увидеть импортированный диапазон!

Если вы считаете, что это не так, шансы могут быть

Ваша ячейка занята, поэтому удалите все форматирование и очистите все ячейки перед импортом диапазона.

Все еще не работает? Пусть Бог поможет вам!

Ответ 6

Я попытался добавить:

Это не означает, что ошибка исчезает, но когда это происходит, вам просто нужно перезагрузить лист и подождать некоторое время, и пусть он сам обновится.

Это гораздо более практично, чем ручная замена большой буквы на маленькую.

Ответ 7

Вот простой обходной путь, который я нашел для этой ошибки:

Ответ 8

Я нашел это решение, отлично работает для меня:

В обеих электронных таблицах вставьте уравнение = now() в случайную ячейку, скажем, Z1. В обеих электронных таблицах вставьте функцию = importrange(), которая ссылается на функцию now другой электронной таблицы. Зайдите в настройки вашей таблицы и выберите пересчет на каждую минуту. Я пробовал множество других предложений, в том числе с помощью функции = now(), трюка now URL в этой теме или Apps Script для вставки произвольного текста через заданный интервал, но ничто не заставляло бы importrange обновляться, кроме ручного редактирования исходного кода. простынь.

Ответ 9

Ответ 10

Спасибо за все ваши советы. Действительно, замена букв в формуле, кажется, обходит эту проблему.

Это довольно старая проблема, которая все еще сохраняется. Почему Google не работает над ней?

Ответ 11

Похоже, что когда я вынимаю апостроф из заголовка исходного листа, проблема решена. Возможно, удаление любых символов, кроме цифр и букв, также является проблемой для вашей проблемы.

Я использую функцию importrange для импорта данных из одной книги Google sheet в другую. Кто-нибудь знает, можно ли импортировать и заполнять ячейку из ячейки книги Google sheet в ячейку excel с помощью функции импорта внешних данных или что-то вроде функции Google sheets importrange?

Если ваши файлы Excel находятся в вашем компьютере, кажется, ответ Rajesh S является лучшим. Но если ваши файлы находятся в облаке, вы можете использовать надстройки для Google листов, чтобы создать этот "живой поток" из Google листов в файлы Excel, даже если файлы закрыты.

вы можете использовать следующий код VBA для импорта Google листа в Excel.

R ange — это встроенная функция Python, которая возвращает итерируемый объект ( range object ), содержащий целые числа. С помощью функция range() можно сгенерировать последовательность чисел с определенным шагом — далее их можно легко перебирать с помощью цикла for .

В статье подробно рассказываю, как работает range() , чем отличается её реализация в Python 2 и Python 3, а также приведу практические примеры использования.

Синтаксис

Функцию range() можно использовать с одним или несколькими параметрами. В документации Pyton синтаксис выглядит следующим образом:

У функции 3 параметра:

  • start — начало последовательности [включительно] (не обязательный параметр, по умолчанию равен 0).
  • stop — задает точку остановки последовательности [значение не включено в последовательность] (обязательный параметр).
  • step — шаг последовательности (не обязательный параметр, по умолчанию равен 1).

Функция range() возвращает объект класса range :

☝️ При работе с range() важно помнить следующее:

  • Значение stop не входит в последовательность;
  • Все аргументы функции должны быть целыми числами (положительными или отрицательными);
  • При отрицательном шаге step нужно помнить, что значение start должно быть больше значения stop ;
  • Значение step не должно быть равно 0, иначе Python вызовет исключение " ValueError ".

📃 Более подробное описание функции можно посмотреть в официальной документации или через help("range") :

class range(object) | range(stop) -> range object | range(start, stop[, step]) -> range object | | Return an object that produces a sequence of integers from start (inclusive) | to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, . j-1. | start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3. | These are exactly the valid indices for a list of 4 elements. | When step is given, it specifies the increment (or decrement). | .

for i in range

Чаще всего range() используется в циклах for .

Основной кейс — выполнение цикла N-раз:

С помощью range() можно перебрать все значения в последовательности:

str = 'abcdef' for i in range(len(str)): print(str[i], end=' ') > a b c d e f

Или найти сумму первых 10-ти целых чисел.

А так можно перебрать значения последовательности через одного:

s = 'a1b2c3d4e5f6g7h8' for i in range(0, len(s), 2): print(s[i], end=' ') > a b c d e f g h

С помощью функции range() можно организовать сдвиг букв в слове на одну позицию и получить все возможные варианты такого сдвига:

s = 'питон' for i in range(len(s)): s = s[1:] + s[:1] print(s, end=' ') > итонп тонпи онпит нпито питон

Или получить все числа из заданного диапазона, делящиеся на любое нужное. Например, напечатаем таблицу умножения на 8:

count = 1 for i in range(8, 80, 8): print(count, ' * 8 = ', i) count += 1 > 1 * 8 = 8 > 2 * 8 = 16 > 3 * 8 = 24 > 4 * 8 = 32 > 5 * 8 = 40 > 6 * 8 = 48 > 7 * 8 = 56 > 8 * 8 = 64 > 9 * 8 = 72

Операции с range

Объект range поддерживает все операции, доступные последовательностям (кроме сложения и умножения):

Также объект range можно привести к списку ( list ) или множеству ( set ):

>>> numbers = range(13) >>> numbers_list = list(numbers) >>> type(numbers_list) >>> numbers_list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] >>> numbers_set = set(numbers) >>> type(numbers_set) >>> numbers_set

range и тип float

По умолчанию функция range() позволяет использовать только целые числа в качестве параметров. Если вы передадите значение с плавающей точкой, то Python вызовет исключение TypeError :

numbers = range(1.5) print(numbers) > Traceback (most recent call last): File "test.py", line 1, in numbers = range(1.5) TypeError: 'float' object cannot be interpreted as an integer

Чтобы сгенерировать последовательность из чисел с плавающей точкой, можно использовать стороннюю библиотеку NymPy (её нужно предварительно установить). В ней есть функция arange() , похожая на стандартную range() :

import numpy as np float_numbers = np.arange(4.6, 5.8, 0.3) print(float_numbers) > [4.6 4.9 5.2 5.5 5.8]

Если вы не хотите устанавливать библиотеку NymPy, то можно написать собственную функцию, например так:

def f_range(start, stop, step): while start [4.6, 4.9, 5.2, 5.5, 5.8]

Отличия между range в python2 и python3

Range() в Python2 и Python3 — это разные функции, которые отличаются друг от друга.

В Python2 функция range() возвращает объект list , то есть она выдает все числа сразу и помещает из в оперативную память. Поэтому, при генерации длинных последовательностей, увеличивается расход памяти и время работы.

Функция xrange() в Python2 и range() в Python3 не генерируют вся последовательность чисел сразу, а выдают нужные значения по мере необходимости, при переходе к следующей итерации цикла.

Таким образом, xrange() используемая в Python2 и range() в Python3 являются аналогами.

Best Practices

range в обратном порядке (python reverse range)

Получить последовательность в обратном порядке можно с помощью отрицательного аргумента step :

Обратите внимание, что start > stop , и stop не входит в последовательность.

range включительно

step = 2 numbers = range(2, 10 + step, step) for i in numbers: print(i, end=' ') > 2 4 6 8 10

range до бесконечности

Так как у функции range() есть обязательный параметр stop , бесконечный цикл сделать не получится.

Но это можно сделать через itertools :

import itertools import time for i in itertools.count(): print(f"iter -> ") time.sleep(1) > iter -> 0 > iter -> 1 > iter -> 2 > .

Или через бесконечный цикл while :

import time i = 0 while True: print(f"iter -> ") i += 1 time.sleep(1) > iter -> 0 > iter -> 1 > iter -> 2 > .

range → в список (list) или множество (set)

С помощью range можно сгенерировать список ( list ):

Или сгенерировать множество ( set ):

Функция range() генерирует последовательность целых чисел и обычно используется для организации перебора в циклах for . При этом аргументами могут быть только целые числа, использование типов float, string и других недопустимо. Передаваемые значения могут быть как положительные, так и отрицательные, но step не может быть равен нулю.

Читайте также: