AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Excelautomation und Pagesetup

Ein Thema von Jens Schumann · begonnen am 15. Aug 2006 · letzter Beitrag vom 29. Aug 2006
Antwort Antwort
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#1

Excelautomation und Pagesetup

  Alt 15. Aug 2006, 18:56
Hallo,
mit u.s. Code formatiere ich die Druckausgabe einer zuvor generierten Exceltabelle.
Die Excelarbeitsmappe wird komplett vom Programm erstellt und gefüllt.
Als Bremse hat sich das Setzen der Druckoptionen herausgestellt. Im Vergleich
zu den anderen Operationen arbeitet dieser Codeabschnitt ziemlich langsam.
Delphi-Quellcode:
    With Excel.WorkSheet.PageSetup do
      begin
      LeftHeader := '';
      CenterHeader := '';
      RightHeader := '';
      LeftFooter := '';
      CenterFooter := '';
      RightFooter := FRightFooterText;
      LeftMargin := SystemDataProvider.Excel.Application.InchesToPoints(0.787401575);
      RightMargin := SystemDataProvider.Excel.Application.InchesToPoints(0.787401575);
      TopMargin := SystemDataProvider.Excel.Application.InchesToPoints(0.984251969);
      BottomMargin := SystemDataProvider.Excel.Application.InchesToPoints(0.984251969);
      HeaderMargin := SystemDataProvider.Excel.Application.InchesToPoints(0.4921259845);
      FooterMargin := SystemDataProvider.Excel.Application.InchesToPoints(0.4921259845);
      PrintHeadings := False;
      PrintGridlines := False;
      PrintComments := xlPrintNoComments;
      // PrintQuality[1] := 600;
      CenterHorizontally := False;
      CenterVertically := False;
      If FDataprovider.PrintOrientation=poPortrait then
        Orientation := xlPortrait
        else
          Orientation := xlLandscape;
      Draft := False;
      PaperSize := xlPaperA4;
      FirstPageNumber := xlAutomatic;
      Order := xlDownThenOver;
      BlackAndWhite := False;
      Zoom := False;
      FitToPagesWide := 1;
      FitToPagesTall := False;
      // PrintErrors := xlPrintErrorsDisplayed;
      end; // With Excel.WorkSheet.PageSetup do
Gibt evt. einen anderen Zugriffsweg um die Sache zu beschleunigen?

Beim Zugriff auf die Zellen ist es z.B. schneller über das Range Objeckt anstatt über die Selection zu gehen.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Excelautomation und Pagesetup

  Alt 15. Aug 2006, 18:59
Diese Bremse ist mir auch bekannt. Ich habe da allerdings noch nichts gefunden dies zu beschleunigen, da die Stelle ja sowieso nicht so häufig aufgerufen wird sollte das eigentlich auch kein Problem sein.

Edit: In Excel selbst dauert das Umschalten also neu setzen auf einen neuen Drucker auch länger.

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Excelautomation und Pagesetup

  Alt 15. Aug 2006, 19:04
Hallo omata,
die Stelle wird pro Arbeitsblatt genau einmal aufgerufen.
Es können jedoch bis zu 5 Arbeitsmappen, die ca. 60 Arbeitsblätter enthalten können erstellt.

Da macht sich die Bremse schon bemerkbar.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Excelautomation und Pagesetup

  Alt 15. Aug 2006, 19:08
Wie gesagt im Druckfenster von Excel dauert dieses Umschalten/Setzen selber etwas länger. Dieses Softwareproblem wirst du wohl nur durch neue/schnellere Hardware lösen können, sorry.

Gruss
Thorsten
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Excelautomation und Pagesetup

  Alt 15. Aug 2006, 19:25
Du schreibst öfters:
irgendwas := SystemDataProvider.Excel.Application.InchesToPoints( Jeder Punkt benötigt zusätzliche (Inter Prozess-)Kommunikation zwischen deiner Anwendung und Excel.
Deshalb:
Delphi-Quellcode:
xlapp := Excel.Application;
  LeftMargin := xlapp.InchesToPoints(0.787401575);
  RightMargin := xlapp.InchesToPoints(0.787401575);
...
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Excelautomation und Pagesetup

  Alt 15. Aug 2006, 20:07
Hallo shmia,
habe Deinen Tip schon umgesetzt. Eine fühlbare Beschleunigung ist leider nicht zu bemerken.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: Excelautomation und Pagesetup

  Alt 16. Aug 2006, 10:28
Zitat von Jens Schumann:
Hallo shmia,
habe Deinen Tip schon umgesetzt. Eine fühlbare Beschleunigung ist leider nicht zu bemerken.
Dann würde ich noch das Papier ganz am Anfang setzen. Gut möglich, dass Excel andernfalls 2* rechnen muss.
(kann aber auch sein, dass es nix bringt; dann ist einfach Excel/Windows schuld)
Andreas
  Mit Zitat antworten Zitat
Thorus

Registriert seit: 3. Jul 2004
23 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Excelautomation und Pagesetup

  Alt 29. Aug 2006, 13:51
Hallo, ich habe nach Möglichkeiten gesucht, damit die Arbeit mit PageSetup schneller geht, aber habe beim Übertragen nach Delphi Probleme.

Code:
Sheets.Select
Sheets("Tabelle1").Activate
With ActiveSheet.PageSetup
  .LeftHeader = ""
  ...
Damit selektiert man alle Tabellen in der Arbeitsmappe und ändert von allen gleichzeitig die Eigenschaft PageSetup. Dies funktioniert als Excel-Makro.
Nur in Delphi ändert er es nur von der ersten und ich weiß nicht wieso.
Code:
wb.Sheets.Select;
wb.Sheets[1].Activate;
Page := wb.ActiveSheet.PageSetup;
Page.LeftHeader := '';
...
Dies selektiert zwar alle Tabellen, wie man dann sieht, aber ändert es trotzdem nur von der ersten. Habe ich beim übertragen ein Fehler gemacht?

Oder gibt es eine andere Möglichkeit von allen Tabellen PageSetup gleichzeitig zu ändern? Außer natürlich von allen Tabellen per Schleife das zu ändern, was langsam ist.


Im Internet hatte ich noch etwas anderes gefunden, was im Excel zwar geht, aber bei Delphi nicht.

Code:
wb.Sheets.Select
xls.ExecuteExcel4Macro('"Page.Setup("""",""&L&8&F, &A, &D"",1.43,0.38,0.47,0.47,False,False,True,False,1,9,True,,,,,0.27,0.27,False,False)"');
xls entspricht Application aus Excel.

Dies ist eine Excel4 Makro. Es funktioniert leider nur so nicht in Delphi, aber in Excel schon. Und ist es überhaupt sinnvoll was älteres zu nehmen?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz