#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. Привет, Феликс — извините за медленный ответ — работа вчера была немного сумасшедшей! Большое спасибо, что показали мне правильный способ сделать это — я обновил свою функцию, и теперь она получает ссылку на ячейку, что является блестящим. Еще раз спасибо, Ричард.