powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VPF и OpenOffice
10 сообщений из 10, страница 1 из 1
VPF и OpenOffice
    #32560383
Фотография Vladimir M Sklyar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нибудь пробывал создавать отчеты в OpenOffice ?
Нужна замена MS Excel.
...
Рейтинг: 0 / 0
VPF и OpenOffice
    #32560456
Тарас Будзяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашол код в Интернете, работает с версией OpenOffice.org 1.1.0

автор*!* Here is a very similar Visual FoxPro example that.....
*!* 1. Creates an OOo Calc spreadsheet
*!* 2. Puts some strings into it.
*!* 3. Puts some numbers into it.
*!* 4. Puts some dates into it (as formulas)
*!* 5. Saves it in Calc format (as C:\Example.sxw)
*!* 6. Saves it in Excel format (as C:\Example.xls)
*!* 7. Closes the document -- but this line is commented to leave the spreadsheet open in OOo

*!*
*VfpOOoCalcExample()

PROCEDURE VfpOOoCalcExample()
* Create a spreadsheet.
LOCAL oDoc
oDoc = OOoOpenURL( "private:factory/scalc" )

* Get first sheet
LOCAL oSheet
oSheet = oDoc.getSheets().getByIndex( 0 )

*-----
* Put some sales figures onto the sheet.
oSheet.getCellByPosition( 0, 0 ).setString( "Month" )
oSheet.getCellByPosition( 1, 0 ).setString( "Sales" )
oSheet.getCellByPosition( 2, 0 ).setString( "End Date" )

oSheet.getCellByPosition( 0, 1 ).setString( "Jan" )
oSheet.getCellByPosition( 0, 2 ).setString( "Feb" )
oSheet.getCellByPosition( 0, 3 ).setString( "Mar" )
oSheet.getCellByPosition( 0, 4 ).setString( "Apr" )
oSheet.getCellByPosition( 0, 5 ).setString( "May" )
oSheet.getCellByPosition( 0, 6 ).setString( "Jun" )
oSheet.getCellByPosition( 0, 7 ).setString( "Jul" )
oSheet.getCellByPosition( 0, 8 ).setString( "Aug" )
oSheet.getCellByPosition( 0, 9 ).setString( "Sep" )
oSheet.getCellByPosition( 0, 10 ).setString( "Oct" )
oSheet.getCellByPosition( 0, 11 ).setString( "Nov" )
oSheet.getCellByPosition( 0, 12 ).setString( "Dec" )

oSheet.getCellByPosition( 1, 1 ).setValue( 3826.37 )
oSheet.getCellByPosition( 1, 2 ).setValue( 3504.21 )
oSheet.getCellByPosition( 1, 3 ).setValue( 2961.45 )
oSheet.getCellByPosition( 1, 4 ).setValue( 2504.12 )
oSheet.getCellByPosition( 1, 5 ).setValue( 2713.98 )
oSheet.getCellByPosition( 1, 6 ).setValue( 2448.17 )
oSheet.getCellByPosition( 1, 7 ).setValue( 1802.13 )
oSheet.getCellByPosition( 1, 8 ).setValue( 2203.22 )
oSheet.getCellByPosition( 1, 9 ).setValue( 1502.54 )
oSheet.getCellByPosition( 1, 10 ).setValue( 1207.68 )
oSheet.getCellByPosition( 1, 11 ).setValue( 1819.71 )
oSheet.getCellByPosition( 1, 12 ).setValue( 986.03 )

oSheet.getCellByPosition( 2, 1 ).setFormula( "=DATE(2004;01;31)" )
oSheet.getCellByPosition( 2, 2 ).setFormula( "=DATE(2004;02;29)" )
oSheet.getCellByPosition( 2, 3 ).setFormula( "=DATE(2004;03;31)" )
oSheet.getCellByPosition( 2, 4 ).setFormula( "=DATE(2004;04;30)" )
oSheet.getCellByPosition( 2, 5 ).setFormula( "=DATE(2004;05;31)" )
oSheet.getCellByPosition( 2, 6 ).setFormula( "=DATE(2004;06;30)" )
oSheet.getCellByPosition( 2, 7 ).setFormula( "=DATE(2004;07;31)" )
oSheet.getCellByPosition( 2, 8 ).setFormula( "=DATE(2004;08;31)" )
oSheet.getCellByPosition( 2, 9 ).setFormula( "=DATE(2004;09;30)" )
* Note that these last three dates are not set as DATE() function calls.
oSheet.getCellByPosition( 2, 10 ).setFormula( "10/31/2004" )
oSheet.getCellByPosition( 2, 11 ).setFormula( "11/30/2004" )
oSheet.getCellRangeByName( "C13" ).setFormula( "12/31/2004" )
*-----

* Format the date cells as dates.
oFormats = oDoc.getNumberFormats()
oLocale = OOoCreateStruct( "com.sun.star.lang.Locale" )
* com.sun.star.util.NumberFormat.DATE = 2
nDateKey = oFormats.getStandardFormat( 2, oLocale )
oCell = oSheet.getCellRangeByName( "C2:C13" )
oCell.NumberFormat = nDateKey

LOCAL ARRAY aOneArg[1]
LOCAL cFile, cURL

* cFile = GetDesktopFolderPathname()+"example"
cFile = "c:\example"

* Now save the spreadsheet.
cURL = OOoConvertToURL( cFile + ".sxw" )
aOneArg[1] = OOoMakePropertyValue( "Overwrite", .T. )
oDoc.storeToUrl( cURL, @ aOneArg )

* Now save it as Excel
cURL = OOoConvertToURL( cFile + ".xls" )
aOneArg[1] = OOoMakePropertyValue( "FilterName", "MS Excel 97" )
oDoc.storeToUrl( cURL, @ aOneArg )

* Close the document.
* oDoc.close( 1 ) && TRUE
ENDPROC





* Open or Create a document from it's URL.
* New documents are created by URL's such as:
* private:factory/sdraw
* private:factory/swriter
* private:factory/scalc
* private:factory/simpress
FUNCTION OOoOpenURL( cURL )
* LOCAL oPropertyValue
* oPropertyValue = OOoCreateStruct( "com.sun.star.beans.PropertyValue" )

* LOCAL ARRAY aNoArgs[1]
* aNoArgs[1] = oPropertyValue
* aNoArgs[1].Name = "ReadOnly"
* aNoArgs[1].Value = .F.

* These two lines replace the alternate version above,
* which are left commented for the insight they provide.
LOCAL ARRAY aNoArgs[1]
aNoArgs[1] = OOoMakePropertyValue( "Hidden", .F. )

LOCAL oDesktop
oDesktop = OOoGetDesktop()

LOCAL oDoc
oDoc = oDesktop.LoadComponentFromUrl( cURL, "_blank", 0, @ aNoargs )

* Make sure that arrays passed to this document are passed zero based.
COMARRAY( oDoc, 10 )

RETURN oDoc
ENDFUNC

* Create a com.sun.star.beans.PropertyValue struct and return it.
FUNCTION OOoMakePropertyValue( cName, uValue, nHandle, nState )
LOCAL oPropertyValue
oPropertyValue = OOoCreateStruct( "com.sun.star.beans.PropertyValue" )

oPropertyValue.Name = cName
oPropertyValue.Value = uValue

IF TYPE([nHandle])="N"
oPropertyValue.Handle = nHandle
ENDIF
IF TYPE([nState])="N"
oPropertyValue.State = nState
ENDIF

RETURN oPropertyValue
ENDFUNC



* Sugar coated routine to create any UNO struct.
* Use the Bridge_GetStruct() feature of the OLE-UNO bridge.
FUNCTION OOoCreateStruct( cTypeName )
LOCAL oServiceManager
oServiceManager = OOoGetServiceManager()

LOCAL oStruct
oStruct = .NULL.

LOCAL cOldErrHandler
cOldErrHandler = ON( "ERROR" )
ON ERROR = DoNothing__ErrorHandler( ERROR(), MESSAGE(), LINENO(), SYS(16), PROGRAM(), SYS(2018) )
oStruct = oServiceManager.Bridge_GetStruct( cTypeName )
ON ERROR &cOldErrHandler

IF ISNULL( oStruct )
=__OOoReleaseCachedVars()
oServiceManager = OOoGetServiceManager()
oStruct = oServiceManager.Bridge_GetStruct( cTypeName )
ENDIF

RETURN oStruct
ENDFUNC


* Return the OpenOffice.org desktop object.
* Cache it in a global variable.
* Create it if not already cached.
FUNCTION OOoGetDesktop()
IF (TYPE([goOOoDesktop])!="O") OR ISNULL( goOOoDesktop )
PUBLIC goOOoDesktop
goOOoDesktop = OOoServiceManager_CreateInstance( "com.sun.star.frame.Desktop" )
COMARRAY( goOOoDesktop, 10 )
ENDIF
RETURN goOOoDesktop
ENDFUNC



* Return the OpenOffice.org service manager object.
* Cache it in a global variable.
* Create it if not already cached.
FUNCTION OOoGetServiceManager()
IF (TYPE([goOOoServiceManager])!="O") OR ISNULL( goOOoServiceManager )
PUBLIC goOOoServiceManager
goOOoServiceManager = CREATEOBJECT( "com.sun.star.ServiceManager" )
ENDIF
RETURN goOOoServiceManager
ENDFUNC


* Sugar coated routine to ask the service manager to
* create you an instance of some other OpenOffice.org UNO object.
FUNCTION OOoServiceManager_CreateInstance( cServiceName )
LOCAL oServiceManager
oServiceManager = OOoGetServiceManager()

LOCAL oInstance
oInstance = .NULL.

LOCAL cOldErrHandler
cOldErrHandler = ON( "ERROR" )
ON ERROR = DoNothing__ErrorHandler( ERROR(), MESSAGE(), LINENO(), SYS(16), PROGRAM(), SYS(2018) )
oInstance = oServiceManager.createInstance( cServiceName )
ON ERROR &cOldErrHandler

IF ISNULL( oInstance )
=__OOoReleaseCachedVars()
oServiceManager = OOoGetServiceManager()
oInstance = oServiceManager.createInstance( cServiceName )
ENDIF

RETURN oInstance
ENDFUNC


PROCEDURE DoNothing__ErrorHandler( pnError, pcErrMessage, pnLineNo, pcProgramFileSys16, pcProgram, pcErrorParamSys2018 )
ENDPROC


PROCEDURE __OOoReleaseCachedVars()
RELEASE goOOoServiceManager, goOOoDesktop, goOOoCoreReflection
ENDPROC


* Convert a local filename to an OOo URL.
FUNCTION OOoConvertToURL( cFilename )
* Ensure leading slash.
IF LEFT( cFilename, 1 ) != "/"
cFileName = "/" + cFileName
ENDIF

LOCAL cURL
cURL = CHRTRAN( cFilename, "\", "/" ) && change backslashes to forward slashes.
cURL = "file://" + cURL
RETURN cURL
ENDFUNC
*


*The function VfpOOoCalcExample() is actually the heart of the example.

*Everything else after VfpOOoCalcExample() is just stuff ripped from my general purpose OOo Library in VFP.

*This was tested in VFP 8 and VFP 7. It should work in VFP 6, but not tested. It may work in VFP 5, but I have reason to believe that it might not. It will definitely not work in VFP 3
...
Рейтинг: 0 / 0
VPF и OpenOffice
    #32560490
Фотография Vladimir M Sklyar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где нашел ?
Может там еще чего есть?

Спасибо
...
Рейтинг: 0 / 0
VPF и OpenOffice
    #32563827
olehR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где нашел ? Может там еще чего есть?
Спасибо!!!!!!!!.
Ету тему уже несколько раз подымали, и поетому я думаю, что многим будет интересно узнать все исночники информации, а также собственные успехи и примеры работы.
Ибо лично я потерял много времини чтоб сделать собственный премер который был намного хуже. Етот мне понравился больше. Хотя у меня всьоравно остались вопросы. Если не разберусь обязательно задам их сдесь.
Спасибо Тарас!!!!!!
...
Рейтинг: 0 / 0
VPF и OpenOffice
    #32570335
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на сайте OpenOffice есть код на бейсике, а это кусок от Тараса Будзяка ,
он определяет установлен ли Excel, если да то валим данные туда, если же нет смотрим установлен ли OpenOffice и данные туда. Коментарии на украинском. Главное в примере это принцып работы.

*!* select (thisform.filef)
*!* local gcFile
*!* gcFile = "'"+GETFILE('Excel:XLS', 'Файл Excel XLS:', 'Конвертувати', 1,'Конвертація в Excel')+"'"
*!* export to &gcFile type xl5
Local dc,oXLApp,typeapp

do dgr_box with 7, 'Триває експорт даних зачекайте ... ','...'
do dgr_mov
* --- параметер використання MS Excel(1), OpenOffice Calc(2)
typeapp = 0

oXLApp = CreateObject("excel.application")
do dgr_mov

IF type('oXLApp')='O'
typeapp = 1
oXLApp.Workbooks.Add()
oXLApp.Visible = .t.
do dgr_mov
do dgr_mov
ELSE
*// Якщо не знаходимо на машні MS Excel
*// ---------------- Створення Calc OpenOffice документу ----------------->>
LOCAL loOfcMgr, loDesktop, loPropertyValue
* Create the Service Manger and Desktop
loOfcMgr = CreateObject("com.sun.star.ServiceManager")

IF type('loOfcMgr')!='O'
messagebox('Неможливо здійснити операцію експортування оскільки на компютері немає Табличного редактора!',0+16+0,'Сервер')
do dgr_end
return .f.
ENDIF

loDesktop = loOfcMgr.createInstance("com.sun.star.frame.Desktop")

LOCAL oPropertyValue
oPropertyValue = .NULL.
oServiceManager = CREATEOBJECT( "com.sun.star.ServiceManager" )

IF type('oServiceManager')!='O'
messagebox('Неможливо здійснити операцію експортування оскільки на компютері немає Табличного редактора!',0+16+0,'Сервер')
do dgr_end
return .f.
ENDIF

do dgr_mov
oPropertyValue = oServiceManager.Bridge_GetStruct( "com.sun.star.beans.PropertyValue" )

oPropertyValue.Name = "Hidden"
oPropertyValue.Value = .F.

IF TYPE([nHandle])="N"
oPropertyValue.Handle = nHandle
ENDIF
IF TYPE([nState])="N"
oPropertyValue.State = nState
ENDIF

LOCAL ARRAY aNoArgs[1]
aNoArgs[1] = oPropertyValue

* Tell VFP to pass arrays to the loDesktop object as zero-based, by referemce
COMARRAY(loDesktop,10)

* Open a new empty calc document
oXLApp = loDesktop.loadComponentFromURL("private:factory/scalc","_blank", 0, @aNoArgs)

IF type('oXLApp')='O'
typeapp = 2
ELSE
messagebox('Неможливо здійснити операцію експортування оскільки на компютері немає Табличного редактора!',0+16+0,'Сервер')
do dgr_end
return .f.
ENDIF

do dgr_mov
* Вказівник на перший листок книги OpenOffice
LOCAL oSheet
oSheet = oXLApp.getSheets().getByIndex( 0 )
*// --------------------------------------------------------------------<<
ENDIF

IF typeapp = 0
messagebox('Неможливо здійснити операцію експортування оскільки на компютері немає Табличного редактора!',0+16+0,'Сервер')
do dgr_end
return .f.
ENDIF

*-------------------------Розрахункова частина процедури ---------------------
*Find out MaxRowDepth

do dgr_mov
*Експорт полів наз колонок

IF typeapp=2
oSheet.getCellByPosition(1,1).setString('Назва товару')
oSheet.getCellByPosition(2,1).setString('О.в.')
oSheet.getCellByPosition(3,1).setString('Ціна')
oSheet.getCellByPosition(4,1).setString('Курс')
oSheet.getCellByPosition(5,1).setString('Ціна роз.')
oSheet.getCellByPosition(6,1).setString('Курс р.')
ELSE
oXLApp.Cells(1, 1).Value = 'Назва товару'
oXLApp.Cells(1, 2).Value = 'О.в.'
oXLApp.Cells(1, 3).Value = 'Ціна'
oXLApp.Cells(1, 4).Value = 'Курс'
oXLApp.Cells(1, 5).Value = 'Ціна роз.'
oXLApp.Cells(1, 6).Value = 'Курс р.'
ENDIF

do dgr_mov
*Експорт полів назв рядків і даних
xlRow = 2
select (thisform.filed)
go top
scan
*Получаємо дані
IF typeapp=2
oSheet.getCellByPosition(1,xlRow).setValue(alltrim(nametv))
oSheet.getCellByPosition(2,xlRow).setValue(alltrim(ov))
oSheet.getCellByPosition(3,xlRow).setValue(alltrim(str(cena_r,12,2))+namevaluta)
oSheet.getCellByPosition(4,xlRow).setValue(kurs)
oSheet.getCellByPosition(5,xlRow).setValue(alltrim(str(cena_based,12,2))+namevalb)
oSheet.getCellByPosition(6,xlRow).setValue(kurs_based)
ELSE
oXLApp.Cells(xlRow, 1).Value = alltrim(nametv)
oXLApp.Cells(xlRow, 2).Value = alltrim(ov)
oXLApp.Cells(xlRow, 3).Value = alltrim(str(cena_r,12,2))+namevaluta
oXLApp.Cells(xlRow, 4).Value = kurs
oXLApp.Cells(xlRow, 5).Value = alltrim(str(cena_based,12,2))+namevalb
oXLApp.Cells(xlRow, 6).Value = kurs_based
ENDIF

xlRow = xlRow+1
ENDscan

do dgr_end
...
Рейтинг: 0 / 0
VPF и OpenOffice
    #32573928
olehR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не в обіду рускомовним користувачам форуму, але так як всі дописувачі з України тому задам питання на українській мові.(Якщо це викличе бурю незадоволень то я как більше робити не буду.
Всасне я хочу задати 2 питання:
1) Як сховати рядки
2) Як втавити з кліпборда або з масива для прискориння групової вставки.

P.S.На даний момент пишу Клас для роботи з Exel\OpenOffice якщо буде цікаво і доведу його до логічного кінця висдавлю. Для прикладу щоб вставити з Бази декілька стовчиків це виглядае так:
aa=CREATEOBJECT("ole_sheet")
aa.Init("C:\example.xls")
aa.cell(1,2,3,1234) * Вставляем на 1 стор. в 2 колонку 3 рядок значення 1234
aa.field(1,4,5,"tt.level","k_data") * Вставляем на 1 стор. з 4 колонки 5 рядка
всі записи з курсора tt поля level та k_data
aa.close
Для екселя вставка 20 000 значень <1 c ;для OpenOffice покіщо (якщо поможете по 2 питанню буде скоріше) 140с
...
Рейтинг: 0 / 0
VPF и OpenOffice
    #32575869
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olehR
Ждем клас
Насчет следующих вопросов, не вкурсе (не было надобности).
...
Рейтинг: 0 / 0
VPF и OpenOffice
    #32587212
olehR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выставляю клас. Я использовал чужие функции и идеи в основном взятые на етом сайте (Не указав источников я надеюсь не нанес ВАМ материального или морального учерба. Я простот не помню где и что брал).

Некоторые файлы имеют лишнюю информацию Поскольку взяты с реального проекта (st.prg, a open_office.prg взят с етой темы).

Вопросы которые я задавал остаються откытыми. Если у кого есть идеи или усовершенствования не забывайте поделится. Клас писался в спешке поетому высокую "чистоту" кода не гарантирую хотя вже с неделю работает. К сожалению ближайшее 2-3 недели не смогу ответить в связи с отпуском. Запускайте main.prg.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
VPF и OpenOffice
    #33534475
d4d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А под ooffice 2 как печатать????
...
Рейтинг: 0 / 0
VPF и OpenOffice
    #33534983
valeryka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Vladimir M Sklyar

Скачай доку на staroffice
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VPF и OpenOffice
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]