Пардон за поздний ответ.
сразу прошу прощения, но полноценный пример я выложить пока не смогу (цейтнот - диссер

). Пример появится после 10 июня.
А пока просто направление, куда копать:
1) в файле uno_pascal_helper.pas из сырцов с сайта проекта есть функции
Код: Выделить всё
function ConstructMacroURL(ALibName, AModulName, AMacrosName, ALanguage: String): String;
function RunMacros( const ADocument: Variant; MacrosURL: String; MacrosInParams: Variant; var MacrosOutParams, MacrosOutIndexses: Variant): Variant;
Пользоваться примерно так (так я считываю разметку документа):
Код: Выделить всё
const
...
if not VarIsNull(fUNODocument) then begin
tmpName := ConstructMacroURL( 'OOReporterLib', 'OOReporter', 'GetFields', 'Basic' );
tmpInParams := VarArrayCreate([0,0],varVariant);
tmpInParams[0] := fUNODocument;
tmpFields := RunMacros( fUNODocument, tmpName, tmpInParams, tmpOutParams, tmpOutIndexes );
if ( (not VarIsNull(tmpFields)) and VarIsArray(tmpFields) ) then
for i := VarArrayLowBound(tmpFields, 1) to VarArrayHighBound(tmpFields, 1)
do AddField(VarToStr(tmpFields[i]));
end;
...
2) В ОО создаете свою библиотеку макросов и наполняете ее скриптами чтения / вставки
здесь к примеру вызывается такой скрипт
Код: Выделить всё
public FieldsNames() as String
function GetFields
GetStringFields(FieldsNames())
GetTablesFields(FieldsNames())
end function
sub GetStringFields(AFieldsArray() as String)
dim vEnum
dim vVal
vEnum = ThisComponent.GetTextFields().CreateEnumeration()
if not IsNull(vEnum) then
do while vEnum.HasMoreElements()
vVal = vEnum.NextElement()
if vVal.SupportsService("com.sun.star.text.TextField.Input") then
if LCase(Left(vVal.GetPropertyValue("Hint"), Len(OOReporterPathPref))) = LCase(OOReporterPathPref) then
AppendToArray(AFieldsArray(), vVal.GetPropertyValue("Hint"))
end if
end if
loop
end if
end sub
sub GetTablesFields(AFieldsArray() as String)
dim vEnum
dim vVal
vEnum = ThisComponent.GetTextFields().CreateEnumeration()
if not IsNull(vEnum) then
do while vEnum.HasMoreElements()
vVal = vEnum.NextElement()
if vVal.SupportsService("com.sun.star.text.TextField.Input") then
if LCase(Left(vVal.GetPropertyValue("Hint"), Len(OOReporterPathPref))) = LCase(OOReporterPathPref) then
AppendToArray(AFieldsArray(), vVal.GetPropertyValue("Hint"))
end if
end if
loop
end if
end sub
3) в общем все это работало так:
* кто-то (пользователь) размечает ОО документ - я писал (на старбасике) диалоговый мастер разметки;
* pas программа вызывает макросы получения - отдачи данных из документа
* ВСЕ
