Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
94
Добавлен:
11.05.2015
Размер:
616.76 Кб
Скачать
        1. Полный пример

Цель данного примера - в цикле обработать три документа с заголовками one, two и three. Каждый документ открывается в текущем фрейме.

Листинг 5.8.2.1.1:Загрузить документ в существующий фрейм.

Sub open_new_doc

Dim mArgs(2) as New com.sun.star.beans.PropertyValue

Dim oDoc

Dim oFrame

Dim s As String

If (ThisComponent.isModified) Then

If (ThisComponent.hasLocation AND (Not ThisComponent.isReadOnly)) Then

ThisComponent.store()

Else

ThisComponent.setModified(False)

End If

End If

mArgs(0).Name = "ReadOnly"

mArgs(0).Value = True

mArgs(1).Name = "MacroExecutionMode"

mArgs(1).Value = 4

mArgs(2).Name = "AsTemplate"

mArgs(2).Value = FALSE

REM Choose the next document to load

If ThisComponent.hasLocation Then

s = ThisComponent.getURL()

If InStr(s, "one") <> 0 Then

s = "file:///C:/tmp/two.oxt"

ElseIf InStr(s, "two") <> 0 Then

s = "file:///C:/tmp/three.oxt"

Else

s = "file:///C:/tmp/one.oxt"

End If

Else

s = "file:///C:/tmp/one.oxt"

End If

REM Get the document's frame and then load the specified document

REM into the current frame!

oFrame = ThisComponent.getCurrentController().getFrame()

oDoc = oFrame.LoadComponentFromUrl(s, "", 2, mArgs())

If IsNull(oDoc) OR IsEmpty(oDoc) Then

Print "Unable to load " & s

End If

End Sub

      1. Сохранить документ с паролем

Чтобы сохранить документ с паролем, нужно задать атрибут “Password”.

Листинг 5.8.3.1:Сохранить документ с паролем.

Sub SaveDocumentWithPassword

Dim args(0) As New com.sun.star.beans.PropertyValue

Dim sURL$

args(0).Name ="Password"

args(0).Value = "test"

sURL=ConvertToURL("/andrew0/home/andy/test.odt")

ThisComponent.storeToURL(sURL, args())

End Sub

!!! В имени аргумента важен регистр, поэтому “password” не будет работать!!!

      1. Создание нового документа на основе шаблона

Чтобы создать новый документ на основе шаблона, используйте следующее:

Листинг 5.8.4.1:Создать новый документ на основе шаблона.

Sub NewDoc

Dim oDoc

Dim sPath$

Dim a(0) As New com.sun.star.beans.PropertyValue

a(0).Name = "AsTemplate"

a(0).Value = true

sPath$ = "file://~/Documents/DocTemplate.stw"

oDoc = StarDesktop.LoadComponentFromUrl(sPath$, "_blank" , 0, a())

End Sub

Если Вы хотите отредактировать шаблон в качестве шаблона (to edit the template as a template), установите значение параметра “AsTemplate” равным “False”.

Warning

Предупреждение

После загрузки документа как скрытого, Вам не следует делать этот документ видимым, потому что не все требуемые сервисы будут инициализированы. Это приведет к сбою OOo. Надеюсь, это будет исправлено в версии OOo 2.0 .

      1. Как разрешить макросы с помощью LoadComponentFromUrl

Если документ загружет с помощью макроса, содержащиеся в документе макросы будут запрещены к выполнению. Это требование безопасности. Начиная с версии 1.1, можно разрешить выполнение макросов, когда документ уже загружен. Установите свойство “MacroExecutionMode” равным 2 или 4 и макросы будут работать. Благодарности Mikhail Voitenko <Mikhail.Voitenko@Sun.COM> и рассылке:

http://www.openoffice.org/servlets/ReadMsg?msgId=782516&listName=dev

Краткое содержание ответа:

Свойство MacroExecutionMode объекта MediaDescriptor использует значения из констант com.sun.star.document.MacroExecMode. Если они не заданы, то поведением по умолчанию будет запрет выполнения макросов. Допустимые значения констант: NEVER_EXECUTE (никогда не выполнять), FROM_LIST (выполнять только из списка), ALWAYS_EXECUTE (всегда выполнять), USE_CONFIG (согласно заданной конфигурации), ALWAYS_EXECUTE_NO_WARN (всегда выполнять без предупреждений), USE_CONFIG_REJECT_CONFIRMATION (использовать конфигурацию, прерываясь в случае запроса подтверждения) и USE_CONFIG_APPROVE_CONFIRMATION (использовать конфигурацию, продолжая работу в случае запроса подтверждения).

Есть несколько подводных камней, требующих внимания. Если загружается документ "AsTemplate", то документ не открывается, а создается новый. Нужно обрабатывать события, связанные с созданием документа (“create document”), а не с открытием документа (“open document”). Чтобы все предусмотреть, обрабатывайте оба события.

Листинг 5.8.5.1: Примеры установки свойств описателя носителя данных.

Dim oProp(1) As New com.sun.star.beans.PropertyValue

oProp(0).Name="AsTemplate"

oProp(0).Value=True

oProp(1).Name="MacroExecutionMode"

oProp(1).Value=4

Этот пример будет работать для макросов, сконфигурированных для события "OnNew" (создание документа),если загружить шаблон (template) или загружить sxw (но я не проверял это). Если использовать событие "OnLoad" (открытие документа), то нужно установить свойство "AsTemplate" в значение False(или использовать файл sxw, так как по умолчанию это свойство равноFalse, но для stw значение по умолчаниюTrue).

В версии OOo 2.0 безопасность макросов будет расширена.

Соседние файлы в папке ooo