2015-02-22 6 views
0

У меня есть большой набор данных, к которому у меня нет прямого доступа, и пытаюсь преобразовать заголовки данных в заголовки столбцов с помощью Python, а затем вернуть их обратно в Excel.вывод xlwings на итеративный диапазон ячеек

Я создал функцию, чтобы сделать это, и она работает, но я попал в ловушку. То, что я хочу, чтобы Excel VBA выполнял, - это цикл по диапазону, и если значение ячейки соответствует критериям, вызовите функцию Python и верните результирующие элементы списка в столбцах, перемещающихся из исходной ячейки. Например:

A1 содержит строку форматирования, то функция возвращает B1, C1, D1, и так далее. Я могу только получить эту работу, если я жесткий код B1, C1, D1 и т.д.

Есть ли способ сделать это с помощью метода get_address() диапазона? Я думаю, что могу использовать метод offset(), но не уверен.

+0

Если вы правильно поняли, вы можете пропустить свой диапазон с помощью индексной нотации: 'Range ((i, j))'. Обратите внимание, что более эффективно читать во всем диапазоне в Python сразу, а затем выполнять всю логику и выписывать массив результатов сразу, а не перебирать каждую ячейку. –

+0

@FelixZumstein привет Феликс. Вероятно, вы правы, но я не знаю, как читать во всем диапазоне и обрабатывать его на Python и возвращать его в Excel. Я думал о том, чтобы сделать это сначала, но отправил его в CSV-файл, но не знал, как это сделать :) – nathanjw

ответ

0

Да, вы можете использовать метод смещения, и сделать что-то вроде ниже:

for x in range(1, 11): #loop through a range 
if Range('A' + str(x)).value == 5: #to match your own criterion 
    Range('A' + str(x)).offset(0, 1).value = ['apple', 'banana', 'pear'] #the returns of your own function 
+0

Спасибо @DanEng, который помог мне разобраться. Мой цикл теперь возвращает правильную информацию только по каждой строке, а не только по условию. Я пробовал вставлять код, но он сделал комментарий слишком большим. – nathanjw

0

Спасибо за вашу помощь. У меня есть это, чтобы работать сейчас, и я очень рад будущим возможностям для Python, xlwings и Excel.

Моя проблема была простой, как только я получил цикл по отсортированному диапазону (который случайно был импортирован как каждая строка на элемент, а не каждая ячейка). Я объявил свой список вне функции и поэтому не был сброшен каждый раз, когда выполнялось истинное условие. Было очень неприятно наблюдать за тем, как мои ячейки наполняются теми же ценностями раз за разом. Простой, как только вы знаете, как :)