On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 295
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 24.07.07 22:50. Заголовок: Где можно взять примеры работы с OLE Open Office


Всем привет.
В связи с борьбой с пиратами нужно переползать на открытый ОФИС.
А как работать с этим OLE в хХарборе - я не знаю.
Может кто-нибудь поделиться примерами ?

Заранее благодарю.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 34 , стр: 1 2 All [только новые]


Администратор




Пост N: 555
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 25.07.07 07:44. Заголовок: Re:


Неоднократно уже давал этот пример в самых разных местах

Function BrwToZxc(oB)
// -------------------------------------------------------------
// Экспорт обьекта Browse в OpenOffice Calc
// -------------------------------------------------------------
Local oStarManager, oStarDesktop, oDocument, oSheet, oRange
Local nRow := 1, nCol, nCol2, nMerge, oCol, cGrid
Local acHead := {}, lFoot := .f., x, ser
Local nStyle

oStarManager := NewOle('com.sun.star.ServiceManager')

if oStarManager # nil

Begin sequence

oStarDesktop := oStarManager:createInstance('com.sun.star.frame.Desktop')
oDocument := oStarDesktop:LoadComponentFromURL(;
'private:factory/scalc',;
'_blank',;
0,;
{})

oSheet:=oDocument:Sheets:getByIndex(0)


nRow := 1
for nCol := 1 TO oB:ColCount
oCol := oB:GetColumn(nCol)
oRange := oSheet:getCellByPosition(nCol-1, nRow-1)
if ! Empty(oCol:oHeader:aTitles[nRow])
oRange:SetString(OemToAnsi(oCol:heading))
zcCellBorder(oRange, 9)
endif

next

if nRow > 0
zcCellBorder(oSheet:getCellRangeByPosition(0,0,oB:ColCount-1,0), 8)
zcCellBorder(oSheet:getCellRangeByPosition(0,nRow-1,oB:ColCount-1,nRow-1), 9)
oSheet:TitleRows:StartRow := 1
oSheet:TitleRows:EndRow := nRow
oSheet:PrintTitleRows := .t.
endif

oB:GoTop()
while ! oB:HitBottom
nRow++
for nCol := 1 to oB:ColCount
oCol := oB:GetColumn(nCol)
x := Eval(oCol:Block)
if ! Empty(x) .and. ValType(x) == 'C' .and. ! Empty(Val(StrTran(x, "'", '')))
x := Val(StrTran(x, "'", ''))
elseif ValType(x)=='D'
x := DTOC(x)
endif
if oCol:cargo # nil .and. len(oCol:cargo) >= 6 .and.;
ValType(oCol:cargo[6]) == 'C' .and. oCol:cargo[6] = '$'
oSheet:getCellByPosition(nCol-1, nRow-1):NumberFormat := 2
endif
if ! Empty(x)
if ValType(x) == 'C'
oSheet:getCellByPosition(nCol-1, nRow-1):SetString(x)
else
oSheet:getCellByPosition(nCol-1, nRow-1):SetValue(x)
endif
endif
next
oB:Down()
enddo

if oB:lFoots
nRow++
zcCellBorder(oSheet:getCellRangeByPosition(0,nRow-1,oB:ColCount-1,nRow-1), 8)
for nCol := 1 to oB:ColCount
if ! Empty(oB:GetColumn(nCol):footing)
x := oB:GetColumn(nCol):footing
if ! Empty(Val(StrTran(x, "'", '')))
x := Val(StrTran(x, "'", ''))
// elseif oB:GetColumn(nCol):nAjuste = 38
// x := Val(x)
endif
oSheet:getCellByPosition(nCol-1, nRow-1):SetString(x)
endif
next
endif

for nCol := 1 to oB:ColCount
oSheet:getColumns():getByIndex(nCol-1):OptimalWidth := .t.
next

end
endif
Return nil


Static func zcCellBorder(oRange, nNSEW)
Local oBorder := oRange:TableBorder
Local oLine

if nNSEW == 8
oLine := oBorder:TopLine
elseif nNSEW == 9
oLine := oBorder:BottomLine
elseif nNSEW == 10
oLine := oBorder:RightLine
elseif nNSEW == 7
oLine := oBorder:LeftLine
endif
oLine:OuterLineWidth := 10
oLine:InnerLineWidth := 0

if nNSEW == 8
oBorder:TopLine := oLine
elseif nNSEW == 9
oBorder:BottomLine := oLine
elseif nNSEW == 10
oBorder:RightLine := oLine
elseif nNSEW == 7
oBorder:LeftLine := oLine
endif

oRange:TableBorder := oBorder
Return nil


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 557
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 25.07.07 08:50. Заголовок: Re:


Можно еще посмотреть архив форума

http://www.oooforum.org/forum/viewforum.phtml?f=9

Там есть масса примеров
Можно там задать свой вопрос

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 296
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.07.07 12:09. Заголовок: Re:


Паша, спасибо большое.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 558
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 25.07.07 12:26. Заголовок: Re:


Не заметил, еще нужна функция:

Static func NewOle(cServer)
Local oServer, hObj

Begin sequence
hObj := CreateOleObject( cServer )
if OleError() == 0
oServer := TOleAuto():new( hObj )
#ifdef __HARBOUR__
oServer:cClassName := cServer
#endif
endif
end
if oServer == nil
Alert('Ошибка инициализации OLE:' + cServer)
endif
Return oServer

если что-то выдираешь из своей библиотеки, обязательно попадется какая-то нестандартная функция

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 559
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 25.07.07 14:22. Заголовок: Re:


Вот сам наконец-то решил оседлать OO-writer, и еще маленький примерчик

Задача: открыть документ и на место закладки вставить значение

func OOWriter(cFile, cBookmark, cValue)
Local oStarManager, oStarDesktop, oDocument
Local oBookmarks, oBookmark

cFile := StrTran(cFile, "\", "/")
cFile := StrTran(cFile, " ", "%20")

cFile := "file:///" + cFile

oStarManager := NewOle('com.sun.star.ServiceManager')

if oStarManager # nil

Begin sequence

oStarDesktop := oStarManager:createInstance('com.sun.star.frame.Desktop')
oDocument := oStarDesktop:LoadComponentFromURL(;
cFile,'_blank', 0, {})

oBookmarks := oDocument:getBookmarks()

oBookmark := oBookmarks:GetByName(cBookmark)

oBookMark:getAnchor:setString(cValue)

retu nil


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник




Пост N: 297
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.07.07 21:25. Заголовок: Re:


Спасибо большое, Паша !!!
А можно ли одновременно установить OpenOffice и MsOffice ?
И как тогда это вместе будет работать ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 775
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 25.07.07 21:35. Заголовок: Re:


Andrey пишет:

 цитата:
А можно ли одновременно установить OpenOffice и MsOffice ?


Вот и пробни ;)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 298
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 25.07.07 22:20. Заголовок: Re:


Спасибо Дима за добрые пожелания...., а я то думал что сие мне делать не придется ....

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 560
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 26.07.07 12:20. Заголовок: Re:


конечно можно
я в своих программах в тулбаре помещаю 2 кнопки - экспорт в эксель и оо-калк
если соответствующий офис установлен, работает, ну а на нет суда нет

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 18
Зарегистрирован: 31.05.07
ссылка на сообщение  Отправлено: 30.07.08 15:37. Заголовок: Добрый день уважаемы..


Добрый день уважаемые!
А может кто нибудь подсказать, как узнать закончил SCalc печатать файл или нет?
Просто столкнулся с проблемой во время закрытия документа с параметрами Hidden = .t., который был отправлен на печать.
Может у кого ссылка есть на мануал про эту тему или просто кусочек кода завалялся???
Помогите, плиз...

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 19
Зарегистрирован: 31.05.07
ссылка на сообщение  Отправлено: 01.08.08 09:00. Заголовок: Корректировочки


Ну соврал малость... свойства HIDDEN это было сделано на ООо Васике, в его родной среде

 цитата:
DIM oProperty AS NEW com.sun.star.beans.PropertyValue
SET oProperty.Name = "Hidden"
SET oProperty.Value = True


Так у меня и не получилось на xHb создать невидимый документ
Может у кого получилось? подскажите пожалуйста...

а по поводу предидущего сообщения нашел коечто http://www.oooforum.org/forum/viewtopic.phtml?t=4922 ...
по крайней мере узнал как это делать из-под ООо Васика.

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 954
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 01.08.08 12:34. Заголовок: spair2k пишет: Ну с..


spair2k пишет:

 цитата:
Ну соврал малость... свойства HIDDEN это было сделано на ООо Васике, в его родной среде

цитата:
DIM oProperty AS NEW com.sun.star.beans.PropertyValue
SET oProperty.Name = "Hidden"
SET oProperty.Value = True

Так у меня и не получилось на xHb создать невидимый документ
Может у кого получилось? подскажите пожалуйста...



oStarDesktop := oStarManager:createInstance('com.sun.star.frame.Desktop')

oProperty := oServiceMamager:bridge_GetStruct("com.sun.star.beans.PropertyValue")

oProperty:Name := "Hidden"
oProperty:Value := .T.

Return oStarDesktop:LoadComponentFromURL(;
cFile, '_blank', 0, {oProperty})


Спасибо: 1 
ПрофильЦитата Ответить
постоянный участник


Пост N: 146
Зарегистрирован: 13.10.05
ссылка на сообщение  Отправлено: 09.08.09 10:19. Заголовок: OpenOffice уже отк..


OpenOffice уже открывается.
А как открыть имеющийся файл или шаблон для заполнения?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1198
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 10.08.09 08:23. Заголовок: Vlad04 пишет: А как..


Vlad04 пишет:

 цитата:
А как открыть имеющийся файл или шаблон для заполнения?



oStarManager := TOleAuto():New('com.sun.star.ServiceManager')
oStarDesktop := oStarManager:createInstance('com.sun.star.frame.Desktop')

cFile := StrTran(cFile, "\", "/")
cFile := StrTran(cFile, " ", "%20")

cFile := "file:///" + cFile

aProps := {}

oStarDesktop:LoadComponentFromURL(;
cFile, '_blank', 0, aProps)


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 146
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 26.02.16 12:40. Заголовок: А как можно вставить..


А как можно вставить картинку в ячейку и отформатировать ячейку в размер картинки с привязкой картинки к ячейке?

Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 147
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 27.02.16 17:44. Заголовок: как вставить картинк..


как вставить картинку разобрался:

Скрытый текст


А вот отформатировать ее по размеру не получается. Может кто знает как можно это сделать?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 5489
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 27.02.16 18:07. Заголовок: MIKHAIL Возможно на..


MIKHAIL
Возможно надо погуглить


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 148
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 16.03.16 13:22. Заголовок: После работы с докум..


После работы с документом, закрываю его oDoc:close(.t.), но Open Office висит в памяти и блокирует временные фалы.
Если же закрывать приложение через oStarDesktop:terminate() то он закрывает и другие открытые документы (writer и calc ).
Как корректно закрывать процесс вызванный именно работой приложения и не затрагивать остальные открытые документы ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 179
Зарегистрирован: 21.04.13
ссылка на сообщение  Отправлено: 16.03.16 22:18. Заголовок: Документация...


Когда-то нашел для себя что-то полезное на сайте
https://wiki.openoffice.org/wiki/RU

Есть форум
http://www.forumooo.ru/

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 4958
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 03.06.16 18:27. Заголовок: Есть исходник 2007г...


Есть исходник 2007г. вызова Open Office на хХарборе. Работает до сих пор.
Перетащил на МиниГуи - вешает задачу намертво.

Подскажите пожалуйста, где ошибка ?
Скрытый текст


Спасибо: 0 
ПрофильЦитата Ответить





Пост N: 160
Зарегистрирован: 05.10.06
ссылка на сообщение  Отправлено: 18.08.16 17:52. Заголовок: Andrey пишет: "..


Andrey пишет:

 цитата:
"file://"


у меня так "file:///"

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3574
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.07.17 16:12. Заголовок: Хозяйке на заметку (..


Хозяйке на заметку (полезные рецепты):

В OpenOffice Calc пожно заполнять значения сразу диапазону ячеек, состоящему из нескольких строк.
Пример (несамодостаточный):
...
nRow := 10
nCol := 1
oRange := oSheet:getCellRangeByPosition(nCol-1, nRow-1, nCol+1, nRow)
oRange:setDataArray({{1,2,"Example"},{4,5,"fill"}})

Причем для OO не надо создавать двумерный массив, как это требует MS Excel, а достаточно передать одномерный массив Variant, каждый элемент которого является подмассовом, как это и делает harbour hbwin


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5969
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 18.07.18 18:14. Заголовок: Всем привет. Как зак..


Всем привет.
Как закрыть Эксель, знаю: oExcel:Application:Quit()
А как закрыть OO Calc незнаю.
Может кто подскажет ?

И ещё один вопрос по Калку.
Как окно с Калком вывести на передний план ?
В Экселе это просто:
 
hWnd := oExcel:hWnd // хендл окна Excel
ShowWindow( hWnd, 6 ) // MINIMIZE windows
ShowWindow( hWnd, 3 ) // MAXIMIZE windows
BringWindowToTop( hWnd ) // a window on the foreground



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3778
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 19.07.18 08:17. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как закрыть OO Calc незнаю.
Может кто подскажет ?



гугль сразу же подсказал:

oDoc:close(.t.)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5972
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.07.18 12:17. Заголовок: Pasha пишет: oDoc:c..


Pasha пишет:

 цитата:
oDoc:close(.t.)


СПАСИБО !

А как быть со вторым вопросом ?


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6876
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.07.18 13:32. Заголовок: Andrey пишет: А как..


Andrey пишет:

 цитата:
А как быть со вторым вопросом ?


Помнится ты с MS WORD тоже долго парился на эту тему , попробуй в нее заглянуть , мож поможет.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5973
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.07.18 14:25. Заголовок: Не, не то... Как пол..


Не, не то...
Как получить хендл окна с Калком ?
Для Экселя так:
hWnd := oExcel:hWnd             // хендл окна Excel 


Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 6877
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.07.18 14:30. Заголовок: Andrey Попробуй гуг..


Andrey
Попробуй гугл спросить
Вот тут обсуждали тему
тут

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 5974
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.07.18 17:32. Заголовок: Спасибо Дима. Код п..


Спасибо Дима.

Код перевести не смог. Сделал по старинке - перебором окон, как для Ворда.
Только срабатывает код ОДИН раз, если есть открытое окно уже с Калком,
то повторный перевод окна на передний план не срабатывает.
По ссылке что ты дал, там об этом и говорилось.

Кому интересно, вот код:
Скрытый текст



Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6728
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.06.20 12:23. Заголовок: Andrey пишет: Как п..


Andrey пишет:

 цитата:
Как получить хендл окна с Калком ?
Для Экселя так:

hWnd := oExcel:hWnd // хендл окна Excel



Возвращаюсь опять к этому вопросу !
Как получить хендл окна для OO Calc и для LibreOffice ?

Пример MiniGUI\SAMPLES\Advanced\Tsb_Export\demo.exe работает и под LibreOffice

Только там настроено переключение окна на OO Calc.
Как сделать универсальной функцию:
// окно Calc на передний план  
// срабатывает только если нет окна ОО Calc на рабочем столе компа.
STATIC FUNCTION SetCalcWindowToForeground(cFile)
LOCAL hWnd, cTitle

// поиск ХЕНДЛА открытого окна документа
cTitle := hb_FNameNameExt(cFile) + " - OpenOffice Calc"
hWnd := FindWindowEx(,,, cTitle )
IF hWnd == 0
MsgStop("Не нашёл окно: " + cTitle, "Error")
ENDIF

IF hWnd > 0
ShowWindow( hWnd, 6 ) // MINIMIZE windows
ShowWindow( hWnd, 3 ) // MAXIMIZE windows
BringWindowToTop( hWnd ) // A window on the foreground
ENDIF

RETURN NIL


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3268
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.06.20 12:49. Заголовок: Andrey пишет Как пол..


Andrey пишет
 цитата:
Как получить хендл окна для OO Calc и для LibreOffice ?


В hmg есть ф-я EnumWindows(), попробуй через нее определить
 
LOCAL ahWnd := EnumWindows()
FOR nI := 1 TO Len(ahWnd)
? nI, , ahWnd[ nI ], GetClassName(ahWnd[ nI ]), GetWindowText(ahWnd[ nI ])
NEXT
в списке найди ClassName и Text для нужных окон потом по ним получи нужные handle
*-----------------------------------------------------------------------------*
STATIC FUNCTION myGetWindowHandles( cText, cClass, lLogOut )
*-----------------------------------------------------------------------------*
LOCAL i, h, t
LOCAL aWnd := EnumWindows()
LOCAL aTmp := {}
LOCAL aRet := {}

IF empty(cClass); aTmp := aWnd
ELSE ; AEVal(aWnd, {|hw| iif( GetClassName(hw) == cClass, AAdd( aTmp, hw ), )})
ENDIF

IF ! empty(cText) .and. HB_ISCHAR(cText) .and. Len(aTmp) > 0
FOR EACH h IN aTmp
t := GetWindowText( h )
IF cText $ t ; AAdd( aRet, h )
ENDIF
NEXT
ELSE
aRet := aTmp
ENDIF

IF ! Empty(lLogOut)
FOR i := 1 TO Len(aTmp)
t := GetWindowText(aTmp[ i ])
_FileLog( str(i, 5), aTmp[ i ], GetClassName(aTmp[ i ]), t )
NEXT
ENDIF

RETURN aRet


Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6729
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.06.20 11:53. Заголовок: SergKis пишет: в сп..


SergKis пишет:

 цитата:
в списке найди ClassName и Text для нужных окон


А без класса нельзя ?
Нет у меня LibreOffice . Не знаю какой класс для него используется.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 3269
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.06.20 12:07. Заголовок: Andrey У тебя текст..


Andrey
У тебя текст ф-ии перед глазами, разберись, запусти myGetWindowHandles( , , .T. )
поправь только (я из своей версии переносил)
_FileLog( .T., str(i, 5), aTmp[ i ], GetClassName(aTmp[ i ]), t )

Получишь весь список handle окон с классами и title текстом
Если запустишь где уст. LibreOffice узнаешь имя класса (у меня тоже его нет).
Вопрос. Меняется ли имя класса от версии ?
Если знаешь кусок текста в title окна для LibreOffice, задай его.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 6730
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.06.20 12:12. Заголовок: SergKis пишет: запу..


SergKis пишет:

 цитата:
запусти myGetWindowHandles( , , .T. )


Запустил. Переделываю его под себя.
SergKis пишет:

 цитата:
Если знаешь кусок текста в title окна для LibreOffice, задай его.


Да делаю поиск по имени файла.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 34 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 82
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет