Generarea de rapoarte de la vfp în excel, valentine yarychevsky (michael thrusdov)

Generarea rapoartelor de la VFP la Excel. Pat pentru copii.

Valentin Yarychevsky

Acest patut a crescut de la exemple și alte informații din ecouri, plus experiența personală dobândită. Este destul de convenabil pentru mine să lucrez cu ea. Uneori am spălat această foaie ieftină pentru cei care pun întrebări în ecou. și simt că este greu pentru o persoană :-). de la ei vin recunostinta. Așa că m-am gândit: este bine dacă această foaie de înșelător apare pe site-ul dvs., facilitând acumularea de experiență de către toți veniții.

Acțiuni generale.

RELEASE ole1, ole2

Deschidere când creați un document nou

* Modul în care nu dispare după lansare:
ole1 = CreateObject ("Excel.Application")
ole1.WorkBooks.add
ole2 = ole1.Aplicație
* Modul în care foaia de calcul Excel nu mai dispare după ieșirea:
ole1 = GetObject ("", "Excel.Sheet")
ole2 = ole1.Aplicație

Deschidere pentru un document existent (Excel dispare după ce a ieșit)
fil_excel = cfg_tgdef + "RECHNUNG _" + nominv_r + ". xls"
filnam_r = "RECHNUNG _" + nominv_r + ". xls"
ole1 = GetObject (fil_excel)
ole1.Application.Windows (filnam_r) .Activate
ole2 = ole1.Aplicație
ole2.Visible = .T.

Pentru a accelera funcționarea automată,
  • La începutul lucrării, imediat după crearea obiectului
    ole2.WindowState = xlMinimizat minimiza fereastra
    ole2.ScreenUpdating = .F. Nu afișați modificări pe ecran
  • La sfârșitul lucrării, înainte de a fi afișat raportul
    ole2.ScreenUpdating = .T.
    ole2.WindowState = xlMaximizată

Stocarea rezultatului într-un fișier
ole2.ActiveWorkBook.Save în același fișier
ole2.ActiveWorkBook.SaveAs (fil_excel) la un nou fișier

Dimensiunile ferestrei
#DEFINE xlMinimized -4140
#DEFINE xlMaximizată -4137
#DEFINE xlNormal -4143
ole2.WindowState = xlMinimizat colaps fereastră
ole2.WindowState = xlNormal fereastra normală
ole2.WindowState = xlMaximizată fereastra maximă

miscelaneu
ole2.DisplayAlerts = .F. Eliminați interogarea "Salvați fișierul?" (înainte de a ieși)
ole2.DisplayFormulaBar = .F. Bara de formulă clară
ole2.Version Returnează versiunea Excel


Rularea macro-ului
Ole2.Run ("EXPORT", m.file) "Export" este numele macro-ului, m.file este parametrul

Ștergerea unei macrocomenzi
registrele de lucru ("book1"). VBProject.VBComponents (5) .CodeModule.DeleteLines 2.1
Elimină numărul de linie 2 de la modulul 5

Lucrul cu celule

dimensiuni
.RowHeight = 2 linia înălțime (2 - garnitură îngustă, 15-20 - normală)
.Lățimea coloanei = 5 lățimea coloanei (aproximativ în simbolurile Courier, 9)

Stilul de legătură
Ole2.ReferenceStyle = Valoare
#DEFINE xlA1 1
#DEFINE xlR1C1 -4150

Selectați celule
Ole2.Cells (2,4) .Selectați
Ole2.Range (ole2.Cells (2,4), ole2.Cells (3,6))

Decrementul scribbling-ului cu o singură celulă
Cu Ole2.Cells (2.4)
.selecta
....
ENDWITH

Reducerea scribbling-ului cu un interval
Ole2.Range (ole2.Cells (2,4), ole2.Cells (3,6))
Cu selecție
... ..
ENDWITH

Diverse atunci când lucrați cu celule sau o gamă
.MergeCells = .T. unificarea unei celule
.Valoare = zag3_r Alocarea valorii (posibil fără Valoarea: ole2.Cells (2,3) = "aa")
.WrapText = .T. textul este transferat automat de către cuvintele din interiorul barei
.NumberFormat = "@" nu un format digital (număr sub formă de text)
.NumberFormat = "0.00" numeric, întotdeauna cu 2 zecimale după punctul zecimal
.interior.colorindex = număr culoarea fundalului este diferită (38,42, ...)

Aliniați textul în celule
.Aliniament orizontal = număr orizontal
.VerticalAlignment = număr vertical
#DEFINE xlLeft 1 stânga aliniere (sus)
#DEFINE xlRightg 4 dreapta orizontal
#DEFINE xlCenterg 3 pentru centrarea orizontală
#DEFINE xlCenterv 2 pentru centrul vertical
Alinierea tuturor rândurilor (sau a coloanelor selectate) la cea mai mare (largă) se efectuează printr-o comandă după umplere
Potrivire automată.

Fonturi, Fonturi
.Font.Name = cfg_fntcou Numele fontului
.Font.Size = 8 dimensiunea fontului
.Font.Bold = .T. Caractere îngroșate (.F - nu sunt bold)
.Font.Italic = .T. cursiv
.Font.Underline = număr subliniați întreaga celulă
#DEFINE xlUnderlineStyleDouble -4119
#DEFINE xlUnderlineStyleDoubleAccounting 5
#DEFINE xlUnderlineStyleNone -4142
#DEFINE xlUnderlineStyleSingle 2
#DEFINE xlUnderlineStyleSingleAccounting 4
Notă. Uneori, atunci când un text în limba rusă (mai ales într-un subsol) cu font Times apare un spațiu în interiorul cuvântului. Acest decalaj este eliminat utilizând un alt font (de exemplu, Arial).

Introducerea unei imagini într-o celulă
Interval ("B6") Selectați
ActiveSheet.Pictures.Insert ("C: \ VFP \ EL \ vaz_logo.gif").

Cum se adaugă o pauză de pagină în Excel din VFP
Ole2.Range ("A15") Selectați
Ole1.ActiveWindow.SelectedSheets.HPageBreaks.Add (ole2.ActiveCell)
unde ole2 și ole1 sunt obiectele de pagină și Excel.
Pot fi într-o singură linie și fără a mișca cursorul
Ole2.HPageBreaks.Add (ole2.Range ("A15"))


Cum să găsiți coordonatele unei celule
Selection.Address, Selection.Row, Selection.Column,
Selecție.Rând.Count, Selecție.Column1.Count

Utilizând formule
  • Prima metodă (nu a funcționat):
    ole2.ActiveCell.Formula = '= SUM (D7: D20)'
  • A doua metodă:
    .FormulaR1C1 = "=<формула>"
    exemplu
    ole2.Cells (5,6) .Selectați
    r = "= RC [+3]"
    PENTRU i = 2 TO tlmmk_r
    r = r + "+ RC [" + ALLT (STR (i * 3.6)
    ENDFOR
    ole2.ActiveCell.FormulaR1C1 = r scrie formula
    exemplu
    FOR j = 1 până la 5 coloane
    PENTRU i = 1 la 3 linii
    Ole2. Celule [i, j] .value = I * 10 + j
    ENDFOR
    Cu celulele ole2 [4, j]
    .selecta
    .FormulaR1C1 = "= SUM (R [-3] C: R [1] C)"
    ENDWITH
    ENDFOR

Linii pe limite de celule sau de limite
*
#DEFINE xlNone -4142 (HFFFFEFD2) fără linie
#DEFINE xlAutomatic -4105 (HFFFFEFF7).
#DEFINE xlDouble -4119 (HFFFFEFE9) dublu
#DEFINE xlMedium -4138 mediu
#DEFINE xlContinuous 1 normal

* (i)
#DEFINE xlDiagonalDown 5 înclinați linia în jos (din partea stângă sus)
#DEFINE xlDiagonalUp 6 înclinați linia în sus (din partea de jos din stânga)
#DEFINE xlEdgeLeft 7 partea stângă a celulei
#DEFINE xlEdgeTop 8 partea superioară a celulei
#DEFINE xlEdgeBottom 9 partea de jos a celulei
#DEFINE xlEdgeRight 10 din partea dreaptă a celulei
11 - în cadrul liniilor verticale ale celulelor
12 - În gama de celule, linii orizontale

* .Wight
#DEFINE xlThin 2 subțire linie
#DEFINE xlThick 4 grosime

Procedura de facilitare a muncii cu linii
PROCEDURE frontierele de celule linii celulare
PARAMETRII p1_cb, p2_cb, p3_cb, p4_cb
1 - începe, 2 - i con, 3 - stil, 4 - greutate
PENTRU i_cb = p1_cb TO p2_cb
Cu .comenzi (i_cb)
.LineStyle = p3_cb
DACĂ p3_cb <> xlNone
.Greutate = p4_cb
.ColorIndex = xlAutomatic
ENDIF
ENDWITH
ENDFOR
Apelarea procedurii (exemplu):
DO cu 7,12, xlnone, xlthin

Îndepărtarea rândurilor și a coloanelor în timpul derulării.
ole2.Cells (5,3) .Selectați
ole2.ActiveWindow.FreezePanes = .T.
4 linii vor fi înghețate din partea de sus a celulei selectate și 2 coloane în partea stângă a celulei selectate. Aceasta este, celula selectată este o celulă de colț care nu intră în îngheț.

Print.
Cu ole2.ActiveSheet.PageSetup
.printGridLines = .F. nu imprimați linii de rețea
.Orientare = 2 2 - album, 1 - portret
.PaperSize = 9
.PrintTitleRows = "$ 1: $ 5" c-linii (oricare, dar fără pauză)
.PrintTitleColumns = "$ A: $ F" prin coloane (fără pauză)
.RightHeader = "P" Imprimați numărul foii în subsolul din dreapta
* p. [Page] +1 imprimați din 2 coli (sau din ceea ce doriți
* .RightHeader = "Стр P de la N " Pagina și toate paginile
* .RightHeader = "P" + CHR (10) + "D" pagina și linia de mai jos
.TopMargin = 0,0 câmp de peste 0,5
.BottomMargin = 0,0 câmpul de jos
.HeaderMargin = 0,0 antetul de sus
.FooterMargin = 0,0 subsol de dedesubt
.RightMargin = 0,5 câmpul din dreapta
.LeftMargin = 0.5 câmpul din stânga
.Ordin = 2 ordinea foilor pentru mai multe. benzile: 1 - I, 2 - Z
* .CenterHorizontal = .T. alinierea foii de imprimare pe orizontală
* .CenterVertical = .T. Aliniere verticală
* .FitToPagesWide = 1 Raport de comprimare cu o lățime de până la 1 coli
* .FitToPagesTail = .F. nu comprimați raportul de numărare a paginilor
* .Zoom = .N. acest lucru plus două. linii - pentru compresie pe o coală de lățime
EndWith ActiveSheet.HPageBreaks.Count Număr de pagini tipărite