Objektas darbui su MS Excel ir OpenOffice.
Rivile GAMA programoje yra integruotas darbo su MS Excel ir OpenOffice mechanizmas, kuris suvienodina ir supaprastina darbą su šiais dviem produktais. Šis mechanizmas sukuriamas kaip objektas („v_Excel“), kuris turi tokias funkcijas
Jei kompiuteryje nėra įdiegtos MS Excel programos, automatiškai bus naudojama OpenOffice programa. Jei yra MS Excel, jai teikiama pirmenybė, tik jei jos nėra, ieškoma OpenOffice.
Kuriant „v_Excel“ objektą, galima nurodyti tiksliai su kuria programa norima atidaryti failą.
Rx= v_Excel("MS") - bus naudojama MS Excel
Rx= v_Excel("OO") - bus naudojama OpenOffice.
OpenOffice atidaro ne tik savo „ods“ formatą, bet ir MS Excel „xls“ bei „xlsx“ formato failus. Tuo tarpu, MS Excel palaiko tik savo formatus „xls“ ir „xlsx“.
Pavyzdžiai
**Atidaromas failas, nuskaitoma reikšmė eilutėje 1 ir stulpelyje 1:
Rx=v_Excel()
Rx.Open()
Tekstas=Rx.GetText(1,1)
Rx.Close()
**Procedūra ("programa prieš") nuskaito (Excel ar ODS) failą ir sugeneruoja standartini EIP failiuką prekių importui:
LOCAL Rx, txt_file,j, lKodas,lPav,lRys,lGrup
Rx=v_Excel()
IF TYPE("Rx")#"O" OR ISNULL(Rx) OR !Rx.Open()
RETURN ""
ENDIF
txt_file=tmp_sys()+'.EIP'
Set TEXTMERGE ON
Set TEXTMERGE TO (txt_file) NOSHOW
l_window("Renkama informacija...")
j=0
DO WHILE 1=1
j=j+1
lKodas=ALLTRIM(Rx.GetText (j,1))
IF EMPTY(lKodas)
EXIT
ENDIF
lPav=ALLTRIM(Rx.GetText(j,2))
lRys=ALLTRIM(Rx.GetText (j,3))
lGru=ALLTRIM(Rx.GetText (j,4))
\<N17>
\ <N17_KODAS_PS><<LEFT(lKodas,12)>></N17_KODAS_PS>
\ <N17_TIPAS>2</N17_TIPAS>
\ <N17_PAV><<LEFT(lPav,40)>></N17_PAV>
\ <N17_KODAS_GS><<LEFT(lGru,12)>></N17_KODAS_GS>
\ <N17_KODAS_US>VNT</N17_KODAS_US>
\ <N17_KODAS_DS><<LEFT(lRys,12)>></N17_KODAS_DS>
\</N17>
ENDDO
Rx.Close()
SET TEXTMERGE TO
SET TEXTMERGE OFF
l_window("Failas nuskaitytas...")
RETURN txt_file
Programa prekių kotelių ir kainų importui: prekiu_importas_is_oo_ir_excel.zip
Užprogramuojamas klavišas (pirmas parametras - padalinio kodas) :
imp_ps_demo('ADM','MS') , jei iš MS Excel failo
arba
imp_ps_demo('ADM','OO') , jei iš Open Office failo.
Naudojant v_Excel objektą, generuojama Excel (OpenOffice) ataskaita.
"Didžioji knyga" ->"Sąskaitos detali informacija"-> Ataskaitos INIT- o pavyzdys : ataskaitos_oo_pvz.zip
select i03_kodas_is,i03_kodas_os,i03_serija,i02_dok_nr,i02_kodas_dh,i02_op_data,i02_op_apras,i03_suma from rep01 order by i03_kodas_is,i03_kodas_os,i03_serija into cursor rep01
*- generuojama Excel (OpenOffice) ataskaita per v_Excel objektą
Rx=v_Excel([OO]) && OpenOffice
Rx.New()
oOffice=Rx.loObjectOpened
if type([oOffice])#[O] or isnull(oOffice)
=l_window([Nepavyko sukurti OpenOffice dokumento])
return .f.
endif
*- linijų spalva ir plotis (reikalinga programa ooocreatestruct.prg)
loBorderLine=OOoCreateStruct([com.sun.star.table.BorderLine])
loBorderLine.color=rgb(0,0,0)
loBorderLine.lineDistance=0
loBorderLine.innerLineWidth=0
loBorderLine.outerLineWidth=6 && linijos storis, naudojama vėliau paišant linijas
oSheet=oOffice.getSheets().getByIndex(0) && parrenkamas sheet'as
*- stulpelių pavadinimai
oSheet.getCellByPosition(0,0).string=[Week]
oSheet.getCellByPosition(1,0).string=[Budget Line]
oSheet.getCellByPosition(2,0).string=[Invoice No.]
oSheet.getCellByPosition(3,0).string=[Invoice date]
oSheet.getCellByPosition(4,0).string=[Supplier]
oSheet.getCellByPosition(5,0).string=[Description]
oSheet.getCellByPosition(6,0).string=[Net Amount without VAT (EUR)]
oSheet.getRows.getByIndex(0).setPropertyValue([Height], 1000) && eilutės aukštis
oSheet.getColumns.getByIndex(0).setPropertyValue([Width], 1000) && stulpelio plotis
oSheet.getColumns.getByIndex(4).setPropertyValue([Width], 8000) && stulpelio plotis
oSheet.getColumns.getByIndex(5).setPropertyValue([Width], 5000) && stulpelio plotis
oSheet.getColumns.getByIndex(6).setPropertyValue([Width], 3000) && stulpelio plotis
oSheet.getCellByPosition(6,0).setPropertyValue([IsTextWrapped],.t.) && wrapped
oSheet.getCellRangeByPosition(0,0,6,0).setPropertyValue([CellBackColor],rgb(225,225,225))
i=1
select distinct i03_kodas_is from rep01 into cursor rep01_is
select rep01_is
goto top
scan
oSheet.getCellByPosition(0,i).string=i03_kodas_is
oSheet.getCellRangeByPosition(0,i,6,i).setPropertyValue([CellBackColor],rgb(225,225,225))
select * from rep01 where rep01.i03_kodas_is=rep01_is.i03_kodas_is order by i03_kodas_os,i03_serija into cursor rep01_dtl
iii=i
select rep01_dtl
goto top
scan
iii=iii+1
v_kodas_is=i03_kodas_is
v_kodas_os=i03_kodas_os
v_serija=i03_serija
v_aprasymas1=iif(f_select([select i07_aprasymas1 from i06_parh left join i07_pard on i06_kodas_po=i07_kodas_po ]+;
[where i06_op_tip=1 and i07_kodas_is=?v_kodas_is and i07_kodas_os=?v_kodas_os and i07_serija=?v_serija],[i06p]),nvl(i06p.i07_aprasymas1,[]),[])
oSheet.getCellByPosition(0,iii).string=i03_serija
oSheet.getCellByPosition(1,iii).string=i03_kodas_os
oSheet.getCellByPosition(2,iii).string=i02_dok_nr
oSheet.getCellByPosition(3,iii).string=i02_op_data
oSheet.getCellByPosition(4,iii).string=i02_op_apras
oSheet.getCellByPosition(5,iii).string=alltrim(alltrim(iif(f_seek([n06],i03_kodas_os),n06.n06_pav,[]))+[ ]+alltrim(v_aprasymas1))
oSheet.getCellByPosition(6,iii).value=i03_suma
endscan
i=iii+1
endscan
oSheet.getCellRangeByPosition(0,0,6,iii).bottomBorder=loBorderLine && linija
oSheet.getCellRangeByPosition(0,0,6,iii).rightBorder=loBorderLine && linija
Rx.saveas() && išsaugome failą, užklausiant jo vietos, vardo ir tipo
Rx.close()
select rep01
return .f.