Поиск диапазона активной / выбранной ячейки в Excel с использованием Python и xlwings

Я пытаюсь написать простую функцию на Python (с xlwings), которая считывает текущее «активное» значение ячейки в Excel, а затем записывает это значение ячейки в ячейку в следующем столбце вместе с активной ячейкой.

Если я укажу ячейку, используя абсолютную ссылку, например диапазон (3, 2), то у меня все в порядке. Однако мне кажется, что мне не удается найти значения строки и столбца какой-либо ячейки, выбранной после запуска функции.

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

Я пробовал несколько идей. Первый вариант - это попытка использовать App.selection, который я нашел в документации xlwings v0.10.0, но это, похоже, не возвращает ссылку на диапазон, которую можно использовать - я получаю сообщение об ошибке «Недопустимый параметр» при попытке получить строка из 'cellRange':

def refTest():

import xlwings as xw

wb = xw.Book.caller()

cellRange = xw.App.selection

rowNum = wb.sheets[0].range(cellRange).row
colNum = wb.sheets[0].range(cellRange).column

url = wb.sheets[0].range(rowNum, colNum).value

wb.sheets[0].range(rowNum, colNum + 1).value = url

Вторая идея заключалась в том, чтобы попытаться прочитать строку и столбец непосредственно из выделенной ячейки, но это дает мне ошибку «Объект свойства не имеет атрибута 'строка'»:

def refTest():

import xlwings as xw

wb = xw.Book.caller()

rowNum = xw.App.selection.row
colNum = xw.App.selection.column

url = wb.sheets[0].range(rowNum, colNum).value

wb.sheets[0].range(rowNum, colNum + 1).value = url

Можно ли передать диапазон активной / выбранной ячейки из Excel в Python с помощью xlwings? Если кто-то сможет пролить свет на это, я был бы очень признателен.

Спасибо!


person QBG    schedule 06.10.2016    source источник


Ответы (1)


Вы должны получить объект приложения из книги. Вы можете использовать xw.App напрямую, только если хотите создать экземпляр нового приложения. Кроме того, selection возвращает объект Range, поэтому сделайте следующее:

cellRange = wb.app.selection
rowNum = cellRange.row
colNum = cellRange.column
person Felix Zumstein    schedule 06.10.2016
comment
Привет, Феликс - извините за медленный ответ - вчера работа была немного сумасшедшей! Большое спасибо за то, что вы показали мне правильный способ сделать это - я обновил свою функцию, и теперь она получает ссылку на ячейку, что великолепно. Еще раз спасибо, Ричард. - person QBG; 08.10.2016