[oodisc] заполнить документ из внешнего файла макросом?

Wad V Mashckoff mashckoff на ukr.net
Пт Дек 3 18:24:45 MSK 2004


Mike Lykov wrote:

>Здравствуйте.
>
>Имеем текстовый документ  sxw. В нем несколько десятков полей, которые надо
>заполнить, допустим, из текстового файла с разделителями.Формат файла не
>принципиален, но что нибудь типа этого:
>
>Имя_поля1|Имя_поля2|Имя_поля3
>Значение1|Значение2|Значение3|
>
>
> Реально ли это сделать с помощью макроса?
>  
>
Да...
В конце-концов, исходные файлы -- CSV, как я понимаю...Их открыть не
проблема.
Нечто похожее я показывал на лекции про ООо.

'Author: Вадим Adiel Машков, adiel at ukr.net
'Modified By: 
'Собственно говоря, этот макрос все делает
Sub CopyPasteToTarget()

  Dim oDeskNew As Object
  Dim oSourceDoc As Object, oSourceSheet As Object, oSourceRange As Object
  Dim oTargetDoc As Object, oTargetSheet As Object, oTargetCell As Object
  Dim oDispatcher, octl as Object 

  Dim sUrl1 As String, sUrl2 As String
  ' Исходный макумент
  Dim tUrl As String
    ' Имя сводного документа

  Dim NoArgs()
  Dim Today As String
  Dim args (1) As new com.sun.star.beans.PropertyValue
 
 ' Пути файлов...
 tUrl = "file://~/Documents/macros/Svod.xls"
 ' Сюда мы запишем результат
 
 sUrl1 = "file://~/Documents/macros/table1.sxc"
 sUrl2 = "file://~/Documents/macros/table 2.xls"
 ' Кстати, имена с пробелами мы хорошо понимаем ;)


 oDeskNew = createUnoService("com.sun.star.frame.Desktop")

' Создаем пустышку... В нее мы _все_ запихнем
  oTargetDoc = Stardesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, NoArgs())
  oTargetSheet = oTargetDoc.getSheets.getByIndex(0)
' Установим курсор... типа фокус...  в начало документа
  oTargetCell = oTargetSheet.getCellByPosition(0,0)
  oTargetDoc.getCurrentController().Select(oTargetCell)
' Теперича мы можем в новый документ сливать чего душа желает...

  


 oSourceDoc= oDeskNew.loadComponentFromURL(sUrl1, "_blank", 0, NoArgs())
 ' _hidden выбрано, чтоб документ под  ногами не болтался

  octl = oSourcedoc.getCurrentController()
  oSourceframe = octl.getFrame()

' Выбираем первый лист (прибито гвоздями)
' Буде лист назван именем  -- спокойно возьмем лист по имени
  oSourceSheet= oSourceDoc.Sheets(0)
' Берем 
  oSourceRange = oSourceSheet.getCellRangeByPosition(0,0,1,3)
  ' выделение традиционное: горизонталь-вертикаль. A1:B4 -- не работает, и вроде и не должно :(
  
  ' create the DispatcherService
  oDispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  ' Выделили то, что надо...
  octl.Select(oSourceRange)
  ' ... и запихали в клипборд
  oDispatcher.executeDispatch(octl, ".uno:Copy", "", 0, NoArgs()) 
  
  'Ставим курсор куда надо...  
  oTargetCell = oTargetSheet.getCellByPosition(0,0)
  oTargetDoc.getCurrentController().Select(oTargetCell)
  ' вставили из клипборда в конечный документ
  oTargetframe = oTargetDoc.getCurrentController().getFrame()
  oDispatcher.executeDispatch(oTargetFrame, ".uno:Paste", "", 0, NoArgs())
  
  ' Закроем исходный  документ1 _после обработки
  oSourceDoc.dispose()



=========

Посмотрите еще сюда
http://openoffice.org.ua/modules.php?op=modload&name=News&file=article&sid=24&mode=thread&order=1&thold=0
Republic позволяет старые компьютерные отчеты (формально известные как
"ascii") пропарсить и втянуть в электронную таблицу OpenOffice.org
(http://OpenOffice.org).
Эти данные потом можно спокойно проанализировать.

Быть может, это уже почти готовое решение.
=================

Ежели чего -- пишите...

-- 

Wad Mashckoff, IT philosopher						(o_
ICQ 201205466   E-mail: adiel at nospam.kiev.ua    			//\
E4:85:AE:40:52:55:01:A8:8F:9F:62:85:AA:42:E1:55				V_/_
                                                        http://Linux.kiev.ua



Подробная информация о списке рассылки Oo-discuss