Следуя различным руководствам, я установил APSO и успешно создал оболочку Basic, которая вызывает скрипт Python.
Это его подпись:
Код: Выделить всё
Function python(functionName As String, ParamArray params) As VariantКод: Выделить всё
functionNameКод: Выделить всё
params(ПРИМЕЧАНИЕ. Поскольку метод Python варьируется в зависимости от имени функции, массив params не имеет предопределенного размера и типов элементов)< /p>
Это работает очень хорошо, за исключением случаев, когда параметр является диапазоном ячеек. В этом случае диапазон ячеек передается в Python как кортеж, без информации о ссылках на строки и столбцы.
Почему необходимо конвертировать диапазон ячеек в кортеж, а не в объект CellRange ?
Есть ли способ определить типы элементов params, чтобы можно было по-разному управлять диапазонами ячеек? (Я пытался использовать TypeName(params(0)), но, похоже, он работает только с базовыми типами, такими как «Строки», если параметр представляет собой диапазон ячеек, он возвращает Variant()
РЕДАКТИРОВАТЬ 1
Немного подробнее, поскольку мой вопрос был недостаточно ясенВот полная оболочка, которую я написал на базовом языке. :
Код: Выделить всё
REM ***** BASIC *****
option compatible
Function python(functionName As String, ParamArray params) As Variant
Dim scriptPro As Object, myScript As Object
scriptPro = ThisComponent.getScriptProvider()
scriptPath = "vnd.sun.star.script:development.py$" & functionName & "?language=Python&location=user"
On Error GoTo ErrorHandler
myScript = scriptPro.getScript(scriptPath)
Dim outResult As Variant
outResult = myScript.invoke(params, Array(), Array())
python = outResult(0)
Exit Function
ErrorHandler:
python = CVErr(xlErrName)
End Function
Код: Выделить всё
=python("custom_concatenate", "Hello ", "world") или
Код: Выделить всё
=python("sum_all", A1:A10) Теперь представьте, что я хочу создать метод, который принимает диапазон и возвращает сумму номера его первой и последней строки. номер.
Например
Код: Выделить всё
=python("sum_row_numbers", B13:C24)Это сигнатура метода Python:
Код: Выделить всё
def sum_row_numbers(range):Проблема в том, что параметр диапазона, передаваемый оболочкой, представляет собой всего лишь кортеж кортежей, и на данный момент любая ссылка на строки и столбцы неизвестна.
p>
Как я могу убедиться, что оболочка передает всю информацию о диапазоне (включая ссылки на ячейки) методу Python?
Подробнее здесь: https://stackoverflow.com/questions/791 ... on-scripts
Мобильная версия