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

#python #xlwings

#python #xlwings

Вопрос:

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

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

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

Я попробовал несколько идей. Первый вариант пытается использовать App.selection, который я нашел в документации xlwings версии 0.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
  

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

 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? Если кто-нибудь сможет пролить некоторый свет на это, я был бы очень признателен.

Спасибо!

Ответ №1:

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

 cellRange = wb.app.selection
rowNum = cellRange.row
colNum = cellRange.column
  

Комментарии:

1. Привет, Феликс — извините за медленный ответ — работа вчера была немного сумасшедшей! Большое спасибо, что показали мне правильный способ сделать это — я обновил свою функцию, и теперь она получает ссылку на ячейку, что является блестящим. Еще раз спасибо, Ричард.