Как из макроса открыть *.htm в calc, а не в writer [Решено]

Автор Rafik, 10 июля 2015, 09:53

0 Пользователи и 1 гость просматривают эту тему.

Rafik

Пытаюсь из макроса в calc открыть документ *.htm
Dim oProps(0) as New com.sun.star.beans.PropertyValue  
oProps(0).Name = "Hidden"
oProps(0).Value = False 'False - Видимый, True - Скрытый
Set oDesk = createUnoService("com.sun.star.frame.Desktop")
REM загрузим документ.
oRep = oDesk.LoadComponentFromUrl(sUrl, "_blank", 63, oProps())

Документ открывается в writer. Мне же необходимо открыть его в calc и получить к нему доступ. Может быть кто-то сталкивался с такой проблемой и нашел решение.
Если руками, через "Открыть", в calc попытаться открыть html документ, то он открывается в calc. А из макроса - почему-то в writer.

Yakov

А если макросом создать пустое окно calc, и уже в него прочитать документ с помощью LoadComponentFromUrl
http://www.openoffice.org/api/docs/common/ref/com/sun/star/frame/XComponentLoader.html#loadComponentFromURL

Rafik

Не получилось oDoc = StarDesktop.loadComponentFromUrl("private:factory/scalc","_blank",0,dimArray())
oDc=oDoc.CurrentController.Frame
cDoc = oDc.Name
oRep = oDc.LoadComponentFromUrl(sUrl,cDoc, 63, oProps())
Создает пустой документ calc и замещает его документом writer, т.е. открывается опять-таки в writer.

rami

Выложите документ или его упрощённый вариант

JohnSUN

#4
Почти всё сделал правильно. Только не ткнул офис носом в формат файла...
Просто допиши установку еще одного параметра в oProps:
oProps(1).Name = "FilterName"
oProps(1).Value = "HTML (StarCalc)"
Ну и размер самого массива oProps увеличь...

PS. Имя фильтра может быть "calc_HTML_WebQuery" - смотри, какие фильтры у тебя реально есть и как они правильно называются
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Rafik

Цитата: JohnSUN от 10 июля 2015, 11:58
Почти всё сделал правильно. Только не ткнул офис носом в формат файла...
Просто допиши установку еще одного параметра в oProps:
oProps(1).Name = "FilterName"
oProps(1).Value = "HTML (StarCalc)"
Ну и размер самого массива oProps увеличь...

PS. Имя фильтра может быть "calc_HTML_WebQuery" - смотри, какие фильтры у тебя реально есть и как они правильно называются
Спасибо. Помогло. Dim oProps(1) as New com.sun.star.beans.PropertyValue 
oProps(0).Name = "Hidden"
oProps(0).Value = False 'False - Видимый, True - Скрытый
oProps(1).Name = "FilterName"
'oProps(1).Value = "HTML(StarCalc)" 'Открывает в writer
oProps(1).Value = "calc_HTML_WebQuery" ' Этот фильтр помог.
oDoc = StarDesktop.loadComponentFromUrl("private:factory/scalc","_blank",0,dimArray())
oDc=oDoc.CurrentController.Frame
cDoc = oDc.Name
oRep = oDc.LoadComponentFromUrl(sUrl,cDoc, 63, oProps())

JohnSUN

Цитата: Rafik от 10 июля 2015, 14:02

'oProps(1).Value = "HTML(StarCalc)" 'Открывает в writer
oProps(1).Value = "calc_HTML_WebQuery" ' Этот фильтр помог.

Имя фильтра нужно указывать точно - в твоём "HTML(StarCalc)" не хватает пробела перед скобкой
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Rafik

#7
Точно, пропустил пробел. Открылся в calc, но некорректно. Каждая строка таблицы смещена, относительной предыдущей на 1 ячейку вправо. Таблица открылась ступенькой, как-то так
!-------!----!------!----------!
          !-------!----!------!----------!
                     !-------!----!------!----------!
                                !-------!----!------!----------!
С фильтром calc_HTML_WebQuery документ открылся корректно.

Цитата: rami от 10 июля 2015, 11:50
Выложите документ или его упрощённый вариант
Во вложении один из документов этого формата.
-------------------------------------------------------------------------
Оказывается, можно даже проще Dim oProps(1) as New com.sun.star.beans.PropertyValue
oProps(0).Name = "Hidden"
oProps(0).Value = False 'False - Видимый, True - Скрытый
oProps(1).Name = "FilterName"
oProps(1).Value = "calc_HTML_WebQuery"
Set oDc = createUnoService("com.sun.star.frame.Desktop")
oRep = oDc.LoadComponentFromUrl(sUrl,"_blank", 63, oProps())
Вполне достаточно указать правильный фильтр и откроется в нужном приложении.