Werken met Excel vanuit Delphi. 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, die in het register kijkt 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:
HRESULTAAT— 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:

Procedure btnConnectClick(Afzender: TObject); begin, zo niet IsXlsInstall, raise dan Exception.Create("MS Excel-applicatie niet gevonden op 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 wat toevoegt nieuw boek of opent een eerder opgeslagen bestand 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 in 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 ontdekken. 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.

Besteed aandacht aan de eigenaardigheid van het werken met arrays in VBA. Indexen in arrays in Delphi staan ​​tussen vierkante haakjes, terwijl ze in staan 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 op het gebied van 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 cel van interesse 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;

Inhoud afdrukken actief blad Excel:

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"]; // waarde uit cel lezen

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) Tekstterugloop:

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:

Wanneer 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");

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

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 gebied instellen dat aan het actieve moet worden vastgemaakt Excel-blad:

// 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;


Hallo, in dit artikel zal ik je vertellen hoe je het in je applicatie (programma) kunt gebruiken Delphi DB in de vorm MS-Excel. Ja ja precies MS-Excel. Er is hier niets ingewikkelds. Laten we eerst ons blad in MS Excel invullen. De eerste regel in elke kolom neemt altijd onze applicatie als de naam van de kolommen, dat wil zeggen dat deze niet de naam van de kolommen op deze manier gebruikt: A, B, C enzovoort. Dus in de eerste regel van kolom A en kolom B schreef ik Volledige naam En Cijfer respectievelijk voor elke kolom. Dit zullen onze rubrieken zijn, en hieronder heb ik de gegevens ingevuld die in mijn database zullen staan, nou, schrijf zelf de namen en beoordelingen. Onze database is dus klaar. Laten we er nu een verbinding mee maken. er wordt een verbinding tot stand gebracht die vergelijkbaar is met MS-toegang, dus er is hier niets ingewikkelds. Op het formulier hebben we oude componenten:

  • TDBGrid
  • TADOQuery
  • TADO-verbinding
  • TGegevensbron

Ik zal je snel vertellen hoe je deze componenten moet aansluiten, aangezien dit al door mij is gezegd.

  • TADOQuery C TADO-verbinding in eigendom - Verbinding
  • TGegevensbron Met TADOQuery in eigendom Gegevensset
  • TDBGrid C TGegevensbron in eigendom Gegevensbron

// Telefoongesprek TADO-verbinding stel de eigenschap in LangePromt V Vals. Het lijkt kleine opstelling klaar. Nu komen we bij de directe verbinding. In eigendom TADO-verbinding- Verbindingsreeks klik op de knop " “, dan hebben we een kijkvenster

Klik op de knop " Bouwen..." en het volgende venster verschijnt

In dit venster selecteert u de volgende aanbieder: Microsoft OLE DB Provider voor ODBC-stuurprogramma's en druk op de knop " Volgende>>" en zie het volgende venster

Plaats in dit venster onmiddellijk een verwijzing naar “ Gebruik een verbindingsreeks" en klik op de knop " Montage“, waarna een venster verschijnt

Ga in dit venster naar het tabblad Computergegevensbron en selecteer in de lijst die verschijnt - Excel-bestanden, of beter gezegd, klik met de linkermuisknop op deze datum dubbelklikken en geef in het venster dat verschijnt het pad naar onze aan Excel-het boek dat we hebben gemaakt. Klik daarna op de knop “ OK". We hebben alle aansluitingen klaar. Ik zou graag meer willen toevoegen als je een bestand hebt Excel, waarbij uw tabel zich in dezelfde map bevindt als het programma, en vervolgens in de componenteigenschap TADO-verbinding- Verbindingsreeks het pad naar uw Excel-bestand wordt opgeschreven, wis het pad en laat alleen uw naam achter Excel bestand met de extensie, en in de eigenschap StandaardDataBase hetzelfde onderdeel, schrijf de naam van uw Excel-bestand met extensie . Wanneer u vervolgens uw toepassing start, zullen er geen fouten optreden met een onjuist opgegeven pad naar uw database. Volgende binnen TDBGrid Laten we erop dubbelklikken en 2 rijen maken in het venster dat verschijnt, dit zullen onze kolommen zijn. En ze worden gemaakt door op de knop “ Nieuw toevoegen (Ins)". Vervolgens selecteren we elke regel in de eigenschap FieldName en voor de eerste regel schrijven we: Volledige naam, sinds in Excel-file, dit is precies hoe ik de kolomnaam in de eerste regel schreef (voor de cel A1 Ik heb het zo geschreven), en door de tweede regel te markeren die is gemaakt in TDBGrid, op eigendom Veldnaam laten we schrijven - Cijfer, aangezien ik het was die deze kolomnaam schreef (in de cel A2 Ik heb het zo geschreven). Nu kunnen we onze gegevens activeren. Voor dit evenement hoofdvormAanmaken laten we het volgende schrijven

Zoals u kunt zien, dezelfde query, alleen in plaats van de naam van de tabel, zoals we hadden MS-toegang wij geven de naam van ons blad aan Excel, tussen vierkante haakjes en eindigend met $ . Zoals je kunt zien, is er niets ingewikkelds. In het volgende artikel over de database MS-Excel Ik zal je vertellen hoe je gegevens invoegt, bewerkt, enzovoort.

Ik zou willen opmerken dat als je een echte fan bent van voetbal, en vooral van het Engelse kampioenschap, dat plaatsvindt op dit moment een van de sterkste is, dan zul je waarschijnlijk erg geïnteresseerd zijn in het lezen over de voetbalclub

Wij keken in Sectie. 6.4.2 basishandelingen met betrekking tot boeken. Laten we nu verder gaan met bewerkingen met boekvellen. De verzameling werkbladen bevindt zich in de eigenschap Werkbladen van het boekobject. Deze verzameling is qua eigenschappen vergelijkbaar met de eerder besproken verzameling Werkboeken. Een blad is toegankelijk via index of via naam. Als u bijvoorbeeld met COM-servers werkt, openen en activeren de volgende instructies het eerste blad van de werkmap, vertegenwoordigd door het Excel Workbook 1-object, geven een verwijzing naar dit blad door naar de Excel Worksheet 1-variabele en activeren het blad, d.w.z. markeer het in het Excel-venster:

ExcelWorksheetl:= ExcelWorkbookl.Worksheets als ExcelWorksheet; ExcelWorksheetl.Activate(LOCALE_USER_DEFAULT);

ExcelWorksheetl:= ExcelWorkbookl.Werkbladen; ExcelWorksheetl.Activeren;

De eigenschap Werkbladen bestaat ook op het serverobject. Deze eigenschap is van toepassing op de actieve werkmap. Dus de volgende instructies voeren, wanneer u met COM-servers werkt, bewerkingen uit op de actieve werkmap door een blad daarin te openen en te activeren, waarvan de naam (bijvoorbeeld "Blad1") is opgegeven in het Editl-bewerkingsvenster:

Werkbladen als ExcelWerkblad; ExcelWorksheetl.Activate (LOKALE GEBRUIKERSSTANDAARD);

Bij het werken met OLE-automatiseringsservers zien soortgelijke verklaringen er als volgt uit:

ExcelWorksheetl:= ExcelApplicationl.Worksheets; ExcelWorksheetl.Activeren;

Als een blad met voornaam niet in het boek staat, wordt er een uitzondering gegenereerd. Dus als er een dergelijk gevaar bestaat, moet deze uitzondering bijvoorbeeld als volgt worden opgevat:

ExcelWorksheetl:= ExcelApplicatiel.

Werkbladen als ExcelWerkblad; ExcelWorksheetl.Activate(LOCALE_USER_DEFAULT); behalve

ShowMessage("We konden het blad niet openen "" + Editl.Text + """); einde;

Toevoegen nieuw blad in een werkmap met behulp van de Add-methode van het Worksheets-object:

Functie Add(Voor: OleVariant; Na: OleVariant; Aantal: OleVariant; Type_: OleVariant; lcid: Integer): IDispatch;

De parameters Voor of Na zijn het werkbladobject waarvoor of waarna de invoeging plaatsvindt. Meestal is het voldoende om slechts één van deze parameters in te stellen en de andere op EmptyParam. Als beide parameters gelijk zijn aan EmptyParam, worden nieuwe bladen ingevoegd vóór het huidige actieve blad. De parameter Count specificeert het aantal in te voegen vellen. Als deze parameter gelijk is aan EmptyParam, wordt één blad ingevoegd. De parameter Type__ bepaalt het invoegtype. Wanneer ingesteld op EmptyParam, wordt een nieuw leeg vel ingevoegd.

Wanneer u met COM-servers werkt, voegt de volgende code bijvoorbeeld één nieuw werkblad in vóór het actieve werkblad van de actieve werkmap en geeft er een verwijzing naar door naar de ExcelWorksheetl-variabele:

EmptyParam, EmptyParam, EmptyParam, EmptyParam, LOCALE_USER_DEFAULT) als ExcelWorksheet;

En de volgende code voegt twee nieuwe bladen in na het derde blad van de actieve werkmap:

Var After, Num: OleVariant; Na:= ExcelApplicatie.Werkbladen; Aantal:= 2;

ExcelWorksheetl:= ExcelApplicationl.Worksheets.Add(

EmptyParam,After,Num,EmptyParam, LOCALE_USER_DEFAULT) als ExcelWorksheet;

Bij het werken met OLE-automatiseringsservers zien soortgelijke verklaringen er als volgt uit:

ExcelWorksheetl:= ExcelApplicationl.Worksheets.Add;

ExcelWorksheetl:= ExcelApplicationl.Worksheets.Add(

Na:= ExcelApplicationl.Worksheets, Aantal:= 2);

De naam van het ingevoegde werkblad of een bestaand werkblad kan worden gewijzigd met behulp van de eigenschap Naam. Bijvoorbeeld:

ExcelWorksheetl.Name:= "Factuur"; U kunt een blad uit een werkmap verwijderen met behulp van de methode Verwijderen:

ExcelWorksheetl.Delete(LOCALE_USER_DEFAULT);

U kunt een blad afdrukken met behulp van de afdrukmethode, die niet verschilt van de vergelijkbare methode die eerder voor een boek is beschreven. Bijvoorbeeld printen huidige pagina bij het werken met COM-servers kan het als volgt worden ontworpen:

ExcelWorksheetl:= ExcelApplicationl.ActiveSheet als, ExcelWorksheet; ExcelWorksheetl.Printout(EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, LOCALE_USER_DEFAULT);

Bij het werken met OLE-automatiseringsservers blijkt het eenvoudiger:

ExcelWorksheetl:= ExcelApplicationl.ActiveSheet; ExcelWorksheetl.Afdruk;

U kunt een voorbeeld van een vel bekijken voordat u het afdrukt met behulp van de PrintPreview-methode:

Procedure PrintPreview(Wijzigingen inschakelen: OleVariant; leid: Integer);

De parameter EnableChanges geeft aan of er wijzigingen kunnen worden aangebracht tijdens het bekijken. De volgende verklaring geeft bijvoorbeeld aan bij het werken met COM-servers voorbeeld actieve blad van het boek:

(ExcelApplicationl.ActiveSheet als ExcelWorksheet).

Afdrukvoorbeeld (waar, LOCALE_USER_DEFAULT) ;

Voor OLE-servers ziet een soortgelijke verklaring er als volgt uit:

ExcelApplicationl.ActiveSheet;PrintPreview(waar);

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;

MijnExcel. ActiefWerkboek. Lakens. Artikel[i]. Activeren;

Laten we nu eens nader kijken naar de methoden die door het object worden gebruikt Werkblad.

3. Excel-werkbladmethoden

Laten we nu het object in meer detail bekijken Werkblad.

De figuur toont de methoden die ik ooit in mijn werk heb gebruikt.

Totaal voorwerp Werkblad totalen 30 verschillende methoden die u kunt gebruiken.

Methode Beschrijving
Activeren 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 Werkblad
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 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

Laten we nu elk van de hierboven gepresenteerde methoden bekijken.

Hieronder, als uitdrukking het vel moet uitsteken ( Werkblad), tenzij anders vermeld.

Bereken methode

Bereken een werkmap, blad of celbereik.

Het is vermeldenswaard dat de methodeaanroep Berekenen 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) uitdrukking Tegelijkertijd, als Werkblad).

het vel moet uitsteken ( Parameter Beschrijving
Type Variant Aangepastwoordenboek Met
een tekenreeks die de naam specificeert 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 Vals woorden overgeslagen die in hoofdletters waren geschreven. om te MicrosoftExcel controleer alle woorden. Als dit argument wordt weggelaten, dan huidige instellingen
Excel. Variant NegerenHoofdletters Altijd voorstellen om te , om te Vals een lijst met suggesties voor andere spellingen weergegeven wanneer een verkeerd gespeld woord werd gedetecteerd. om te , naar wachtte op input. Als dit argument wordt weggelaten, worden de huidige instellingen gebruikt.
SpelLang Variant 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)

in dit geval MS-Excel 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(lege parameter), die in staat Delphi vertegenwoordigt type variabele OleVariant.

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. Delphi , maar niettemin is dit de enige manier en geen andere manier om de gebruikte methoden aan te roepen Excel .

SaveAs-methode

Een Excel-werkblad opslaan.

Methodeaanroep:

expression.SaveAs(Bestandsnaam, Bestandsformaat, Wachtwoord, WriteResPassword, ReadOnlyRecommended, CreateBackup, AddToMru, TextCodepage, TextVisualLayout, Lokaal)
het vel moet uitsteken ( Parameter Beschrijving
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 wachtwoord dat zal worden 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 Beschrijving 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"

;

procedure SaveAs(const AFileName: TFileName; AFileFormat: integer ) ;

Methodeaanroep:

probeer MyExcel. ActiefWerkboek. Actief blad. OpslaanAls(AFileName, AFileFormat);

behalve uitzondering verhogen. Maken(rsESaveActiveSheet); einde ; einde ; Methode verwijderen Een Excel-werkblad verwijderen. MijnExcel.ActiveWorkBook.WorkSheets.Item.Select

Selecteert het derde blad van de werkmap

Kopieer methode

Kopieer een blad naar een andere locatie in de werkmap.

expression.Copy(Voor, Na)

Als u echter de parameter

Methodeaanroep:

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) GrafiekObjecten

In dit geval wordt het eerste blad gekopieerd en na het derde geplakt. GrafiekObject Plak methode GrafiekObjecten Plak de inhoud van het klembord in een Excel-werkblad.

Methodeaanroep:

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. Opgemerkt moet worden dat als de inhoud van de buffer niet aan de voorwaarde voldoet, er bijvoorbeeld slechts 1 getal in de buffer staat, Dan

uitzonderlijke situatie

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 worden gezegd 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.