|
|
|
VPF и OpenOffice
|
|||
|---|---|---|---|
|
#18+
Кто-нибудь пробывал создавать отчеты в OpenOffice ? Нужна замена MS Excel. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 15:15 |
|
||
|
VPF и OpenOffice
|
|||
|---|---|---|---|
|
#18+
нашол код в Интернете, работает с версией 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 16:20 |
|
||
|
VPF и OpenOffice
|
|||
|---|---|---|---|
|
#18+
Где нашел ? Может там еще чего есть? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.06.2004, 16:48 |
|
||
|
VPF и OpenOffice
|
|||
|---|---|---|---|
|
#18+
Где нашел ? Может там еще чего есть? Спасибо!!!!!!!!. Ету тему уже несколько раз подымали, и поетому я думаю, что многим будет интересно узнать все исночники информации, а также собственные успехи и примеры работы. Ибо лично я потерял много времини чтоб сделать собственный премер который был намного хуже. Етот мне понравился больше. Хотя у меня всьоравно остались вопросы. Если не разберусь обязательно задам их сдесь. Спасибо Тарас!!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 15:21 |
|
||
|
VPF и OpenOffice
|
|||
|---|---|---|---|
|
#18+
на сайте 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2004, 18:05 |
|
||
|
VPF и OpenOffice
|
|||
|---|---|---|---|
|
#18+
Не в обіду рускомовним користувачам форуму, але так як всі дописувачі з України тому задам питання на українській мові.(Якщо це викличе бурю незадоволень то я как більше робити не буду. Всасне я хочу задати 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с ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2004, 14:49 |
|
||
|
VPF и OpenOffice
|
|||
|---|---|---|---|
|
#18+
olehR Ждем клас Насчет следующих вопросов, не вкурсе (не было надобности). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 15:51 |
|
||
|
VPF и OpenOffice
|
|||
|---|---|---|---|
|
#18+
Выставляю клас. Я использовал чужие функции и идеи в основном взятые на етом сайте (Не указав источников я надеюсь не нанес ВАМ материального или морального учерба. Я простот не помню где и что брал). Некоторые файлы имеют лишнюю информацию Поскольку взяты с реального проекта (st.prg, a open_office.prg взят с етой темы). Вопросы которые я задавал остаються откытыми. Если у кого есть идеи или усовершенствования не забывайте поделится. Клас писался в спешке поетому высокую "чистоту" кода не гарантирую хотя вже с неделю работает. К сожалению ближайшее 2-3 недели не смогу ответить в связи с отпуском. Запускайте main.prg. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2004, 14:19 |
|
||
|
VPF и OpenOffice
|
|||
|---|---|---|---|
|
#18+
А под ooffice 2 как печатать???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2006, 14:58 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=32587212&tid=1592407]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
163ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 412ms |

| 0 / 0 |
