Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Clase - VCX si PRG  Clasa grid2XLS...
 Clasa grid2XLS
 
 2/15/2006 9:50:57 AM
User is offlineDorin Vasilescu
1366 posts
1st




Clasa grid2XLS
 (Romania)
Am o cerinta urgenta sa fac export in XLS la o gramada de tabele pe care utilizatorii le filtrează cum vor si rezultatul e intr-un grid.
In mod normal ar trebui sa fac XLS-urile si sa pun datele cu _VFP.DataToClip, sa actualizez celulele de tip header, etc.. Ar dura mult.
Având grid-urile alea, m-am gândit sa fac o clasa  care să  ia la rând coloanele şi liniile grid-ului şi să construiască cu Excel automation sheet-ul

Vreau sa transmit si o colectie ca parametru cu headere (câte, locaţie, formatare)

Cam ce ar mai fi util, după parerea voastră?

 2/15/2006 10:11:23 AM
User is offlinerlutia66
229 posts
4th




Re: Clasa grid2XLS
 (United Kingdom)
Sa inteleg ca un simplu COPY TO alias XL5 nu te multumeste?

Rares LUTIA
Matricia Solutions
 2/15/2006 10:15:08 AM
User is offlineLiviuShiva
11 posts


Re: Clasa grid2XLS
 (Romania)

Salut,

Eu in astfel de situatii am procedat asa:

- daca nu se vroia fara formatare

lcNumeFisier=["]+"C:\SitArt\DATE EXCEL\Result_TotLanc.xls"+["]

Copy To &lcNumeFisier Type Xl5

Declare Integer ShellExecute In "Shell32.dll" ;

INTEGER HWnd, ;

STRING lpVerb, ;

STRING lpFile, ;

STRING lpParameters, ;

STRING lpDirectory, ;

LONG nShowCmd

=ShellExecute(0,"Open",lcNumeFisier,"","",0)

 

-daca se vroia cu formatare, asa cu am inteles ca e la tine, ar fi doua solutii:

1.asa cum ai spus si tu cu automation, la care am pregatit foaia de excel inainte, eventual si cu un macro de formatare pe care-l apelam din VFP gen

loexcel.Application.Run("Formatare",lnNrRow,lnNrColumns)

2.exista o solutie mai simpla dar, pt. asta, am folosit VB 2005. Am facut raportul acolo si pt. asta am folosit noul Microsoft Visual Studio 2005 Report Viewer, iar acesta permite salvarea raportului XLS si PDF. L-am compilat si apelarea din VFP am facut-o cu:

DECLARE INTEGER ShellExecute IN shell32.dll ;

INTEGER hndWin, ;

STRING cAction, ;

STRING cFileName, ;

STRING cParams, ;

STRING cDir, ;

INTEGER nShowWin

cFileName = "C:\NecArtVFP\ListNec.exe"

cAction = "open"

ShellExecute(0,cAction,cFileName,"","",1)

 

Numai bine !

 

 2/15/2006 10:16:53 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Clasa grid2XLS
 (Romania)
Asa am facut, initial.
Nu le place, vor gata formatat, gata pentru listare.
Eventual sa mai scrie ei ceva, ca observatii.
 2/15/2006 10:30:58 AM
User is offlinerlutia66
229 posts
4th




Re: Clasa grid2XLS
 (United Kingdom)
Deocamdata, am o varianta "light" pt asta. Eu zic ca este buna, macar ca startpoint

LPARAMETERS pFileName
        #DEFINE xlMaximized    -4137
        IF EMPTY(ALIAS())
            USE ?
            IF EMPTY(ALIAS())
                RETURN
            ENDIF
        ENDIF
        IF PCOUNT()=0
            pFileName=SYS(5)+SYS(2003)+"\"+ALIAS()+".xls"
        ENDIF
        COPY TO (pFileName) ALL XL5

        oXLSheet = GETOBJECT('','excel.sheet')        && creez un obiect Excel.sheet
        oXL = oXLSheet.APPLICATION                    && prescurtare tmp.application -> aa
        oXL.VISIBLE = .T.


        oXLWorkbook = oXL.workbooks.ADD(pFileName)
        oXL.ActiveWindow.WINDOWSTATE = xlMaximized
        *oXL.Activesheet.Cells.Select
        oXL.Activesheet.Cells.EntireColumn.AutoFit
        oXLWorkbook.save


Mai aveam una mai "muncita", dar nu stiu pe unde am pus-o (varianta... adica :) )

Sper sa ajute,
Rares

Rares LUTIA
Matricia Solutions
 2/15/2006 10:33:44 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Clasa grid2XLS
 (Romania)
 LiviuShiva wrote
-daca se vroia cu formatare, asa cu am inteles ca e la tine, ar fi doua solutii:

1.asa cum ai spus si tu cu automation, la care am pregatit foaia de excel inainte, eventual si cu un macro de formatare pe care-l apelam din VFP gen

loexcel.Application.Run("Formatare",lnNrRow,lnNrColumns)



Asa trebuie, cu formatare.
Am de ales: fac design la 12 xls sau design la o clasa pe care o pot folosi oricând am nevoie.
Deja m-am apucat :)

O sa fac prima data o versiune "quick and dirty", să le dau posibilitatea oamenilor să-şi scoată ce le trebuie. Ulterior, cu sugestiile voastre, o mai perfecţionez.

 2/15/2006 10:39:45 AM
User is offlineAdrianTufă
306 posts
.: VFP Rocks :.
3rd


Re: Clasa grid2XLS
 (Romania)
 Dorin Vasilescu wrote
Asa am facut, initial.
Nu le place, vor gata formatat, gata pentru listare.
Eventual sa mai scrie ei ceva, ca observatii.


Aaa, atunci e clara problema. Eu zic sa nu te "lupti" impotriva Excel-ului. ;)
Daca vor Excel, da-le Excel frumos colorat si cu marea bucurie de a scrie in el.
Ideea e sa iei datele direct cu Excelul cu Data -> Get External Data.
Acolo ai posibilitatea sa te conectezi la sursa de date si sa-ti bagi Select-ul tau.
 2/15/2006 10:53:21 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Clasa grid2XLS
 (N/A)
Am facut-o, cel putin la nivelul la care-mi trebuie mie
Exporta in grid si culorile dinamice de background sau foreground si repeta headerul pe fiecare pagina
"Arhitectura", daca pot sa spun asa, e deschisa, cu singur parametru in afara de referinta gridului, de tip colectie. Se mai poate extinde ulterior. Momentan am doar 'headers" ca item. Se mai pot adauga autosave, nume fisier salvare, grupari/subtotaluri, etc.

Cum "merge"?
Pentru forma simpla:

grid2xls(oGridRef)

Sau mai complicat:
oP = NEWOBJECT('Collection')
oP.Add(NEWOBJECT('Empty'),'headers')
AddProperty(oP.Item(1),'aHeaders[2,8]',.f.)
WITH oP.Item(1)
    .aHeaders[1,1] = 'Societate :'
    .aHeaders[1,2] = 1                &&linie
    .aHeaders[1,3] = 1                &&coloana
    .aHeaders[1,4] = 'Arial'        &&FontName
    .aHeaders[1,5] = 16                &&FontSize
    .aHeaders[1,6] = .T.            &&FontBold
    .aHeaders[1,7] = .T.            &&FontItalic

    .aHeaders[2,1] = 'Perioada : de la -> pana la'
    .aHeaders[2,2] = 4    &&linie
    .aHeaders[2,3] = 4    &&coloana
    .aHeaders[2,8] = -4108    &&Aliniament ( xlCenter )
ENDWITH
grid2xls(oGridRef, oP)


 2/16/2006 7:22:21 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Clasa grid2XLS
 (Romania)

Dorin

Multumesc foarte mult.


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 2/16/2006 7:49:34 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Clasa grid2XLS
 (Romania)
Mi se pare ca e cam incet.
 2/17/2006 8:05:50 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Clasa grid2XLS
 (Romania)
Incet - neincet, le place.
Dar am patit ceva interesant. Unele grid-uri de la diversele raportari au coloanele interschimbate din timpul design-ului.  Asta are ca rezultat, din cauza  .ColumnOrder, ca  XLS-ul iese aiurea fata de cum arată grid-ul.
Oare cum aş putea sa le parcurg in ordinea .ColumnOrder in loc de  ordinea instanţierii_

 2/17/2006 8:54:43 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Clasa grid2XLS
 (N/A)

Pentru column si pages eu folosesc o matrice cu doua coloane, in care pun obiectul si columnorder (sau pageorder), apoi o sortez dupa ordine.

Sau colectie in care key este columorder.


Daniel Buduru
 2/17/2006 9:43:23 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Clasa grid2XLS
 (Romania)
 danbd wrote
Sau colectie in care key este columorder.


Bingo!
Asta e.  Multumesc!

 2/25/2006 7:49:56 PM
User is offlineAdrian Gerlan
581 posts
1st




Re: Clasa grid2XLS
 (N/A)
Dorine, ce trebuie sa fac in clasa ta pentru autosalvare ? E tare buna si pentru mine. Pot sa o folosesc ?
AdiG
 2/25/2006 9:31:19 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Clasa grid2XLS
 (N/A)
 nagualul wrote
Dorine, ce trebuie sa fac in clasa ta pentru autosalvare ? E tare buna si pentru mine. Pot sa o folosesc ?


Bineinteles ca da.


pentru salvare:

oExcel.ActiveWorkbook.SaveAs('c:\test.xls')

Eu am mai modificat ceva la cod, respectiv sortare corecta a coloanelor in functie de ColumnOrder si posibilitatea de a afisa subtotaluri si total general.
Din pacate nu am codul acasa, nici nu e prea mult, de fapt.

 2/25/2006 9:48:00 PM
User is offlineAdrian Gerlan
581 posts
1st




Re: Clasa grid2XLS
 (N/A)
Daca poti si vrei, cand ai timp, pune clasa la sectiunea download. Multumesc
AdiG
 2/28/2006 11:17:01 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Clasa grid2XLS
 (Romania)
L-am pus in Download
http://www.algis.ro/pafiledb352/index.php?act=view&id=97

Am mai optimizat viteza de executie ( e de vreo 2 ori mai rapid, depinde si daca sunt celule colorate)

Am inclus si posibilitatea de salvare intru-un fisier,  pe langa subtotaluri

Detalii mai multe chiar in PRG, la inceput
 2/28/2006 12:05:32 PM
User is offlineAdrian Gerlan
581 posts
1st




Re: Clasa grid2XLS
 (Romania)
Se poate face ceva pentru campurile numerice egale cu zero, sa apara in excell "0" ?
AdiG
 2/28/2006 12:30:44 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Clasa grid2XLS
 (Romania)
Da se poate
Inlocuieste :
IF NOT EMPTY(EVALUATE(.ControlSource))
                    oCell.Value = EVALUATE(.ControlSource)
ENDIF

cu

IF NOT EMPTY(EVALUATE(.ControlSource)) OR TYPE(.ControlSource) = 'N'
                    oCell.Value = EVALUATE(.ControlSource)
ENDIF

 2/28/2006 1:26:06 PM
User is offlineAdrian Gerlan
581 posts
1st




Re: Clasa grid2XLS
 (Romania)
Acum primesc eroarea "PIXEL_PER_UNIT not found". M-am uitat prin cod dar nu pricep de unde vine ca doar e definit la inceputul procedurii..
AdiG
 2/28/2006 1:41:49 PM
User is offlineAdrian Gerlan
581 posts
1st




Re: Clasa grid2XLS
 (Romania)
Am rezolvat. Copiasem gresit definitia.
AdiG
 4/25/2006 5:01:06 PM
User is offlineedyshor
1450 posts
1st




Re: Clasa grid2XLS
 (Romania) Modified By edyshor  on 4/25/2006 5:02:21 PM)
 LiviuShiva wrote

2.exista o solutie mai simpla dar, pt. asta, am folosit VB 2005. Am facut raportul acolo si pt. asta am folosit noul Microsoft Visual Studio 2005 Report Viewer, iar acesta permite salvarea raportului XLS si PDF. L-am compilat si apelarea din VFP am facut-o cu:

in VB 2005 poti face un raport .exe ?! .. cum arata ?! :)) sper ca mai bine decat al vfp-ului

trebuie sa pun ghiara pe VS2005 !! :D

 4/27/2006 8:50:52 AM
User is offlineLiviuShiva
11 posts


Re: Clasa grid2XLS
 (Romania)
Incepand cu aceasta versiune pachetul Visual Studio ofera un instrument de raportare propriu, existand in continuare si posibilitatea de  a folosi Crystal Reports. In afara de un mic bug la listare, peste care se poate trece, este un instrument puternic si usor de folosit. Printre facilitati pot enumera Subreport, Drillthrough Report (poti face ca un hiperlink sa navighezi dintr-un raport in altul; un exemplu: ai un raport cu toate facturile, click pe nr. factura si deschide detaliul facturii) si, asa cum am mai spus, posibilitatea de a salva raportul in xls cu formatare cu tot. Ceea ce m-a uimit este ca poti face un raport, gen pivot table, perfect funtional (clic pe "+" deschide detaliul) si apoi il salvezi in aceeasi forma in Excel.

Cateva exemple poti sa gasesti la http://www.gotreportviewer.com/
  Visual FoxPro  Clase - VCX si PRG  Clasa grid2XLS...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement