Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

6 Март 2021, 17:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: вставить объект, содержащий, форматированный текст в закладку  (Прочитано 9514 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DrunkWolf
Участник
**
Offline Offline

Сообщений: 5


« Стартовое сообщение: 9 Август 2012, 11:20 »

Помогите разобраться. Пишу скрипт на VBS
Задача вставить объект, содержащий, форматированный текст из одного файла в закладку, находящуюся в другом файле, через OOo Writer.
Какой метод для этого использовать? insertTextContent, insertString, getString?
Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 568


WWW
« Ответ #1: 9 Август 2012, 11:32 »

Приведите пример вашего кода.

Записан
DrunkWolf
Участник
**
Offline Offline

Сообщений: 5


« Ответ #2: 9 Август 2012, 12:05 »

Код:
'
'Creates a sequence of com.sun.star.beans.PropertyValue s
'
 Function MakePropertyValue(cName, uValue)' As Object
Dim oStruct, oServiceManager 'as Object
    Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
    Set oStruct = oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
    oStruct.Name = cName
    oStruct.Value = uValue
    Set MakePropertyValue = oStruct
End Function

'Converts a Ms Windows local pathname in URL (RFC 1738)
'Todo : UNC pathnames, more character conversions
'
 Function ConvertToUrl(strFile) 'As String
    strFile = Replace(strFile, "\", "/")
    strFile = Replace(strFile, ":", "|")
    strFile = Replace(strFile, " ", "%20")
    strFile = "file:///" + strFile
    ConvertToUrl = strFile
End Function
'A simple shortcut to create a service
'
Public Function CreateUnoService(strServiceName)' As Object
Dim oServiceManager 'As Object
    Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
    Set CreateUnoService = oServiceManager.createInstance(strServiceName)
End Function

Function openDoc(sFile)
Rem
Rem Load an existing writer document, with opening parameters
Rem
  Dim oSM, ODesk 'as Object 'root object from OOo API
  Dim oDoc 'as Object       'The document to be opened
  Dim OpenPar(1) 'As Object 'a Visual Basic array, with 3 elements
'sFile ="C:\oo\11.doc"
sFileURL = ConvertToUrl(sFile)
'Instanciate OOo : the first line is always required from Visual Basic for OOo
  Set oSM = CreateObject("com.sun.star.ServiceManager")
  Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")

'We call the MakePropertyValue function, defined just before, to access the structure
  Set OpenPar(0) = MakePropertyValue("ReadOnly", False)
 ' Set OpenPar(1) = MakePropertyValue("Password", "secret")
  Set OpenPar(1) = MakePropertyValue("Hidden", False)

'Now we can call the OOo loadComponentFromURL method, giving it as
'fourth argument the result of our precedent MakePropertyValue call   
  Set oDoc = oDesk.loadComponentFromURL(sFileURL, "_blank", 0, OpenPar)
  set openDoc = oDoc
 
     
End Function
'''''''''''''''
 sFile ="C:\oo\11.doc"
 sFile2 ="C:\oo\22.doc"
 set oDoc = openDoc(sFile)  ' открываем файл в который вставить
 set oDoc2 = openDoc(sFile2) ' файл, содержащий текст вставки
Flag=True
 set TextPointer = oDoc.GetText
 set CursorPointer = TextPointer.CreateTextCursor
 set BookmarksSupplier=oDoc.getBookmarks
 set Bookmark=BookmarksSupplier.getByName("Zakl").getAnchor
 ' set hh =  TextPointer.getString
 Text = "hhhhhhhh"
 Bookmark.setString(Text)  ' работает

  TextPointer.insertString Bookmark, Text, false   '  работает   

Записан
DrunkWolf
Участник
**
Offline Offline

Сообщений: 5


« Ответ #3: 9 Август 2012, 12:06 »

Последние две функции вставляют обычный текст в виде строки. А мне, как я думаю, нужен объект с текстом.
Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 568


WWW
« Ответ #4: 9 Август 2012, 13:14 »

Вот пример на Python:
http://codesnippets.services.openoffice.org/Writer/Writer.CopyComponentsToNewDocument.snip
Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 568


WWW
« Ответ #5: 9 Август 2012, 13:28 »

Идея этого макроса - воспользоваться буфером обмена офиса
Записан
DrunkWolf
Участник
**
Offline Offline

Сообщений: 5


« Ответ #6: 9 Август 2012, 17:27 »

Очень тяжело понять этот код. Может есть какая-то функция в самом OOo? insertTextContent например?
Записан
Hasim
Форумчанин
***
Offline Offline

Сообщений: 754

Woe from wit


« Ответ #7: 9 Август 2012, 17:47 »

Очень тяжело понять этот код.
Идея кода проста до идиотизма.
Copy - Paste
Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 568


WWW
« Ответ #8: 9 Август 2012, 23:08 »

Вот пример на StarBasic
(как это работает на VBS посмотрю попозже)

Код:
sub Macro2
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DeSelect", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoDownSel", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoDownSel", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:goDown", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:goDown", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:InsertPara", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:InsertPara", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Paste", "", 0, Array())


end sub

http://wiki.services.openoffice.org/wiki/Framework/Article/OpenOffice.org_3.x_Commands    - список uno команд
(т.е. команд вида  dispatcher.executeDispatch(document, ".uno:User_uno_Command", "", 0, Array())    )
Записан
DrunkWolf
Участник
**
Offline Offline

Сообщений: 5


« Ответ #9: 10 Август 2012, 14:35 »

Да так работает, но мне то ведь нужно вставить именно в закладку, а не просто скопировать текст.
« Последнее редактирование: 10 Август 2012, 15:00 от DrunkWolf » Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 568


WWW
« Ответ #10: 12 Август 2012, 22:36 »

Ещё один пример на StarBasic
Этот код просматривает стили документа в текущем параграфе, размер шрифта и название шрифта.
Выводит это на экран. Увеличивает размер шрифта на 1. И дополняет текст строкой "+новый текст"

Код:
Sub PrintAllParagraphStyles
  Dim s As String
  Dim vCurCursor As Variant
  Dim vText As Variant
  Dim sCurStyle As String


  vText = ThisComponent.Text
  vCurCursor = vText.CreateTextCursor()
  vCurCursor.GoToStart(False)
  Do
    If NOT vCurCursor.gotoEndOfParagraph( True ) Then Exit Do

    sCurStyle = vCurCursor.ParaStyleName
    CharHeight = vCurCursor.GetPropertyValue("CharHeight")
    CharFontName = vCurCursor.GetPropertyValue("CharFontName")
    s = s & """" & sCurStyle & """" & "  "  & """" &  CharHeight & """" &  "  "  & """" &  CharFontName & """" &CHR$(10)
   
     vCurCursor.SetPropertyValue("CharHeight", CharHeight+1)
     vCurCursor.SetPropertyValue("CharFontName", "Arial")
     Rem Вставить текст
     vText.InsertString(vCurCursor, "+новый текст", FALSE)
     Rem Вставить символ завершения строки
     vText.InsertControlCharacter(vCurCursor, 0, FALSE)
 
  Loop Until NOT vCurCursor.gotoNextParagraph( False )
  MsgBox s, 0, "Styles in Document"
Записан
Yakov
Администратор
**
Offline Offline

Сообщений: 2 568


WWW
« Ответ #11: 13 Август 2012, 07:53 »

А вот пример на VBS
Код:
'
'Creates a sequence of com.sun.star.beans.PropertyValue s
'
 Function MakePropertyValue(cName, uValue)' As Object
Dim oStruct, oServiceManager 'as Object
    Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
    Set oStruct = oServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
    oStruct.Name = cName
    oStruct.Value = uValue
    Set MakePropertyValue = oStruct
End Function

'Converts a Ms Windows local pathname in URL (RFC 1738)
'Todo : UNC pathnames, more character conversions
'
 Function ConvertToUrl(strFile) 'As String
    strFile = Replace(strFile, "\", "/")
    strFile = Replace(strFile, ":", "|")
    strFile = Replace(strFile, " ", "%20")
    strFile = "file:///" + strFile
    ConvertToUrl = strFile
End Function
'A simple shortcut to create a service
'
Public Function CreateUnoService(strServiceName)' As Object
Dim oServiceManager 'As Object
    Set oServiceManager = CreateObject("com.sun.star.ServiceManager")
    Set CreateUnoService = oServiceManager.createInstance(strServiceName)
End Function

Function openDoc(sFile)
Rem
Rem Load an existing writer document, with opening parameters
Rem
  Dim oSM, ODesk 'as Object 'root object from OOo API
  Dim oDoc 'as Object       'The document to be opened
  Dim OpenPar(1) 'As Object 'a Visual Basic array, with 3 elements
'sFile ="C:\oo\11.doc"
sFileURL = ConvertToUrl(sFile)
'Instanciate OOo : the first line is always required from Visual Basic for OOo
  Set oSM = CreateObject("com.sun.star.ServiceManager")
  Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")

'We call the MakePropertyValue function, defined just before, to access the structure
  Set OpenPar(0) = MakePropertyValue("ReadOnly", False)
 ' Set OpenPar(1) = MakePropertyValue("Password", "secret")
  Set OpenPar(1) = MakePropertyValue("Hidden", False)

'Now we can call the OOo loadComponentFromURL method, giving it as
'fourth argument the result of our precedent MakePropertyValue call   
  Set oDoc = oDesk.loadComponentFromURL(sFileURL, "_blank", 0, OpenPar)
  set openDoc = oDoc
 
     
End Function
'''''''''''''''
 sFile ="C:\oo\11.doc"
 sFile2 ="C:\oo\22.doc"
 set oDoc = openDoc(sFile)  ' открываем файл в который вставить
 set oDoc2 = openDoc(sFile2) ' файл, содержащий текст вставки
Flag=True
 set TextPointer = oDoc.GetText

 set BookmarksSupplier=oDoc.getBookmarks
 set Bookmark=BookmarksSupplier.getByName("Zakl").getAnchor
 set CursorPointer = Bookmark.CreateTextCursor

 ' set hh =  TextPointer.getString
 Text = "hhhhhhhh"
' Bookmark.setString(Text)  ' работает


   CursorPointer.SetPropertyValue "CharHeight", 22
   CursorPointer.SetPropertyValue "CharFontName", "Arial"

  TextPointer.insertString CursorPointer, Text, false   '  работает
Для решения задачи останется только CursorPointer установить на Bookmark
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!