Page 1 of 1

Grid To Excel

Posted: Thu Mar 26, 2009 7:53 am
by sudip
Hi,

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

Regards.

Sudip

Re: Grid To Excel

Posted: Thu Mar 26, 2009 10:07 am
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

Re: Grid To Excel

Posted: Thu Mar 26, 2009 11:53 am
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

Re: Grid To Excel

Posted: Thu Mar 26, 2009 1:34 pm
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

Re: Grid To Excel

Posted: Thu Mar 26, 2009 4:37 pm
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