V_EXEL()

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

  • Open([lcFilename]) – atidaro dokumentą skaitymui
  • New() – sukuria naują dokumentą rašymui
  • Close([llSaveChanges]) – uždaro atidarytą dokumentą
  • SaveAs([lcFilename]) – išsaugo dokumento pakeitimus į nurodytą failą
  • GetValue(lY,lX) – nuskaito nurodytą reikšmę
  • GetText(lY,lX) – nuskaito nurodytą reikšmę kaip tekstą
  • SetValue(lY,lX,lValue) – įrašo nurodytą reikšmę
  • SetText(lY,lX,lcText) – įrašo nurodytą reikšmę kaip tekstą

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

  1. Atidaromas failas, nuskaitoma reikšmė eilutėje 1 ir stulpelyje 1
**Atidaromas failas, nuskaitoma reikšmė eilutėje 1 ir stulpelyje 1:

Rx=v_Excel()
Rx.Open()
Tekstas=Rx.GetText(1,1)
Rx.Close()
  1. Procedūra ("programa prieš") nuskaito (Excel ar ODS) failą ir sugeneruoja standartini EIP failiuką prekių importui
**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
  1. 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.

  2. 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.