Hoe Excel-blad actief te maken delphi xe5. Excel openen vanuit Delphi

Gegevens uitwisselen met MS-Excel V Delphi met de hulp OLE.

Hallo lieve collega's!

We worden allemaal vroeg of laat geconfronteerd met de taak om gegevens uit te wisselen met pakketapplicaties MS-Office. Eén ervan is MS-Excel. En specifiek over de interactie met dit product MS-Office zal in dit artikel worden besproken.

Eén manier om met elkaar om te gaan Delphi C MS-Excel- is om er verbinding mee te maken als OLE voorwerp.

Dus.
In de eerste plaats om mee te werken MS-Excel En OLE toevoegen aan sectie Gebruik modules ComObj En ActiveX.

En het eerste dat we moeten controleren, is of het is geïnstalleerd MS-Excel in principe op de computer van de gebruiker.
Om dit te doen, zullen we de functie gebruiken CLSIDFromProgID, waarmee het register wordt doorzocht CLSID voor de verzonden ProgID:
Hulp van MSDN: Methode CLSIDFromProgID
Parameters:
pszProgID: PoleStr— Een tekenreeks met de naam van het object
clside: TCLSID— Verwijzing naar structuur TGUID waarnaar het gevonden voorwerp wordt overgebracht;
Retouren:
HRESULT— Resultaat, dat de volgende waarden kan aannemen:
S_OK— gevonden voorwerp;
CO_E_CLASSSTRING— Geregistreerd CLSID Voor ProgID is ongeldig;
REGDB_E_WRITEREGDB— Schrijffout CLSID naar het register.
Van de vermelde resultaten hebben we nodig S_OK.
Laten we een functie schrijven om de aanwezigheid te bepalen Excel van de gebruiker:

Functie IsXlsInstall: boolean; var CLSID: TCLSID; begin Resultaat:= (CLSIDFromProgID("Excel.Application", CLSID) = S_OK); einde;

Als Excel geïnstalleerd, laten we er vervolgens verbinding mee maken. U kunt dit op twee manieren doen: GetActiveOleObject— Ontvang een link naar een reeds actief exemplaar Excel of MaakOleObject— Maak een nieuw exemplaar Excel.
Als we een taak hebben om gegevens te ontvangen van een running Excel, dan moeten we alleen de eerste optie gebruiken, in andere gevallen proberen we verbinding te maken en als dat niet werkt, dan maken we deze aan.
Laten we 2 functies schrijven om te verbinden XlsConnect en een nieuwe lanceren XlsStart:
Laten we een variabele toevoegen FXlsApp met soort Variant, die een verwijzing naar het object bevat Excel.

Privé FXlsApp: variant; *** functie XlsConnect: boolean; begin Resultaat:= Onwaar;

probeer FXlsApp:= GetActiveOleObject("Excel.Application"); MS-Excel Resultaat:= Waar;

behalve einde; einde; procedure XlsStart; begin FXlsApp:= CreateOleObject("Excel.Application"); einde; Nu kunt u een knop toevoegen, wanneer erop wordt geklikt, zullen we verbinding maken met behulp van de geschreven functies:

Standaardvenster Excel begint binnen achtergrond. Lijn FXlsApp.Visible:= Waar; maakt een achtergrondvenster Excel zichtbaar.

Raam Excel het begint leeg en moet eraan worden toegevoegd werkboek. Dit gebeurt met behulp van de methode Werkboeken.Toevoegen, waarmee een nieuw boek wordt toegevoegd of een eerder opgeslagen boek wordt geopend als u het pad naar het bestand opgeeft.
Laten we een procedure toevoegen die dit doet:

Procedure XWorkbookAdd(const FilePath: string = ""); begin FXlsApp.WorkBooks.Add(FilePath); einde;

Het boek is toegevoegd, laten we nu proberen er iets in te schrijven.

FXlsApp.Cells := "Testreeks";

Waar Rij is de rijindex, en Kol— kolomindex die begint met één.

FXlsApp.Range["A1"] := "Cel A1";

Waar Bereik is een array van cellen, en A1- bekend bij Excel cel coördinaten.
Een bereik kan worden opgegeven als coördinaten. Coderen bijvoorbeeld

FXlsApp.Range["A3:A10"] := 5;

vult alle cellen met het getal 5 A3 Door A10 en de code

FXlsApp.Range["A3:A10"].Interior.Color:= clMoneyGreen;

zal hetzelfde bereik lichtgroen markeren.
IN achterkant, dat wil zeggen: om gegevens uit te verkrijgen Excel, werkt hetzelfde. Lijn

ShowMessage(FXlsApp.Cells);

Zal een bericht weergeven met de inhoud van de cel met de coördinaten: Rij=5, Kolom=1.

Nadat we de nodige manipulaties hebben uitgevoerd met Excel, kunnen we het resulterende boek opslaan in een bestand met de volgende opdracht:

FXlsApp.ActiveWorkbook.SaveAs("C:\Test.xlsx");

Waar Actief werkboek- huidig ​​boek.
En sluit de applicatie Excel commando:

FXlsApp.Quit;

Hoe begrijpt u deze besturingsopties? Excel van Delphi zijn niet beperkt. En er is een vrij eenvoudige manier om erachter te komen hoe u de noodzakelijke actie kunt uitvoeren Excel van Delphi.
Het heet macro's.

Laten we ons voorstellen dat we verschillende cellen tot één moeten samenvoegen en dat we niet weten hoe we dat moeten doen. Maar wij willen het weten. Om dit te doen, voeren we de volgende stappen uit:
1. Start Excel en maak een leeg boek.
2. Voer standaard de opdracht “Macro opnemen” uit; de naam van de macro is “Macro1”. (In verschillende versies Excel deze opdracht te vinden in verschillende menu-items).
3. Selecteer een bepaald cellenbereik en klik op de knop 'Samenvoegen en in het midden plaatsen'.
4. Stop met het opnemen van de macro.
5. Roep de lijst met macro's op en selecteer daar uw opgenomen macro.
6. Klik op de knop “Wijzigen”.
De redacteur begint Microsoft Visuele basis voor toepassing waarin we de code zien van de ondernomen acties:

Sub Macro1() " " Macro1 Macro " Met selectie .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End met selectie .Einde sub samenvoegen

Laten we eens nader bekijken wat hij ons hier schreef:
Met Selectie— Stel voor het geselecteerde celbereik de eigenschappen in:
Horizontale uitlijning = xlCentrumHorizontale oriëntatie= gecentreerd.
VerticalAlignment = xlBottom— Verticale oriëntatie — langs de onderrand.
WrapText = Onwaar— Tekstterugloop op woorden is uitgeschakeld.
Oriëntatie = 0— Oriëntatie 0 graden.
AddIndent = Onwaar- Gebruik automatische inspringing aan/uit
Inspringniveau = 0— Inspringniveau 0.
ShrinkToFit = Onwaar— Tekst comprimeren zodat deze in de kolom past, aan/uit.
Leesvolgorde = xlContext- Leesvolgorde volgens context.
MergeCells = Onwaar— Samengevoegde cellen aan/uit
Eindig met— Einde van het werkgedeelte met het geselecteerde bereik.
Selectie.Samenvoegen— Voeg het geselecteerde bereik samen.

Laten we nu proberen cellen uit Delphi samen te voegen:

We selecteren het bereik dat we nodig hebben.

FXlsApp.Selection.MergeCells:= Waar;

We voegen cellen samen door de eigenschap in te stellen. Of gebruik de methode:

FXlsApp.Selection.Merge;

Op deze manier kunt u code verkrijgen voor vrijwel elke noodzakelijke manipulatie.
En als een eigenschap of methode vragen oproept, kunt u de hulp op MSDN gebruiken.

Let op de eigenaardigheid van het werken met arrays in VBA. Indexen in arrays in Delphi staan ​​tussen vierkante haakjes, terwijl ze binnen zijn VBA ze zullen in ronde exemplaren zijn. En de code erin Delphi

FXlsApp.Range["B5:C8"].Selecteer;

V VBA eruit zal zien

Bereik("D5:H14").Selecteer;

Hieronder geef ik een kleine Veelgestelde vragen over de kwestie van de interactie met Excel van Delphi

Hoe definieer ik constante waarden in Excel voor gebruik in Delphi?

In de redacteur VBA We stellen een stoppunt in tegenover de renteconstante. Klik op Uitvoeren en wanneer de uitvoering stopt, wijs dan de gewenste constante aan:

Hoe berichtuitvoer in Excel uitschakelen?

FXlsApp.DisplayAlerts:= Onwaar;

Hoe krijg ik een lijst met boeken uit Excel?

Voor i:= 1 tot FXlsApp.Workbooks.Count do ListBox1.Items.Add(FXlsApp.Workbooks.Item[i].Name);

Hoe schakel ik de rasterweergave uit?

FXlsApp.ActiveWindow.DisplayGridlines:= Onwaar;

Hoe kan ik het huidige blad als afdrukvoorbeeld weergeven?

FXlsApp.ActiveWindow.SelectedSheets.PrintPreview;

Hoe maak je tekst in cellen vetgedrukt?

Var-rij: geheel getal; // Stringindex Kol: geheel getal; // Celindex TextSelStart: geheel getal; // Beginnend met het teken TextSelLength: geheel getal; // Aantal geselecteerde tekens begint met FXlsApp.Cells.Characters(TextSelStart, TextSelLength).Font.Bold:= True; einde;

Hoe rijhoogte automatisch aanpassen voor een gelijmde cel?

Var merge_area: variant; cell_width, cellen_width, i: geheel getal begin // Bewaar het bereik van samengevoegde cellen in een variabele merge_area:= FXlsApp.Range["D5"].MergeArea;// Bewaar de breedte van de cel waarvoor we de hoogte cell_width:= FXlsApp.Range["D5"].ColumnWidth;

cellen_breedte:= 0;

for i:= 1 to merge_area.Columns.Count do // Haal de totale breedte op van alle kolommen van het samengevoegde bereik cell_width:= cell_width + merge_area.Columns[i].ColumnWidth;

// Maak de cellen merge_area.UnMerge ongedaan;

// Stel de breedte van de cel van interesse gelijk aan de totale breedte FXlsApp.Range["D5"].ColumnWidth:= cell_width;

// Telefoongesprek standaard methode autofit rijhoogte FXlsApp.Rows.EntireRow.AutoFit;

// Retourneer de oorspronkelijke breedte van de betreffende cel FXlsApp.Range["D5"].ColumnWidth:= cell_width;

// Lijm het bereik weer aan elkaar merge_area.Merge; einde;

Hoe krijg ik het gebruikte celbereik?
Resultaat:= exApp.ActiveSheet.UsedRange;

Hoe krijg ik een kolomletter per index?

Gebruikt wiskunde; *** functie ColIdxToStr(const Col: geheel getal): string const CharsCount: geheel getal = 26;

Offset: geheel getal = 64; var Rang: byte;

Kol, Tmp: geheel getal; begin Resultaat:= "";

terwijl Col > 0 wel begint. Rang:= 0; Tmp:=Kol; terwijl Tmp > CharsCount wel begint met Tmp:= Ceil(Tmp / CharsCount - 1);

Inc(Rang);

einde; Resultaat:= Resultaat + Chr(Tmp + Offset);

Inc(Rang);

Col:= Col - Trunc(Power(CharsCount,Rang)) * Tmp;

einde; einde;
IN

deze recensie

Excel.DisplayAlerts:=Onwaar;

Excel op het scherm tonen of verbergen:

Excel.Visible:= Waar;
Excel.Visible:= Onwaar;

De inhoud van het actieve Excel-werkblad afdrukken:

Excel.ActiveSheet.PrintOut;

Gegevens lezen/schrijven in EXCEL

U kunt als volgt toegang krijgen tot een cel in de huidige Excel-werkmap:

Excel.Range["b2"]:="Hallo!"; // schrijf een waarde naar een cel
s:=Excel.Bereik["b2"]; // leeswaarde uit cel

Waarbij b2 het celadres is.

Of gebruik de R1C1-linkstijl:

Excel.Range]:="Hallo!";

Waar is de celcoördinaat.

Helemaal niet, Excel-cel U kunt elke waarde toewijzen (teken, geheel getal, breuk, datum) en Excel stelt de standaardopmaak in de cel in.

Cellen opmaken in EXCEL

U kunt als volgt een groep cellen selecteren (selecteren) voor later werk:

Excel.Bereik, Excel.Cellen].Selecteren;
// of
Excel.Range["A1:C5"].Selecteer;

In dit geval wordt het gebied tussen de cellen A1 en C5 geselecteerd.

Nadat u de selectie heeft gemaakt, kunt u het volgende instellen:
1) Cellen samenvoegen:

Excel.Selection.MergeCells:=Waar;

2) Woordterugloop:

Excel.Selection.WrapText:=Waar;

3) Horizontale uitlijning:

Excel.Selectie.HorizontaleUitlijning:=3;

Indien ingesteld op 1, wordt de standaarduitlijning gebruikt. Wanneer ingesteld op 2, is de uitlijning links, 3 gecentreerd en 4 rechts. 4) Verticale uitlijning

Excel.Selectie.VerticalAlignment:=1;

De toegewezen waarden zijn hetzelfde als de horizontale uitlijning.
5) Rand voor cellen:

Indien ingesteld op 1, worden celranden getekend met dunne, ononderbroken lijnen.
Daarnaast kun je voor de eigenschap Borders waarden opgeven, bijvoorbeeld gelijk aan 3. Dan wordt alleen de bovenrand voor het selectieblok ingesteld:

Excel.Selectie.Borders.LineStyle:=1;

De waarde van de eigenschap Borders geeft aan verschillende combinatie cel randen.
In beide gevallen kunt u waarden gebruiken in het bereik van 1 tot 10.

Wachtwoorden gebruiken in EXCEL

Een wachtwoord instellen voor de actieve werkmap kunt u als volgt doen:

poging
// probeer een wachtwoord in te stellen
Excel.ActiveWorkbook.protect(“pass”);
behalve
// acties als een poging om een ​​wachtwoord in te stellen mislukt
einde;

Waar pass het wachtwoord is dat voor het boek moet worden ingesteld.

Het verwijderen van een wachtwoord uit een boek is vergelijkbaar, gebruik de opdracht

Excel.ActiveWorkbook.Unprotect("pass");

Een wachtwoord voor het actieve blad instellen of verwijderen Excel-werkmappen geproduceerd door teams

Excel.ActiveSheet.protect("pass"); // wachtwoord instellen
Excel.ActiveSheet.Unprotect("pass"); // verwijder wachtwoord

Waar pass is het wachtwoord dat is ingesteld om het boek te beschermen.

Hulpwerkzaamheden in EXCEL

Rijen verwijderen met een opwaartse verschuiving (bij het uitvoeren van deze acties worden rijen van 5 tot en met 15 verwijderd):

Excel.Rijen["5:15"].Selecteren;
Excel.Selectie.Verwijderen;

Een bevriezingsgebied instellen op het actieve Excel-werkblad:

// maak het gebied vrij als dit is ingesteld
Excel.ActiveWindow.FreezePanes:=False;
// selecteren de gewenste cel, V in dit geval D3
Excel.Range["D3"].Selecteer;
// stel het gebied in dat moet worden bevroren
Excel.ActiveWindow.FreezePanes:=Waar;


Werken met Excel van Delphi

In dit artikel laat ik zien hoe je ermee kunt werken MS Excel van Delphi. Dit artikel kan nuttig zijn voor mensen die willen leren hoe ze verschillende kunnen maken Excel-rapporten van programma's die erin zijn geschreven Delphi. Het artikel bevat referentiegegevens die nodig zijn om mee te werken MS-Excel. Hier vindt u informatie over hoe:

Sluit de Excel-interface correct aan en ontkoppel deze;
- Hoe u de lettergrootte, kleur en type kunt wijzigen;
- Hoe u een reeks cellen selecteert, samenvoegt, vult en vermenigvuldigt;
- Hoe u tekst roteert en centreert;
- Hoe celranden te tekenen;
- Hoe u een formule in een cel invoert en nog veel meer...

Dus laten we beginnen...

We gaan door de module heen ComObj, hiervoor in gebruikt moet een module worden toegevoegd ComObj en moduul Excel_TLB(Voor MSExcel 2007).

Gebruikt……, ComObj, Excel_TLB;

Module Excel_TLB bevat het nodige constanten om mee te werken Excel hoef je deze niet aan te sluiten, maar dan zul je handmatig de waarden van alle gebruikte constanten uit deze module moeten invoeren. De waarden van de constanten zijn te vinden in de module of op internet, maar voor verschillende versies MS-Excel ze zijn anders.
Aandacht!!! Module Excel_TLB in andere versies MS-Excel kan anders genoemd worden. Voordat u de module aansluit Excel_TLB, je moet de bibliotheek importeren Excel. Om dit te doen, selecteert u Component->Component importeren->Een typebibliotheek importeren-> wij vinden MS-Excel en volg de instructies.

In het gedeelte met de beschrijving van de variabelen moeten we beschrijven type variabele Variant of OleVariant om de interface aan te sluiten Excel. Ik heb de variabele beschreven excelleren.

Formulier1: TForm1;
excelleren : variant;// Variabele waarin het object wordt gemaakt EXCEL

Een document maken

Aandacht!!! Telkens wanneer u een interfaceobject maakt, verpakt u de aanmaakprocedure in een foutafhandelingsmodule:
poging
maak een interface;
een rapport genereren;
laat de interface los;
Behalve
omgaan met fouten;
laat de interface los;
einde;

poging
// maak een EXCEL-object

// Om de vraag over het opslaan van het document niet te stellen
excel.DisplayAlerts:= vals;

// creëren nieuw document werkboek
excel.WorkBooks.Toevoegen;

//of laad het vanuit de programmamap
excel.WorkBooks.Open(GetCurrentDir() + "\report.xls");

( GetCurrentDir() - retourneert het pad naar de map met het programma)

// Maak het zichtbaar deze functie na het debuggen en testen is het beter om het aan het einde te gebruiken, na het genereren van het rapport (dit versnelt het proces van het uitvoeren van gegevens naar het rapport)
excel.Zichtbaar:= waar;

//stel het type formules in het R1C1-formaat in
excel.Application.ReferenceStyle:= xlR1C1;

// stel het formuletype in in A1-formaat
excel.Application.ReferenceStyle:= xlA1;

// Stel de naam in van het eerste en tweede blad
excel.WorkBooks.WorkSheets.Name:= "Rapport1";
excel.WorkBooks.WorkSheets.Name:= "Rapport2";

// stel de getalnotatie in voor de getalnotatie van de eerste en vierde kolom
excel.WorkBooks.WorkSheets.Columns.NumberFormat:= "0,00";
excel.WorkBooks.WorkSheets.Columns.NumberFormat:= "0,0";

// stel de breedte van de eerste en tweede kolom in
excel.WorkBooks.WorkSheets.Columns.ColumnWidth:= 10;
excel.WorkBooks.WorkSheets.Columns.ColumnWidth:= 20;

// stel de stijl, kleur, grootte en lettertype in voor de eerste rij
excel.WorkBooks.WorkSheets.Rows.Font.Bold:= Waar; //vet
excel.WorkBooks.WorkSheets.Rows.Font.Color:= clRed; // kleur rood
excel.WorkBooks.WorkSheets.Rows.Font.Size:= 12; //maat 12
excel.WorkBooks.WorkSheets.Rows.Font.Name:= "Times New Roman"; // lettertype

// celwaarden 1.4 en 2.4 toewijzen (1 - rij, 4 - kolom)
excel.WorkBooks.WorkSheets.Cells := "En op deze manier kunt u een waarde in de cel invoeren";
excel.WorkBooks.WorkSheets.Cells := "En op deze manier kunt u een waarde in de cel invoeren";

//voer de formule "=b5+c4" in cel "A12" in
excel.WorkBooks.WorkSheets.Range["A12"].Formule:="=b5+c4";

// Lijn de eerste rij verticaal uit met het midden
excel.WorkBooks.WorkSheets.Rows.VerticalAlignment:= xlCenter;

// Lijn de eerste rij horizontaal uit met het midden
excel.WorkBooks.WorkSheets.Rows.HorizontalAlignment:= xlCenter;

// Lijn de cel links uit
excel.WorkBooks.WorkSheets.Cells.HorizontalAlignment:= xlLeft;

// Lijn de cel naar rechts uit
excel.WorkBooks.WorkSheets.Cells.HorizontalAlignment:= xlRight;

// Cellen samenvoegen "A1:A8"
excel.WorkBooks.WorkSheets.Range["A1:A8"].Samenvoegen;

// Draai de woorden in een hoek van 90 graden voor de tweede rij
excel.WorkBooks.WorkSheets.Rows.Orientatie:= 90;

// Draai de woorden in een hoek van 45 graden voor het celbereik "B3:D3"
excel.WorkBooks.WorkSheets.Range["B3:D3"].Oriëntatie:= 45;

// teken de grenzen van het geselecteerde bereik naar links
excel.Selection.Borders.LineStyle:= xlContinuous; // effen lijnstijl
excel.Selection.Borders.Weight:= xlMedium;// lijndikte

// teken de grenzen van het geselecteerde bereik bovenaan

excel.Selection.Borders.Weight:= xlMedium;

// teken de grenzen van het geselecteerde bereik lager

excel.Selection.Borders.Weight:= xlMedium;

// teken de grenzen van het geselecteerde bereik naar rechts

excel.Selection.Borders.Weight:= xlMedium;

// teken de grenzen van het geselecteerde bereik verticaal naar binnen

excel.Selection.Borders.Weight:= xlMedium;

// teken de grenzen van het geselecteerde bereik horizontaal naar binnen

excel.Selection.Borders.Weight:= xlMedium;

//vul het geselecteerde bereik automatisch in
//vul bijvoorbeeld het gebied van de cellen "A10:C10" met het woord "hallo"
//en vermenigvuldig het met nog eens vijf cellen "A10:C15"

excel.WorkBooks.WorkSheets.Range["A10:C10"].Value:="hallo";

//selecteer het celbereik "A10:C10"
excel.WorkBooks.WorkSheets.Range["A10:C10"].Selecteren;

//automatisch vullen (kopiëren) het gebied van cellen "A10:C15" met het geselecteerde bereik
excel.selection.autofill(excel.WorkBooks.WorkSheets.Range["A10:C15"],xlFillDefault);

// schakel waarschuwingen uit om geen vragen te stellen over opslaan en andere
excel.DisplayAlerts:= Onwaar;

// sla het document op Excel-formaat 97-2003
excel.ActiveWorkBook.Saveas(GetCurrentDir() + "\report.xls",xlExcel8);

// sla het document op in het huidige Excel 2007-formaat
excel.ActiveWorkBook.Saveas(GetCurrentDir() + "\report.xlsx");

// sluit alle boeken
excel.Werkboeken.Sluiten;

// sluit Excel
excel.Applicatie.quit;

// maak de interfaces vrij
excel:= Niet toegewezen;

// fouten afhandelen

// sluit alle boeken
excel.Werkboeken.Sluiten;

// sluit Excel
excel.Applicatie.quit;

// maak de interfaces vrij
excel:= Niet toegewezen;
einde;
einde;

Bij het werken met Excel-blad we kunnen de volgende opties gebruiken:
- werk met het gebied Bereik["B3:D3"];
- werk met de cel Cellen waarbij 2 een rij is en 4 een kolom;
- werk met rijen Rijen of een reeks rijen Rijen["1:5"];
- werk met kolommen Kolommen of een reeks kolommen Kolommen["A:I"];

Bereik["A1"] en Cellen betekenen hetzelfde.

Nadat het document is gegenereerd of nadat er een fout is opgetreden, moet u de interfaces correct vrijgeven.
Anders bij het sluiten Excel het verdwijnt van het scherm, maar als je Taakbeheer opent, blijft het daar hangen en of dit proces niet voltooid, dan zullen ze bij elke nieuwe start steeds meer accumuleren totdat de computer begint te bevriezen. Daarom is het absoluut noodzakelijk om alle bijbehorende interfaces vrij te geven Excel met zijn boeken en bladen.

Bijvoorbeeld als volgt:
// sluit alle boeken
excel.Werkboeken.Sluiten;

// sluit Excel
excel.Applicatie.quit;

// maak de interfaces vrij
blad:=Niet toegewezen; //bladinterface als deze is gemaakt
WorkBook:= Niet toegewezen;//werkmapinterface als deze is gemaakt
excel:= Niet toegewezen;//interface van het voorstel zelf als het is gemaakt

Hieronder ziet u een voorbeeld van de uitvoer in Excel uit Delphi tafels van vermenigvuldiging met gedetailleerd commentaar.

Eenheid Eenheid1;

Gebruik
Windows, berichten, SysUtils, varianten, klassen, afbeeldingen, besturingselementen, formulieren,
Dialogen, comobj, StdCtrls, Excel_TLB;

Type
TForm1 = klasse(TForm)
Knop 1: T-knop;
procedure Button1Click(Afzender: TObject);
privé
(Privéaangiften)
publiek
(Openbare verklaringen)
einde;

Var
Formulier1: TForm1;
excel: variant; // Variabele waarin het EXCEL-object wordt gemaakt
MijnData: variant; // Variabele waarin de tafel van vermenigvuldiging wordt gevormd
i,j:geheel getal;
uitvoering

Procedure TForm1.Button1Click(Afzender: TObject);
beginnen
poging
// EXCEL-object
excel:= CreateOleObject("Excel.Applicatie");
// Om de vraag over het opslaan van het document niet te stellen
excel.DisplayAlerts:= vals;
// nieuw document
excel.WorkBooks.Toevoegen;

//declareer een variantarray
Mijngegevens:= VarArrayCreate(,varVariant);
voor I:= 1 tot 9 doen
voor J:= 1 tot 9 doen
MijnGegevens:=i*j;

// Cellen samenvoegen "A1:I1"
excel.WorkBooks.WorkSheets.Range["A1:I1"].Samenvoegen;
//Schrijf de titel
excel.WorkBooks.WorkSheets.Range["A1"].Value:="Tabellen van vermenigvuldiging";
// Lijn de titel uit in het midden
excel.WorkBooks.WorkSheets.Range["A1"].HorizontalAlignment:= xlCenter;
// stel de breedte van kolommen A in tot I
excel.WorkBooks.WorkSheets.Columns["A:I"].ColumnWidth:= 3;

//selecteer het gebied van de tafel van vermenigvuldiging ["A2:I10"] en teken randen
excel.WorkBooks.WorkSheets.Range["A2:I10"].select;
// teken de grenzen van het geselecteerde bereik naar links
excel.Selection.Borders.LineStyle:= xlContinu; // lijnstijl is effen
excel.Selection.Borders.Weight:= xlThin // lijndikte
// teken de grenzen van het geselecteerde bereik bovenaan
excel.Selection.Borders.LineStyle:= xlContinu;
excel.Selection.Borders.Weight:= xlThin;
// teken de grenzen van het geselecteerde bereik lager
excel.Selection.Borders.LineStyle:= xlContinu;
excel.Selection.Borders.Weight:= xlThin;
//teken de grenzen van het geselecteerde bereik naar rechts
excel.Selection.Borders.LineStyle:= xlContinu;
excel.Selection.Borders.Weight:= xlThin;
// teken de grenzen van het geselecteerde bereik verticaal naar binnen
excel.Selection.Borders.LineStyle:= xlContinu;
excel.Selection.Borders.Weight:= xlThin;
// teken de grenzen van het geselecteerde bereik horizontaal naar binnen
excel.Selection.Borders.LineStyle:= xlContinu;
excel.Selection.Borders.Weight:= xlThin;

//wijs het bereik ["A2:I10"] toe aan de waarden van de variantarray MyData, dit versnelt het werk aanzienlijk dan uitvoer //celgewijs

Excel.WorkBooks.WorkSheets.Range["A2:I10"].Value:=Mijngegevens;

// Maak het zichtbaar
excel.Zichtbaar:= waar;
// maak de interfaces vrij
Mijngegevens:= Niet toegewezen;
excel:= Niet toegewezen;
Behalve
showmessage("Let op! Er is een fout opgetreden tijdens het maken van de MS Excel-applicatie");
// sluit Excel
excel.Applicatie.quit;
// maak de interfaces vrij
Mijngegevens:= Niet toegewezen;
excel:= Niet toegewezen;
einde;
einde;

Bij het schrijven van dit artikel is materiaal van de site gebruikt

Je kunt bij elke fase van dit model stoppen en het maandenlang bestuderen. Als er een speciale behoefte is om aanvullende eigenschappen en methoden te bestuderen, komen we zeker terug om te studeren. Laten we nu aan de slag gaan in Delphi met werkmapbladen.

2. Hoe activeer ik een Excel-werkmapblad?

Zoals u weet bij het maken van een lege werkmap Excel voegt automatisch 3 toe aan dit boek blanco vel. Om met een specifiek blad te werken ( Werkblad of gewoon Laken) dit blad moet geactiveerd zijn. Eén manier om een ​​werkmapblad te activeren Excel V Delphi ziet er zo uit:

resourcestring rsEInvalidSheetIndex = "Ongeldige index opgegeven voor WorkBooks. Bladactivering afgebroken"; rsEInvalidSheetActivate ="Bladactivering voltooid met fout"

; functie ActivateSheet(WBIndex: geheel getal; Bladnaam: string ) : boolean ; var i: geheel getal ;

begin Resultaat: = false; als WBIndex › MijnExcel. Werkboeken. Tel en verhoog de uitzondering. Maken (rsEInvalidSheetIndex); probeer voor i : = 1 naar MyExcel. Werkboeken [WBIndex]. Lakens. Tel als AnsiLowerCase (MyExcel. WorkBooks [ WBIndex]. Spreadsheets . Item [ i]. Naam ) = AnsiLowerCase (Bladnaam) en begin vervolgens met MyExcel. Werkboeken[WBIndex]. Lakens. Artikel[i]. Activeren;

Resultaat: = waar; pauze; einde ; behalve uitzondering verhogen. Maken (rsEInvalidSheetActivate); einde ; einde ;

Hier worden de functieparameters ingesteld op de werkmapindex (WBIndex) in de verzameling

Werkboeken Werkblad.

en de naam van het blad.

Als u wilt, kunt u hetzelfde blad per index activeren in de collectie Werkblad.

Werkbladen

- tegelijkertijd is de functie zelf enigszins vereenvoudigd (de voorwaarde voor het controleren van de bladnaam is niet vereist). Werkblad Ook als je dat zeker weet 30 op dit moment

Omdat de werkmap die u nodig hebt actief is, kunt u het gebruik van een extra variabele (werkmapindex WBIndex) vermijden en het blad als volgt activeren: MijnExcel. ActiefWerkboek. Lakens. Artikel[i]. Activeren;
Laten we nu eens nader kijken naar de methoden die door het object worden gebruikt 3. Excel-werkbladbladmethoden
Laten we nu het object in meer detail bekijken De figuur toont de methoden die ik ooit in mijn werk heb gebruikt. Totaal voorwerp totalen verschillende methoden die u kunt gebruiken.
Methode
Beschrijving
Activeren Werkblad
Maakt het huidige blad actief. Hoe de methode werkt hebben we al besproken.
berekent alles
open boeken
, een specifiek blad in een boek, of opgegeven bereik cellen op een blad controleer de spelling op het geselecteerde blad
slaat alle wijzigingen in het bestand op verwijdert het huidige blad blad selectie

kopieert het blad naar een andere locatie in de werkmap

plakt de inhoud van het klembord in een werkblad retourneert een object dat een enkel diagram vertegenwoordigt (object GrafiekObject Werkblad GrafiekObjecten

) op het blad

het blad verplaatsen. Deze methode is vergelijkbaar met de methode

Kopiëren . Het enige verschil is dat na het plakken het gekopieerde blad uit het boek wordt verwijderd is niet alleen mogelijk voor een specifiek werkblad in een Excel-werkmap. Laten we eens kijken naar de opties voor het aanroepen van de Calculate-methode.

var MyExcel: OleVariant;

MijnExcel. Berekenen

het onderstaande codefragment berekent het actieve blad

MijnExcel. ActiefWerkboek. ActiefWerkblad. Berekenen

Laten we alle formules in de kolommen A, B en C berekenen:

MijnExcel. ActiefWerkboek. ActiefWerkblad. Gebruikt bereik. Kolommen("A:C"). Berekenen

Controleer de spellingmethode

De methodeaanroep ziet er als volgt uit:. uitdrukking

CheckSpelling(CustomDictionary, IgnoreHoofdletters, AlwaysSuggest, SpellLang) retourneert een object dat een enkel diagram vertegenwoordigt (object Tegelijkertijd, als Werkblad).

het vel moet uitsteken ( Parameter MijnExcel. ActiefWerkboek. Lakens. Artikel[i]. Activeren;
Type Variant Aangepastwoordenboek Met
een tekenreeks die de naam aangeeft van het gebruikerswoordenboekbestand dat in aanmerking wordt genomen als het woord niet in het hoofdwoordenboek voorkomt. Als dit argument wordt weggelaten, wordt het standaardwoordenboek gebruikt Variant NegerenHoofdletters WAAR , indien nodig, zodat MicrosoftExcel woorden overgeslagen die in hoofdletters waren geschreven. Vals om te MicrosoftExcel controleer alle woorden. Als dit argument wordt weggelaten, dan huidige instellingen
Excel. Variant NegerenHoofdletters Altijd voorstellen om te , om te woorden overgeslagen die in hoofdletters waren geschreven. een lijst met suggesties voor andere spellingen weergegeven wanneer een verkeerd gespeld woord werd gedetecteerd. om te , naar wachtte op input correcte spelling
. Als dit argument wordt weggelaten, worden de huidige instellingen gebruikt. Variant SpelLang woordenboek taal. Kan de waarden van een van de constanten aannemen MsoTaalID , bijvoorbeeld voor de Russische taal SpelLang = 1049 , voor Engels (VS) SpelLang = 1033

enz. Meer details over taalidentificaties.

Hoe grammatica controleren op Excel-blad in Delphi?

MijnExcel. ActiefWerkboek. ActiefWerkblad. CheckSpelling(CustomDictionary:=EmptyParam, IgnoreUppercase:=false, AlwaysSuggest:=EmptyParam, SpellLang:=1033) MS-Excel in dit geval controleert het huidige blad, inclusief het controleren van woorden uit hoofdletters . De verificatietaal is Russisch. Houd er rekening mee dat we, om de methode aan te roepen, expliciet hebben gespecificeerd welke parameter aan welke waarde moet worden toegewezen. Bovendien gebruikten we om elke parameter over te slaan LeegParam Delphi (lege parameter), die in staat OleVariant.

is een variabele van het type Delphi Het is duidelijk dat deze methode voor het aanroepen van methoden (met expliciete aanduiding van alle parameters) niet helemaal handig voor u is en niet op grote schaal wordt toegepast bij het programmeren in het Engels. Excel .

, maar niettemin is dit de enige manier en geen andere manier om de gebruikte methoden aan te roepen

SaveAs-methode

Een Excel-werkblad opslaan.

expression.SaveAs(Bestandsnaam, Bestandsformaat, Wachtwoord, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru, TextCodepage, TextVisualLayout, Lokaal)
het vel moet uitsteken ( Parameter MijnExcel. ActiefWerkboek. Lakens. Artikel[i]. Activeren;
Bestandsnaam Variant een tekenreeks die de naam vertegenwoordigt van het bestand dat moet worden opgeslagen. Moet worden gespecificeerd volledige pad naar het bestand, anders wordt het bestand in de map opgeslagen Excel .
Bestandsformaat Variant Het bestandsformaat dat wordt gebruikt bij het opslaan. Standaard wordt het bestand opgeslagen in het formaat dat u hebt geselecteerd laatste keer V Excel.
Wachtwoord Variant wachtwoord voor het bestand (niet meer dan 15 tekens). Het wachtwoord is hoofdlettergevoelig.
WriteResWachtwoord Variant het wachtwoord dat wordt gebruikt om wijzigingen in de werkmap aan te brengen. Als er geen wachtwoord is opgegeven, wordt het boek geopend in de modus Alleen-lezen.
Alleen-lezenAanbevolen Variant als de parameter gelijk is NegerenHoofdletters Wanneer u een bestand opent, verschijnt er een bericht op het display waarin wordt aanbevolen het bestand te openen voor alleen-lezen.
Maak een back-up Variant NegerenHoofdletters, om een ​​back-upbestand te maken
ToevoegenToMru Variant NegerenHoofdletters, om de naam van het opgeslagen bestand onlangs aan de lijst toe te voegen bestanden openen in het hoofdmenu Excel
Tekstcodepagina En TekstVisueleLay-out Variant momenteel niet gebruikt en behouden voor achterwaartse compatibiliteit
Lokaal Variant Niet vereiste parameter, is standaard gelijk aan Vals.Betekenis NegerenHoofdletters- bestanden opslaan van Microsoft-taal Excel (inclusief configuratiescherminstellingen).

MijnExcel.ActiveWorkBook.ActiveWorkSheet.SaveAs("C\:MijnExcelFile.xls")

In dit geval worden bij het opslaan de standaardinstellingen gebruikt.

Als u wilt opslaan Excel-bestand in een ander formaat en vervolgens in de parameter Bestandsformaat u kunt een van de enumeratorwaarden gebruiken xlBestandsformaat . Enkele betekenissen xlBestandsformaat worden weergegeven in de onderstaande tabel:

Naam Betekenis MijnExcel. ActiefWerkboek. Lakens. Artikel[i]. Activeren; Bestandsextensie
xlCSV6 CSV*.csv
xlExcel856 Excel 97-2003-werkmap*.xls
xlHtml44 HTML-formaat*.htm; *.HTML
xlOpenDocumentSpreadsheet60 OpenDocument-spreadsheet*.ods
xlOpenXMLWerkboek51 Open XML-boek*.xlsx

Laten we een kleine procedure schrijven waarmee u een Excel-blad in verschillende formaten kunt opslaan:

const xlCSV = 6; xlExcel8 = 56; xlHtml = 44;

xlOpenDocumentSpreadsheet = 60 ;

xlOpenXMLWerkboek = 51 ;

resourcestring rsESaveActiveSheet =

"Fout bij opslaan actief werkblad"

;

Kopieer een blad naar een andere locatie in de werkmap.

Een Excel-werkblad opslaan.

expression.Copy(Voor, Na)

Als u echter de parameter Voor, dan moet je het niet gebruiken Na en omgekeerd. Ik wil uw aandacht vestigen op het feit dat het het BLAD is dat wordt aangegeven, en niet de bladindex.

Hoe Excel-blad naar Delphi kopiëren?

MijnExcel.ActiveWorkBook.WorkSheets.Item.Copy(Na:=MijnExcel.ActiveWorkBook.WorkSheets.Item)

In dit geval wordt het eerste blad gekopieerd en na het derde geplakt.

Plak methode

Plak de inhoud van het klembord in een Excel-werkblad.

Een Excel-werkblad opslaan.

expression.Paste(Bestemming, Link)

Hoe plak ik de inhoud van het klembord in een Excel-blad in Delphi?

MijnExcel.ActiveWorkBook.ActiveSheet.Paste(Bestemming:=MijnExcel.ActiveWorkBook.ActiveSheet.Range("D1:D5"))

In dit geval wordt de inhoud van de buffer ingevoegd in kolom D in de rijen 1 tot en met 5. Houd er rekening mee dat als de inhoud van de buffer niet aan de voorwaarde voldoet, er bijvoorbeeld maar 1 getal in de buffer staat, Dan uitzonderlijke situatie.

Methode cellen op een blad

Retourneert een object dat een enkel diagram vertegenwoordigt (object opgegeven bereik) of de verzameling van alle diagrammen (object cellen op een blad) op het blad.

Een Excel-werkblad opslaan.

expressie.ChartObjects

Hoe krijg ik een grafiek in een Excel-werkblad in Delphi?

MijnExcel.ActiveWorkBook.ActiveSheet.ChartObjects

In dit geval wordt de eerste ontvangen.

Verplaats methode

Een blad verplaatsen. Deze methode is vergelijkbaar met de . Het enige verschil is dat na het plakken het gekopieerde blad uit het boek wordt verwijderd.

Hier is het deel van de methoden waarmee ik ooit heb gewerkt Excel V Delphi . In het algemeen kan gezegd worden dat in Delphi kan worden gecontroleerd MS-Excel niet slechter dan wanneer je rechtstreeks met deze applicatie werkt, het belangrijkste is om niet te vergeten welke methode of eigenschap waarvoor verantwoordelijk is :). Om het niet te vergeten, heb ik een kleine MindMap gemaakt, die ik regelmatig zal aanvullen en bijwerken. Door op de link te klikken, kunt u Excel-objecten zien, de methoden die ze gebruiken, de methodeparameters en hun typen in overeenstemming Delphi-typen. Over het algemeen een klein grafisch spiekbriefje voor degenen die graag aan Excel sleutelen in Delphi.

In dit artikel zullen we kijken naar de basisconstructies waarmee u vanuit Delphi toegang krijgt tot een MS Excel-werkmap.

Het organiseren van toegang tot het EXCEL-boek

Om in het programma met MS Excel te kunnen communiceren, moet u de ComObj-module gebruiken

Gebruikt ComObj;

en declareer een variabele om toegang te krijgen tot MS Excel hierna type:

Var MsExcel: Variant;

In het eenvoudigste geval kan het initialiseren van een Excel-variabele als volgt worden gedaan:

MsExcel:= CreateOleObject("Excel.Applicatie");

Offset: geheel getal = 64; var Rang: byte;

MsExcel.Werkboeken.Toevoegen;

Een bestaand boek openen (waarbij pad het pad is naar het bestand met de xls-extensie):

MsExcel.Werkboeken.Open;

einde; Resultaat:= Resultaat + Chr(Tmp + Offset);

MsExcel.Werkboeken.Open;

Col:= Col - Trunc(Power(CharsCount,Rang)) * Tmp;

MsExcel.ActiveWorkbook.Close; MsExcel.Applicatie.Quit;

Blokkeren van MS Excel-verzoeken (bevestigingen, meldingen), bijvoorbeeld het blokkeren van een verzoek om een ​​bestand op te slaan:

MsExcel.DisplayAlerts:=False;

Excel op het scherm weergeven:

MsExcel.Visible:= Waar;

of verberg:

MsExcel.Visible:= Onwaar;

De inhoud van het actieve MS Excel-blad afdrukken:

MsExcel.ActiveSheet.PrintOut;

Gegevens lezen/schrijven in EXCEL

U kunt als volgt toegang krijgen tot een cel in de huidige Excel-werkmap:

Een waarde naar een cel schrijven:

MsExcel.Range["B2"]:="Hallo!";

Een waarde uit een cel lezen:

S:=MsExcel.Range["B2"];

Waar B2- mobiel adres.

Of gebruik de R1C1-linkstijl:

MsExcel.Range]:="Hallo!";

Waar - celcoördinaat.

Over het algemeen kunt u elke waarde aan een Excel-cel toewijzen (teken, geheel getal, breuk, datum), en mevrouw Excel zal de standaardopmaak in de cel instellen.

Cellen opmaken in EXCEL

U kunt als volgt een groep cellen selecteren (selecteren) voor later werk:

MsExcel.Range, MsExcel.Cells].Selecteren; // of MsExcel.Range["A1:C5"].Selecteer;

in dit geval wordt het gebied tussen de cellen A1 en C5 geselecteerd.

Nadat u een selectie heeft gemaakt, kunt u het samenvoegen van cellen, tekstomloop en horizontale en instellen verticale uitlijning:

// cellen samenvoegen MsExcel.Selection.MergeCells:=True; // wrap volgens MsExcel.Selection.WrapText:=True; // horizontale uitlijning MsExcel.Selection.HorizontalAlignment:=3; // verticale uitlijning MsExcel.Selection.VerticalAlignment:=1;

Voor verticale en horizontale uitlijning de volgende waarden worden gebruikt:

1 - standaarduitlijning wordt gebruikt
2 - linker uitlijning
3 - in het midden
4 - aan de rechterkant.

Celgrens

Indien ingesteld op 1, worden celranden getekend met dunne, ononderbroken lijnen.

Daarnaast kun je voor de eigenschap Borders waarden opgeven, bijvoorbeeld gelijk aan 3. Dan wordt alleen de bovenrand voor het selectieblok ingesteld:

MsExcel.Selection.Borders.LineStyle:=1;

De waarde van de eigenschap Borders specificeert een andere combinatie van celranden. In beide gevallen kunt u waarden gebruiken in het bereik van 1 tot 10.

Wachtwoorden gebruiken in EXCEL

Een wachtwoord instellen voor de actieve werkmap kunt u als volgt doen:

Probeer // probeer een wachtwoord in te stellen MsExcel.ActiveWorkbook.protect("pass"); behalve // ​​acties als een poging om een ​​wachtwoord in te stellen mislukt;

Waar doorgang- stel een wachtwoord in voor het boek.

Het verwijderen van een wachtwoord uit een boek is vergelijkbaar, gebruik de opdracht

MsExcel.ActiveWorkbook.Unprotect("pass");

Waar doorgang

Het instellen en verwijderen van een wachtwoord voor het actieve blad van een Excel-werkmap gebeurt met behulp van de opdrachten

MsExcel.ActiveSheet.protect(“pass”); // het wachtwoord instellen MsExcel.ActiveSheet.Unprotect("pass"); // verwijder wachtwoord

Waar doorgang- wachtwoord ingesteld om het boek te beschermen.

Hulpwerkzaamheden in EXCEL

Rijen verwijderen met shift omhoog:

MsExcel.Rows["5:15"].Selecteren; MsExcel.Selectie.;

Bij het uitvoeren van deze acties worden de regels 5 t/m 15 verwijderd.

Stel een vriesgebied in op het actieve Excel-werkblad

// maak het gebied vrij als het is ingesteld MsExcel.ActiveWindow.FreezePanes:=False; // selecteer de gewenste cel, in dit geval D3 MsExcel.Range["D3"].Select; // stel het bevriezingsgebied in MsExcel.ActiveWindow.FreezePanes:=True;

De actieve Excel-werkmap opslaan