1

Тема: JS/VBS: Открытие файла в OpenOffice

Добрый день!

Помогите, пожалуйста, написать скрипт, который:
1) Вызывает диалоговое окно OpenOffice "Открыть" (Папка по умолчанию и "Имя файла" должны быть заполнены)
2) Открывает (в фоне) выбранный документ
3) Копирует в переменную "Text" весь текст внутри документа
4) Закрывает открытый документ

по аналогии с JScript: Открытие файла MS Word

2 (изменено: smaharbA, 2011-07-27 20:31:56)

Re: JS/VBS: Открытие файла в OpenOffice

Классический вопрос - "Зачем ?"(с)

dim s(1), f, a(1)
set sm=CreateObject("com.sun.star.ServiceManager")
set e=sm.createInstance("com.sun.star.ucb.FileContentProvider")
mydocs=CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
set fp = sm.createInstance("com.sun.star.ui.dialogs.FilePicker")

fp.Initialize(Array(9))

fp.setDisplayDirectory(e.getFileURLFromSystemPath("",mydocs))

fp.setDefaultName("Фигня какая то тут.odt") 'имя файла

ext="*.txt; *.doc; *.odt"

set s(0)=sm.Bridge_GetStruct("com.sun.star.beans.StringPair")
s(0).First="Текстовый документ" 'локализованый заголовок
s(0).Second=ext
fp.appendFilterGroup "Text Files", s

'fp.appendFilter "Text Files", ext - можно и так, просче

If fp.Execute()=0 Then WScript.Quit
f=fp.getFiles()(0)
fp.Dispose()

msgbox e.getSystemPathFromFileURL(f) 'позырим чо открываем


set a(0)=sm.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
a(0).Name="Hidden"
a(0).Value=false 'чтобы скрыто true

set desk=sm.createInstance("com.sun.star.frame.Desktop")
set doc = desk.LoadComponentFromURL(f, "_blank", 0, a)
txt=doc.getText().getString()
doc.setModified(False)
doc.Close(true)
msgbox txt

Да еще - getString() может обработать только 64К символов, лучше обойти структуру и разобрать объекты

Я конечно далек от мысли... (с)

3

Re: JS/VBS: Открытие файла в OpenOffice

Sun синтаксис придумали...
названия экземпляров как вспоминать ?  - со словарём или записной книжкой ?

"com.sun.star.ui.dialogs.FilePicker","com.sun.star.beans.StringPair","com.sun.star.ucb.FileContentProvider"

Времени не хватает... :-(

4 (изменено: smaharbA, 2011-07-27 20:40:55)

Re: JS/VBS: Открытие файла в OpenOffice

Да, синтаксис вообще ужасен, и объектная модель ну сильно раздражает
а так тут http://api.openoffice.org
ну там еще книжка питоньяка (есть и на русском)

+ справко во всех поделках ооо и иже с ним вообще мертвая

Я конечно далек от мысли... (с)

5

Re: JS/VBS: Открытие файла в OpenOffice

Может быть стоит отправить пример в Коллекцию?

6

Re: JS/VBS: Открытие файла в OpenOffice

ОС Windows XP Pro SP2
Windows Script Host Version 5.6
OpenOffice 3.3.0 от "Инфра-Ресурс"

Скрипт, представленный smaharbA у меня вызывает ошибку на строке

f=fp.getFiles()(0)

Microsoft VBScript runtime error: Variable uses an Automation type not supported in VBScript: 'fp.getFiles()(...)'

если меняю на

f=fp.Files(0)

то ошибку получаю здесь

msgbox e.getSystemPathFromFileURL(f) 'позырим чо открываем

[automation bridge] : InterfaceOleWrapper_Impl::Invoke :[automation bridge]UnoConversionUtilities<T>::variantToAny
Cannot convert the value of vartype :"8204"  to the expected UNO type of type class: 12

Аналогичный код в среде OpenOffice.org Basic отрабатывает "на ура", как при использовании метода .GetFiles(),
так и при непосредственном обращении к элементам коллекции(?) .Files.

Подскажите, в какую сторону "рыть".

С уважением, CAMITHbIK

7

Re: JS/VBS: Открытие файла в OpenOffice

on error resume next
f=fp.getFiles()(0)
if err.Number <> 0 then f=fp.Files(0)(0)
on error goto 0
Я конечно далек от мысли... (с)

8

Re: JS/VBS: Открытие файла в OpenOffice

smaharbA,
спасибо за оперативный ответ. Вариант с f=fp.Files(0)(0) пробовал, не спасло.

Сейчас гоняю Ваш исходный скрипт в более старой версии OpennOffice - 3.0.0 от того-же "Инфра-Ресурс"
Ошибку получаю уже в другом месте

fp.appendFilterGroup "Text Files", s

* барабанная дробь *

[automation bridge] : InterfaceOleWrapper_Impl::Invoke :
[automation bridge]UnoConversionUtilities<T>::createOleObjectWrapper
The VARIANT does not contain an object type!

И это после нормального(?) создания, инициализации и изменения двух свойств (начальная папка, им файла по-умолчанию) объекта.
Закомментировал эту строку - и наконец-то лицезрел путь выбранного файла в msgbox.

Но рано радовался, - следующая ошибка не заставила себя ждать

set doc = desk.LoadComponentFromURL(f, "_blank", 0, a)

Ошибка та-же, что и вышеприведенная в этом посте.

Если ещё вчера я думал, что хоть что-то понимаю в UNO Objects, то сегодня эта иллюзия рассеялась.
* ушёл медитировать над "OOo API Guide" *

С уважением, CAMITHbIK

9

Re: JS/VBS: Открытие файла в OpenOffice

Методом научного тыка определил, что в строке

fp.appendFilterGroup "Text Files", s

ошибка была связана не с fr, а с передаваемым параметром s

Изменил объявление переменной, инициализировал ёё перед присвоением ссылки на экземпляр класса.

dim s ' было dim s(1)
' {skipped}
s= array(null): set s(0)=sm.Bridge_GetStruct("com.sun.star.beans.StringPair")

Аналогичным робразом поступил с переменной a.
И было мне счастье.

smaharbA, Вы свой скрипт в каком окружении запускали ?

С уважением, CAMITHbIK

10

Re: JS/VBS: Открытие файла в OpenOffice

ос 2003, XP
скриптовая машина версии 5.6

Я конечно далек от мысли... (с)