Как передать параметры при получении свойства Range.Address в Excel на Python?

Автор Вират Лакх, 08.11.20, 13:46:48

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Вират Лакх

https://docs.microsoft.com/ru-ru/office/vba/api/excel.range.address
Вот тут написано, что свойство можно получить, указав параметры RowAbsolute и другие.
Но питон сразу выдает ответ в виде $A$1 и не хочет видеть скобки после sheet.Cells(1, 1).Address
Получив скобки, он на строковый тип говорит, что object is not callable.
Как указать эти параметры при получении свойства?

Vi2

Я думаю, что стоит специфицировать метод явно. Я не совсем знаком с Питоном, но похоже, что так:
sheet.Cells.Item(1, 1).Address(тутпараметывызова)

Worksheet.Cells property
Because the default member of Range forwards calls with parameters to the Item property, you can specify the row and column index immediately after the Cells keyword instead of an explicit call to Item.

p3452

Цитата: Вират Лакх от 08.11.20, 13:46:48Как указать эти параметры при получении свойства?

На C# работает в таком виде:
...sheet.Cells[1, 1]...
или так
...sheet.Cells["1", "А"]...

Вират Лакх

Вопрос не в том, как получить ячейку, а в том, как получить свойство с параметрами: Address(тутпараметывызова)

p3452

Цитата: Вират Лакх от 07.12.20, 05:25:57Вопрос не в том, как получить ячейку, а в том, как получить свойство с параметрами: Address(тутпараметывызова)
А у "Свойства" могут быть "Параметры"?
[DispId(236)]
string Address {
[DispId(236)]
[MethodImpl(MethodImplOptions.PreserveSig | MethodImplOptions.InternalCall)]
[return: MarshalAs(UnmanagedType.BStr)]
get;
}

Вират Лакх

Из описания по ссылке из первого сообщения следует, что параметры могут быть. По крайней мере на VBA.

p3452

Цитата: Вират Лакх от 07.12.20, 14:37:41...По крайней мере на VBA.
Меняйте способ подключения, библиотеку...
Сам факт того, что "скобка" не принимается говорит об отсутствии параметров. 

Kaimen

from win32com.client import Dispatch, gencache, constants

app = gencache.EnsureDispatch("Excel.Application")
ws = app.ActiveWorkbook.Sheets(1)
c = ws.Cells(1, 1)
# GetAddress(RowAbsolute, ColumnAbsolute, ReferenceStyle=1, External, RelativeTo)
print(c.GetAddress())
print(c.GetAddress(0))
print(c.GetAddress(1, 1, constants.xlR1C1))
print(c.GetAddress(0, 0, constants.xlR1C1, 0, ws.Cells(3, 3)))

Вират Лакх

Kaimen, спасибо. Этим сообщением Вы меня научили не только получать адрес ячейки :)