Avatar billede egemar Nybegynder
17. november 1999 - 16:40 Der er 7 kommentarer og
1 løsning

De nye components i Servers paletten

Hejsa

60 point til den der kan henvise mig til noget information om hvordan man benytter de nye componenter i Servers palletten - speciel interesse har Excel og Word componenterne.

Jeg har tidligere lavet automation i Delphi 4 med access til Excel/Word (I øvrigt: NiP/Delphi - fik jeg nogensinde sagt ordentligt tak for hjælpen vedrørende det emne?). 
Nu hvor jeg er skiftet til Delphi 5 tænkte jeg bare, at det måske var smartere at benytte de nye components.  Jeg kan bare ikke finde noget ordentlig info.

I øvrigt: Hvordan kan det være at jeg ikke længere kan importere Excel type librariet.  Man får en 'All ready exists' (lignende) fejl, men mine gammle Delphi 4 applicationer kan ikke finde Excel type libraryet.  Jeg har været nødt til at placeret den gamle typeLibrary.Pas-fil manuelt i imports biblioteket før jeg kunne compile mine applicationer. Hvad gør jeg nu næste gang Excel bliver opdateret?  Så har jeg ikke nogen ny Typelibrary fil og Delphi 5 vil tilsyneladende heller ikke lade mig lave en ny.

Mvh. L. Egemar.
Avatar billede stone Forsker
17. november 1999 - 16:58 #1
har du prøvet at kigge i Delphi help/upgrading to Delphi 5?

Avatar billede kegel Nybegynder
18. november 1999 - 07:40 #2
Jeg har kun meget kort benyttet delphi 5.0. Men de to omtalte komponenter Word og Excel benytter vel early binding? Det vil sige at VB rutinerne i Word og Excel er 'konverteret' til pascal rutiner (og derfor får du "All ready exits" fejlen?). Slå op i Word/Excel manualerne og find de objekter, rutiner som du ønsker at kalde. Her kan Du også læse parameternes antal, betydning m.m. Du skal være opmærksom på, at alle parameter (også dem som er angivet som valgfrie i Word/Excel) skal benyttes når der anvendes early binding.

Håber det bragte en smule afklaring
Avatar billede delphi Nybegynder
18. november 1999 - 10:17 #3
Stone>> Jeg må give Egemar ret i at der ikke står en lyd vedr. de omtalte komponenter i on-line hjælpen eller i de par manualer der følger med (ihvert fald har jeg ikke fundet noget).  I den trykte Delphi 5 Quick Start guide står der (på Side 5-5) at man skal søge efter 'COM' og 'ActiveX' i on-line hjælpen.  Et hurtigt check afslører dog at disse topics ikke direkte snakker om de omtalte components.  Det bedste bud jeg umiddelbart har på on-line opsalg må være at slå op under "TOleServer".  Her kan man fx. finde info vedr. Connect metoden mv.  Desværre går hjælpen ikke dybere end til TOleServer, som TExcelApplication nedarver fra.  Der er dermed ikke nogen dokumentation vedr. TExcelApplication's virkemåde.

Kegel>> Som det vist fremgår af spørgsmålet, så har Egemar og jeg tidligere snakket sammen om at styre Excel fra Delphi.  Det gjorde vi begge dengang efter følgende princip:  (Ingen af os er Automation specialister, men det her virkede tilfredstillende under Delphi 4)

Var
  E : Variant;
begin
  // Start Excel and make it visible.
  E := CreateOleObject('Excel.Application');
  E.Visible := True;

  // Add a chart and two worksheets .
  E.WorkBooks.Add(xlWBATChart);                // Add a Workboot with a chart
  E.WorkBooks[1].Sheets.Add(,,2,xlWorkSheet);  // Add two worksheets.

  // More code that does things to the spreadsheet....
  // More code that does things to the spreadsheet....
  // More code that does things to the spreadsheet....
end;

I dette eksempel er der tydeligvis tale om late binding, bl.a. set på brugen af variants og tomme parametre.  Som Kegel skriver, så er det vist ikke længere muligt at bruge denne metode med de nye komponenter.  Jeg prøvede lige at banke et hurtigt lille test program sammen.  Nedenstående kode er resultatet

Nu er E ikke længere en variant, men en TExcelApplication, placeret på Formen:

type
  TForm1 = class(TForm)
    E: TExcelApplication;

[Cut]

Begin
  Try
    // Start Excel and make it visible.
    E.Connect;
    E.Visible[0] := True;

    // Add a two worksheets and a chart.
    E.WorkBooks.Add(xlWBATChart, 1);                // Add a Workboot with a chart
    E.WorkBooks[1].Sheets.Add(Null,Null,2,xlWorkSheet, Null);  // Add two worksheets.

    // More code that does things to the spreadsheet....
    // More code that does things to the spreadsheet....
    // More code that does things to the spreadsheet....
  Finally
    E.Quit;
  End;
End;

Bemærk de ændringer jeg faldt over i første omgang:
  - Man skal kalde Connect metoden for at starte Excel op.
  - Visible er ikke længere en boolean property men en array do.  Jeg har ikke slået op hvad index'et betyder, men 0 virker.
  - Man kan ikke længere benytte tomme parametre, men kan dog bruge NULL de steder hvor man er ligeglad eller ikke kender værdien.

Ovenstående compiler og virker indtil: E.WorkBooks.Add(xlWBATChart, 1); , hvor programmet fejler med en "Old format or invalid type library" exception.  Jeg har ikke lige checkket hvorfor denne fejl fremkommer (det rigtige arbejde skal også passes), men det må kunne ses i typelibrariet.  Umiddelbart er det iøvrigt lidt underligt, for Delphi forlange to parametre til kaldet, mens MicroSofts dokumentation kun beskriver en enkelt (ved navn Template)....

Iøvrigt Liselotte: Der ligger i x:\x\Delphi5\Ocx\Servers en række Typelibraries, bl.a. Excel97.pas, der er oprettet af Borland udfra Excel8.olb.  Det er det Type library der i Delphi 4 svare til den genererede fil Excel_TLB.Pas - Spørg mig ikke hvorfor Borland har valgt at ændre filens standard navn.  Resultatet er ihvertfald, som du selv har opdaget, at dine Delphi 4 applicationer ikke kan finde deres typeLibraries og at du heller ikke kan importere dem, for de findes allerede under et andet navn.... Sært.

For at runde af, så tror jeg at du skal finde dine informationer de følgende steder:
  - Typelibraryet Excel97.Pas, der gir' info om procedure- og parametre navne.
  - Microsofts help file til Excel.  I dette tilfælde er det filen Vbaxl8.hlp, der beskriver Excels object hiraki og betydningen af de forskellige parametre.


Hvis en eller anden kan give en reference til enten en bog eller en I-net site, så vil jeg være meget glad...

NiP/Delphi

Avatar billede egemar Nybegynder
18. november 1999 - 13:53 #4
Hej NiP

Du svare på halvdelen af spørsmålet med dine oplysninger med x:\x\Delphi5\Ocx\Servers biblioteks oplysningen.  Den havde jeg ikke selv set.

Jeg prøvede dit lille test program, men kommer heller ikke ret meget vidre.  Er der ikke noget info nogetsteds?

Liselotte.
Avatar billede delphi Nybegynder
19. november 1999 - 09:16 #5
Endnu et lille hint:

Kigger du i den af Delphi-help filerne, der beskriver nye ting i Delphi 5 (Del5New.Hlp) under afsnittet: "Mapping symbol names in the type library" vil du se, at der omtales en fil kaldet "tlibimp.sym", som er placeret i dit Delphi5/Bin library.  Denne fil indeholder informationer der mapper identifiers til almindeligt kendte  applicationer (Word, Excel osv).

Et kig i den fil forklare hvorfor Excel97 typelibrariet i toppen indeholder følgende section:

// Errors:
//  Hint: TypeInfo 'Label' changed to 'Label_'
//  Hint: Symbol 'QueryTable' renamed to 'ExcelQueryTable'
//  Hint: Symbol 'Application' renamed to 'ExcelApplication'
//  Hint: Symbol 'Chart' renamed to 'ExcelChart'
//  Hint: Symbol 'Worksheet' renamed to 'ExcelWorksheet'
//  Hint: Symbol 'Workbook' renamed to 'ExcelWorkbook'
//  Hint: Symbol 'OLEObject' renamed to 'ExcelOLEObject'

Bemærk specielt hvorledes Workbook er renamet/remappet til ExcelWorkBook.  Uden at have afprøvet det, så antager jeg at det vil være muligt at ændre min tidligere kode stump:

Stone>> Jeg må give Egemar ret i at der ikke står en lyd vedr. de omtalte komponenter i on-line hjælpen eller i de par manualer der følger med (ihvert fald har jeg ikke fundet noget).  I den trykte Delphi 5 Quick Start guide står der (på Side 5-5) at man skal søge efter 'COM' og 'ActiveX' i on-line hjælpen.  Et hurtigt check afslører dog at disse topics ikke direkte snakker om de omtalte components.  Det bedste bud jeg umiddelbart har på on-line opsalg må være at slå op under "TOleServer".  Her kan man fx. finde info vedr. Connect metoden mv.  Desværre går hjælpen ikke dybere end til TOleServer, som TExcelApplication nedarver fra.  Der er dermed ikke nogen dokumentation vedr. TExcelApplication's virkemåde.

Kegel>> Som det vist fremgår af spørgsmålet, så har Egemar og jeg tidligere snakket sammen om at styre Excel fra Delphi.  Det gjorde vi begge dengang efter følgende princip:  (Ingen af os er Automation specialister, men det her virkede tilfredstillende under Delphi 4)

Var
  E : Variant;
begin
  // Start Excel and make it visible.
  E := CreateOleObject('Excel.Application');
  E.Visible := True;

  // Add a chart and two worksheets .
  E.WorkBooks.Add(xlWBATChart);                // Add a Workboot with a chart
  E.WorkBooks[1].Sheets.Add(,,2,xlWorkSheet);  // Add two worksheets.

  // More code that does things to the spreadsheet....
  // More code that does things to the spreadsheet....
  // More code that does things to the spreadsheet....
end;

I dette eksempel er der tydeligvis tale om late binding, bl.a. set på brugen af variants og tomme parametre.  Som Kegel skriver, så er det vist ikke længere muligt at bruge denne metode med de nye komponenter.  Jeg prøvede lige at banke et hurtigt lille test program sammen.  Nedenstående kode er resultatet

Nu er E ikke længere en variant, men en TExcelApplication, placeret på Formen:

type
  TForm1 = class(TForm)
    E: TExcelApplication;

[Cut]

Begin
  Try
    // Start Excel and make it visible.
    E.Connect;
    E.Visible[0] := True;

    // Add a two worksheets and a chart.
    E.WorkBooks.Add(xlWBATChart, 1);                // Add a Workboot with a chart
    E.WorkBooks[1].Sheets.Add(Null,Null,2,xlWorkSheet, Null);  // Add two worksheets.

til

Stone>> Jeg må give Egemar ret i at der ikke står en lyd vedr. de omtalte komponenter i on-line hjælpen eller i de par manualer der følger med (ihvert fald har jeg ikke fundet noget).  I den trykte Delphi 5 Quick Start guide står der (på Side 5-5) at man skal søge efter 'COM' og 'ActiveX' i on-line hjælpen.  Et hurtigt check afslører dog at disse topics ikke direkte snakker om de omtalte components.  Det bedste bud jeg umiddelbart har på on-line opsalg må være at slå op under "TOleServer".  Her kan man fx. finde info vedr. Connect metoden mv.  Desværre går hjælpen ikke dybere end til TOleServer, som TExcelApplication nedarver fra.  Der er dermed ikke nogen dokumentation vedr. TExcelApplication's virkemåde.

Kegel>> Som det vist fremgår af spørgsmålet, så har Egemar og jeg tidligere snakket sammen om at styre Excel fra Delphi.  Det gjorde vi begge dengang efter følgende princip:  (Ingen af os er Automation specialister, men det her virkede tilfredstillende under Delphi 4)

Var
  E : Variant;
begin
  // Start Excel and make it visible.
  E := CreateOleObject('Excel.Application');
  E.Visible := True;

  // Add a chart and two worksheets .
  E.WorkBooks.Add(xlWBATChart);                // Add a Workboot with a chart
  E.WorkBooks[1].Sheets.Add(,,2,xlWorkSheet);  // Add two worksheets.

  // More code that does things to the spreadsheet....
  // More code that does things to the spreadsheet....
  // More code that does things to the spreadsheet....
end;

I dette eksempel er der tydeligvis tale om late binding, bl.a. set på brugen af variants og tomme parametre.  Som Kegel skriver, så er det vist ikke længere muligt at bruge denne metode med de nye komponenter.  Jeg prøvede lige at banke et hurtigt lille test program sammen.  Nedenstående kode er resultatet

Nu er E ikke længere en variant, men en TExcelApplication, placeret på Formen:

type
  TForm1 = class(TForm)
    E: TExcelApplication;

[Cut]

Begin
  Try
    // Start Excel and make it visible.
    E.Connect;
    E.Visible[0] := True;

    // Add a two worksheets and a chart.
    E.ExcelWorkBooks.Add(xlWBATChart, 1);                // Add a Workboot with a chart
    E.ExcelWorkBooks[1].Sheets.Add(Null,Null,2,xlWorkSheet, Null);  // Add two worksheets.

Prøv det og se hvad der sker.

NiP/Delphi
Avatar billede delphi Nybegynder
19. november 1999 - 09:17 #6
Ups, der gik hvist noget galt i min kopiering af kode..... 
Jeg ville kun ha' haft to linier med...

NiP/Delphi
Avatar billede delphi Nybegynder
19. november 1999 - 09:18 #7
Det er se'følig de to linier:

E.WorkBooks.Add(xlWBATChart);                // Add a Workboot with a chart
  E.WorkBooks[1].Sheets.Add(,,2,xlWorkSheet);  // Add two worksheets.

som jeg ændre til


E.ExcelWorkBooks.Add(xlWBATChart, 1);                // Add a Workboot with a chart
    E.ExcelWorkBooks[1].Sheets.Add(Null,Null,2,xlWorkSheet, Null);  // Add two worksheets.

Håber ikke at det blev FOR uoverskueligt

NiP/Delphi

Avatar billede egemar Nybegynder
19. november 1999 - 09:22 #8
Hej NiP

  Du roder da rundt i det i dag...

  Jeg har lige prøvet det du skriver - det virker ikke helt tilfredsstillende - men du er den eneste der har gidet svare seriøst, så du får point

Liselotte.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester