Grid To Excel

General Help regarding HMG, Compilation, Linking, Samples

Moderator: Rathinagiri

Post Reply
User avatar
sudip
Posts: 1446
Joined: Sat Mar 07, 2009 11:52 am
Location: Kolkata, WB, India
Has thanked: 5 times
Been thanked: 2 times

Grid To Excel

Post by sudip »

Hi,

Is there any function / utility which can export data from grid to excel?

Regards.

Sudip
With best regards,
Sudip

User avatar
mol
Posts: 3409
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Has thanked: 268 times
Been thanked: 173 times
Contact:

Post by mol »

Hi Sudip!

I think, there is no function to export to excel.

You must to do it manually...
Here I paste my function to export to excel:
function EksportDoLBH
LOCAL oExcel, oAktArkusz, pom, nrwiersza, nZakres
private TabOB := {}
private plikLBH := folderLBH

if month(OkGl_Akord.D_OdDnia.Value) <> month(OkGl_Akord.D_DoDnia.Value)
MsgBox("Obecnie nie można eksportować danych z różnych miesięcy!!!")
return
endif

plikLBH += "\LBH."+n2c(month(OkGl_Akord.D_OdDnia.Value),2)+"."+str(year(OkGl_Akord.D_OdDnia.Value),4)+".xls"
MsgBox(plikLBH)
if !file(plikLBH)
MsgBOX('W podanej lokalizacji "'+FolderLBH+'"nie znaleziono pliku LBH!!!')
return
endif

if !UstawBazy( { {"dane\akord",,3,.f.}, {"dane\czaspr",,2,.f.} } ,0,TabOB)
return
endif

SetProperty("OkGl_Akord", "L_StatusEksportu","Value","Otwieranie arkusza LBH...")
OkGl_Akord.L_StatusEksportu.Value := "Otwieranie arkusza LBH..."
OkGl_Akord.L_StatusEksportu.SetFocus
OkGl_Akord.L_StatusEksportu.Visible := .t.
//SetProperty("OkGl_Akord", "L_StatusEksportu","Visible", .t.)


oExcel := CreateObject( "Excel.Application")
oExcel:Workbooks:Open( plikLBH)

//oAktArkusz := oExcel:ActiveSheet
//msgbox(type("oAktArkusz"))
//msgbox("Aktywny arkusz to: "+oAktArkusz:name)
//msgbox("Arkusz "+xtoc(oExcel:Sheets:Item(2)))
//oExcel:WorkSheets("Aktivitäten"):Select()
oExcel:Sheets(2):Select()
oAktArkusz := oExcel:ActiveSheet
//msgbox("Aktywny arkusz to: "+oAktArkusz:name)

// znajdź pierwszą wolną komórkę
nrWiersza := 2

//SetProperty("OkGl_Akord", "L_StatusEksportu","Visible", .t.)

OkGl_Akord.L_StatusEksportu.Value := "Trwa wyszukiwanie miejsca na wpisy do arkusza. Proszę czekać..."
//SetProperty("OkGl_Akord", "L_StatusEksportu","Value","Trwa wyszukiwanie miejsca na wpisy do arkusza. Proszę czekać...")

do while !empty(oAktArkusz:Cells( nrWiersza, 3 ):Value)
nrWiersza++
enddo

//nrWiersza := 2000


PoczNrWiersza := nrWiersza
SetProperty("OkGl_Akord", "L_StatusEksportu","Value","Dane wyeksportowane znajdują się od wiersza: "+str(nrWiersza))
SetProperty("OkGl_Akord", "L_ProszeCzekac","Visible", .t.)

select("akord")
set order to 1
go top
DBSeek(dtos(OKGL_Akord.D_DoDnia.Value),.t.)
nZakres := recno()

DBSeek(dtos(OKGL_Akord.D_OdDnia.Value),.t.)
nZakres -= recno()
SetProperty("OkGl_Akord", "ProgressBar_1","Visible", .t.)
SetProperty("OkGl_Akord", "ProgressBar_1","RangeMax", nZakres)

nZakres := 0
do while akord->data <= OKGL_Akord.D_DoDnia.Value .and. !eof()

SetProperty("OkGl_Akord", "ProgressBar_1","Value", nZakres++)

reclock(0)
lZapisWiersza := .f.
lZerowanieWiersza := .f.
if akord->FazaExport == 0 .or. akord->FazaExport == 11
nWierszDanych := nrWiersza
lZapisWiersza := .t.
lZerowanieWiersza := .f.
nFazaExportu := 11
nrWiersza ++
endif
if akord->FazaExport == 2 .or. akord->FazaExport == 12
// rekord po poprawie - ponowny zapis - ale we właściwe miejsce
nWierszDanych := akord->XLSWiersz
lZapisWiersza := .t.
lZerowanieWiersza := .f.
nFazaExportu := 12
endif
if akord->FazaExport == 3 .or. akord->FazaExport == 13
nWierszDanych := akord->XLSWiersz
lZapisWiersza := .f.
lZerowanieWiersza := .t.
nFazaExportu := 13
endif

if lZapisWiersza
// zapis do Arkusza
oAktArkusz:Cells( nWierszDanych, 1 ):Value := alltrim(akord->NrMaszyny)
oAktArkusz:Cells( nWierszDanych, 2 ):Value := akord->NrPrac
oAktArkusz:Cells( nWierszDanych, 3 ):Value := akord->Data
oAktArkusz:Cells( nWierszDanych, 3 ):NumberFormat := "dd-mmm-rr"

oAktArkusz:Cells( nWierszDanych, 4 ):Value := akord->(N2C(PoczGodz,2)+":"+N2C(PoczMin,2)+":00")
oAktArkusz:Cells( nWierszDanych, 4 ):NumberFormat := "gg:mm"
oAktArkusz:Cells( nWierszDanych, 5 ):Value := akord->(N2C(KoncGodz,2)+":"+N2C(KoncMin,2)+":00")
oAktArkusz:Cells( nWierszDanych, 5 ):NumberFormat := "gg:mm"

oAktArkusz:Cells( nWierszDanych, 6 ):NumberFormat := "##0"
oAktArkusz:Cells( nWierszDanych, 6 ):Value := akord->IleMinut

oAktArkusz:Cells( nWierszDanych, 7 ):Value := alltrim(akord->NrCzynnosc)
oAktArkusz:Cells( nWierszDanych, 8 ):Value := alltrim(akord->NrZlecenia)
oAktArkusz:Cells( nWierszDanych, 9 ):Value := alltrim(akord->NrCzesci)

oAktArkusz:Cells( nWierszDanych, 10):Value := akord->Ilosc

oAktArkusz:Cells( nWierszDanych, 11):Value := akord->Odpad1
oAktArkusz:Cells( nWierszDanych, 12):Value := akord->Odpad2
oAktArkusz:Cells( nWierszDanych, 13):Value := akord->Odpad3
oAktArkusz:Cells( nWierszDanych, 14):Value := akord->Odpad4
oAktArkusz:Cells( nWierszDanych, 15):Value := akord->Odpad5
oAktArkusz:Cells( nWierszDanych, 16):Value := akord->Odpad6
oAktArkusz:Cells( nWierszDanych, 17):Value := akord->Odpad7


replace ;
akord->xls_Wiersz with nWierszDanych,;
akord->FazaExport with nFazaExportu
endif

if lZerowanieWiersza
// zapis do Arkusza
oAktArkusz:Cells( nWierszDanych, 1 ):Value := ""
oAktArkusz:Cells( nWierszDanych, 2 ):Value := ""
oAktArkusz:Cells( nWierszDanych, 3 ):Value := akord->Data
oAktArkusz:Cells( nWierszDanych, 3 ):NumberFormat := "dd-mmm-rr"

oAktArkusz:Cells( nWierszDanych, 4 ):Value := ""
oAktArkusz:Cells( nWierszDanych, 4 ):NumberFormat := "gg:mm"
oAktArkusz:Cells( nWierszDanych, 5 ):Value := ""
oAktArkusz:Cells( nWierszDanych, 5 ):NumberFormat := "gg:mm"

oAktArkusz:Cells( nWierszDanych, 6 ):NumberFormat := "##0"
oAktArkusz:Cells( nWierszDanych, 6 ):Value := 0

oAktArkusz:Cells( nWierszDanych, 7 ):Value := ""
oAktArkusz:Cells( nWierszDanych, 8 ):Value := ""
oAktArkusz:Cells( nWierszDanych, 9 ):Value := ""

oAktArkusz:Cells( nWierszDanych, 10):Value := ""

oAktArkusz:Cells( nWierszDanych, 11):Value := ""
oAktArkusz:Cells( nWierszDanych, 12):Value := ""
oAktArkusz:Cells( nWierszDanych, 13):Value := ""
oAktArkusz:Cells( nWierszDanych, 14):Value := ""
oAktArkusz:Cells( nWierszDanych, 15):Value := ""
oAktArkusz:Cells( nWierszDanych, 16):Value := ""
oAktArkusz:Cells( nWierszDanych, 17):Value := ""


replace ;
akord->xlsWiersz with nWierszDanych,;
akord->FazaExport with nFazaExportu
endif

unlock

lZapisWiersza := .f.
lZerowanieWiersza := .f.

skip
enddo

SetProperty("OkGl_Akord", "L_StatusEksportu","Value","Wyeksportowano dane. Zapisano od wiersza "+alltrim(str(PoczNrWiersza)))
oExcel:Visible := .t.
if MsgYesNO("Potwierdzasz prawidłowość wykonania operacji eksportu")
// tutaj można zaznaczyć rekordy, że zostały wyeksportowane
DBSeek(dtos(OKGL_Akord.D_OdDnia.Value),.t.)
do while akord->data <=OKGL_Akord.D_DoDnia.Value .and. !eof()
if akord->FazaExport>10
reclock(0)
replace ;
FazaExport with 1
unlock
endif
skip
enddo
endif
SetProperty("OkGl_Akord", "L_StatusEksportu","Visible", .t.)

ZamknijBazy(TabOB)
SetProperty("OkGl_Akord", "L_ProszeCzekac","Visible", .f.)
SetProperty("OkGl_Akord", "ProgressBar_1","Visible", .f.)
//oExcel:Save()
//oExcel:SaveAs(plikLBH)
//oExcel:Quit()
return

User avatar
sudip
Posts: 1446
Joined: Sat Mar 07, 2009 11:52 am
Location: Kolkata, WB, India
Has thanked: 5 times
Been thanked: 2 times

Post by sudip »

Hello MOL,

Thank you very much. :)

I copied your code and saved it in my computer. I had my own dbf to excel code written in xharbour. Now I shall check for changes regarding object declaration etc.

With best regards.

Sudip
With best regards,
Sudip

User avatar
mol
Posts: 3409
Joined: Thu Sep 11, 2008 5:31 am
Location: Myszków, Poland
Has thanked: 268 times
Been thanked: 173 times
Contact:

Post by mol »

I have problem with this function on some installations of office. But I think - it's a matter of office, not HMG

regards, Marek

User avatar
sudip
Posts: 1446
Joined: Sat Mar 07, 2009 11:52 am
Location: Kolkata, WB, India
Has thanked: 5 times
Been thanked: 2 times

Post by sudip »

Hi Marek,

No problem.

I have created a generic example of dbf to excel and uploaded into "My HMG Projects" section. Can you please check it and send me your advice?

With best reagards.

Sudip
With best regards,
Sudip

Post Reply