#python #excel #generator
#python #excel #генератор
Вопрос:
Я хочу просмотреть большой список чисел в Excel, и мне нужно, чтобы программа была как можно более доступной для других людей.
Я хотел бы сохранить электронную таблицу только Excel (возможно, VBA), но есть ли эквивалент генератора Python или функций yield, доступных в Excel?
т. е.
gen = (x for x in range(10))
Комментарии:
1. Я серьезно сомневаюсь в этом. Я не видел генераторов за пределами python. В python 3
range
уже есть генератор, поэтому вам нужно только использоватьgen = range(10)
.2. Я видел генераторы и сопрограммы на других языках, но определенно не на VBA.
3. Спасибо @TammoHeeren, я на самом деле этого не знал, так что это бонусная находка! 😉
4. Пожалуйста, опишите, что вы хотите сделать с
gen
после ее создания.Excel
может обрабатывать функции массива, и поэтомуVBA
также может использовать вычисление.5. В целом, я беру данные с веб-сайта, на котором перечислены стандартные размеры компонентов, и сопоставляю их с регулярными приращениями размера компонентов, изготовленных на заказ. Я хочу перечислить каждую комбинацию и экспортировать ее в XML-файл для использования с другим программным обеспечением.
Ответ №1:
Как упоминалось в комментариях, было бы хорошо, если бы вы могли точно описать, что вы пытаетесь сделать в Excel
.
Excel
может выполнять формулы массива. В этих формулах массива мы можем использовать функцию ROW
or COLUMN
для получения массивов последовательных целых чисел.
Например:
{=SUM(ROW(1:10))}
введенная в виде формулы массива с помощью [Ctrl] [Shift] [Enter] вычислит сумму целых чисел от 1 до 10.
Чтобы ввести формулу массива, введите формулу в ячейку без фигурных скобок, а затем нажмите [Ctrl] [Shift] [Enter] для подтверждения. После этого фигурные скобки появятся автоматически.
Или с помощью VBA:
Sub test()
Dim gen As Variant
gen = [{0,1,2,3,4,5,6,7,8,9}]
' gen is now an Array Variant(1 to 10) containing integers 0 to 9
gen = [ROW(1:10)-1]
' gen is now an Array Variant(1 to 10, 1 to 1) containing integers 0 to 9
For Each i In gen
MsgBox i
Next
Erase gen ' free the memory used by gen
End Sub
будет выполняться цикл от 0 до 9.
Комментарии:
1. Извините, я думал, что ответил на этот комментарий. Я думаю, вы указали то, что мне нужно (у меня меньше опыта работы с VBA!). Работает ли это как список, где значения остаются в памяти, или значения удаляются после использования? Я рассматриваю возможность генерации значений с шагом 10 между
2. 0 и 300, прежде чем соединить их с другим списком, чтобы сгенерировать все возможные значения. Комбинаций будет много, поэтому, удаляя значения после использования, я должен сэкономить вычислительное время.
3.
gen
Находится в памяти до тех пор, пока вы не освободите память с помощьюErase gen
. Ваш ответ на мой комментарий был слишком широким. Пожалуйста, отредактируйте свой вопрос и опишите конкретную проблему. Кстати..: Цикл от 0 до 300 на шаге 10 звучит для меня как простойFor i = 0 to 300 Step 10 ... Next
.4. Спасибо за это. Извините, но я не могу вдаваться в подробности, кроме того, что у меня есть.
5. Как упоминалось ранее, я не просто перебираю эти приращения, я настроил таблицы запросов для извлечения оперативных данных с веб-сайтов, и их необходимо объединить. Существуют миллиарды комбинаций, поэтому я ищу способы их сокращения.