Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Anzahl der Seiten in Excel festlegen (https://www.delphipraxis.net/109861-anzahl-der-seiten-excel-festlegen.html)

Werwurm 9. Mär 2008 00:33


Anzahl der Seiten in Excel festlegen
 
Hallo,

ich bin am verzweifeln. :wall:
Aktuell hänge ich an einem Datenexport nach Excel.
Alles funktioniert soweit, jedoch kann ich nicht die Anzahl der genutzten Seiten festlegen.
Sowohl hier im Forum, über Google und auch im Excel Makro Rekorder stoße ich immer wieder auf die Zeile
Delphi-Quellcode:
Excel.ActiveSheet.PageSetup.FitToPagesWide := 1;
Jedoch passiert hierbei gar nichts. Ich bekomme keine Fehlermeldung vom Programm, aber auch in Excel passiert nichts (sichtbares).


Nun weiß ich nicht mehr weiter. :gruebel:

Zur Veranschaulichung hier ein kurzer Auszug aus dem Code:

Delphi-Quellcode:
procedure Export_nach_Excel;
Const
  xlBottom = -4107;
  xlLeft = -4131;
  xlRight = -4152;
  xlTop = -4160;

Var Excel: Variant;
    zeile, spalte, i, j, k, Spieler_Anz, Spiel_Anz, farbe : Integer;
    WBobj: olevariant;
    Dateiname, s : String;
begin
  try
    Screen.Cursor:=crHourGlass;
    Excel := CreateOleObject('Excel.Application');
  except
    ShowMessage('Excel konnte nicht gestartet werden!');
    Screen.Cursor:=crDefault;
    exit;
  end;

  Excel.Visible := False;  
  WBobj:= Excel.Application.Workbooks.Add;
  Excel.Worksheets['Tabelle1'].Activate;
  Excel.Worksheets['Tabelle1'].Name:='Einzel';
  Excel.Worksheets['Tabelle2'].Delete;
  Excel.Worksheets['Tabelle3'].Delete;
  Dateiname:=DM.GetSpecialFolder(CSIDL_PERSONAL);
  If NOT Start.DirExists(Dateiname+'\Mannschaft\') then Start.create_dir(Dateiname+'\Mannschaft\');
  Dateiname:=Dateiname+'\Mannschaft\Statistik_'+FormatDateTime('yyyymmdd_hhmm', Now);

  //Excel Zellen werden gefüllt
   .
   .
   .
   .

  //Formatieren des Blattes
  Excel.ActiveSheet.PageSetup.PaperSize := 9; //A4

  Excel.ActiveSheet.PageSetup.Orientation := 2; //Landscape

  // Fit to X page(s) wide by Y tall
  Excel.ActiveSheet.PageSetup.Zoom := False;
  Excel.ActiveSheet.PageSetup.FitToPagesWide := 1;
  Excel.ActiveSheet.PageSetup.FitToPagesTall := 3;
  WBobj.Close (saveChanges:=True, FileName:=Dateiname);
  Excel.Quit;
  Screen.Cursor:=crDefault;

Weiß jemand Rat?

toms 9. Mär 2008 06:29

Re: Anzahl der Seiten in Excel festlegen
 
Hallo, was für eine Excel Version verwendest du ?
Unter Excel 2002 funktioniert das FitToPagesWide.


Noch ein Tipp:
Delphi-Quellcode:
Excel.Worksheets['Tabelle1'].Activate;
Tabelle1 heisst es nur in der deutschen Version. In der englischen z.B Sheet1.
Es ist also besser das Worksheet per Index anzusprechen.

Gib am Schluss den Speicher wieder frei:
Delphi-Quellcode:
  WBobj := Unassigned;
  Excel := Unassigned;

Werwurm 9. Mär 2008 09:14

Re: Anzahl der Seiten in Excel festlegen
 
Hallo,

Danke für die beiden Tipps.
Ich werde es umsetzen.

Zitat:

Zitat von toms
Hallo, was für eine Excel Version verwendest du ?
Unter Excel 2002 funktioniert das FitToPagesWide.

Ich habe es mit Excel 2003 und 2007 getestet.
Ältere Versionen habe ich nicht da.

Chemiker 9. Mär 2008 09:25

Re: Anzahl der Seiten in Excel festlegen
 
Hallo,

@Toms:
Zitat:

Noch ein Tipp:

Tabelle1 heisst es nur in der deutschen Version. In der englischen z.B Sheet1.
Es ist also besser das Worksheet per Index anzusprechen.
Werwurm hat doch den Namen von [Tabelle1] auf [Einzel] geändert.


@Werwurm:

Zitat:

Alles funktioniert soweit, jedoch kann ich nicht die Anzahl der genutzten Seiten festlegen.
Was meinst Du damit?


Bis bald Chemiker

Werwurm 9. Mär 2008 09:34

Re: Anzahl der Seiten in Excel festlegen
 
Hallo Chemiker,

Zitat:

Alles funktioniert soweit, jedoch kann ich nicht die Anzahl der genutzten Seiten festlegen.
Zitat:

Was meinst Du damit?

Ich möchte den Ausdruck auf ein Blatt begrenzen.
Dafür kann man bei Excel den Zoom einstellen. Entweder auf einen festen Wert, auf die genutzten Seiten.
Ein fester Wert hilft mir aber nicht, da mein Export in Zeilen und Spalten variabel ist.

Deshalb möchte ich die Druckgröße auf 1 Hoch & 1 Seite Breit einstellen.

Chemiker 9. Mär 2008 10:04

Re: Anzahl der Seiten in Excel festlegen
 
Hallo Werwurm,

Zitat:

Deshalb möchte ich die Druckgröße auf 1 Hoch & 1 Seite Breit einstellen.
Im Delphi – Code stellst Du die Höhe aber auf 3 ein.

Delphi-Quellcode:
Excel.ActiveSheet.PageSetup.FitToPagesTall := 3;
Ist es den möglich, die Einstellungen in Excel vorzunehmen und haben diese Einstellungen das gewünscht Ergebnis?


Bis bald Chemiker

Werwurm 9. Mär 2008 10:20

Re: Anzahl der Seiten in Excel festlegen
 
Hallo Chemiker,

Zitat:

Im Delphi – Code stellst Du die Höhe aber auf 3 ein.

Delphi-Quellcode:
Excel.ActiveSheet.PageSetup.FitToPagesTall := 3;

Du hast natürlich Recht ich habe mit den Werten ein wenig rumgespielt, ob überhaupt irgendetwas funktioniert.
Da habe ich den Wert wieder vergessen auf "1" zurück zu setzen.
In meinem Code war es schon wieder korrigiert.



Zitat:

Ist es den möglich, die Einstellungen in Excel vorzunehmen und haben diese Einstellungen das gewünscht Ergebnis?
Ja das ist möglich.
Das ganze habe ich in Excel auch schon mit Makro Rekorder aufgenommen. Auch dort finde ich als Quelltext FitToPagesTall.
Mache ich das aber mit Delphi, greift es nicht.
Es kann eigentlich nur bei mir liegen, ich habe aber keine Ahnung wo.

toms 9. Mär 2008 10:28

Re: Anzahl der Seiten in Excel festlegen
 
[quote="Chemiker"]Hallo,

@Toms:
Zitat:

Werwurm hat doch den Namen von [Tabelle1] auf [Einzel] geändert.
Aber zuerst spricht er es mit Tabelle1 an.
Delphi-Quellcode:
Excel.Worksheets['Tabelle1'].Activate;

Chemiker 9. Mär 2008 10:54

Re: Anzahl der Seiten in Excel festlegen
 
Hallo.

@toms,

Du hast Recht, aber wenn der Name nicht Richtig ist, kommt eine Fehlermeldung „ungültiger Index“. Das kann also nicht das Problem sein.



@Werwurm:
also bei mir funktioniert Dein Code. Gut ich muss den Ausdruck mit der Lupe betrachten, aber er funktioniert.

Kannst Du es so einrichten, dass vor dem WBobj.close dir mal in der Seitenansicht ansiehst, ob die Skalierung nach Deinen Wünschen durchgeführt worden ist?

Bis bald Chemiker

toms 9. Mär 2008 11:09

Re: Anzahl der Seiten in Excel festlegen
 
Zitat:

Zitat von Chemiker
Hallo.

@toms,

Du hast Recht, aber wenn der Name nicht Richtig ist, kommt eine Fehlermeldung „ungültiger Index“. Das kann also nicht das Problem sein.

Das mit dem Namen war nur eine Bemerkung nebenbei und hat natürlich nichts mit dem eigentlichen Problem zu tun.

Werwurm 9. Mär 2008 11:11

Re: Anzahl der Seiten in Excel festlegen
 
Hallo Chemiker,

Zitat:

@Werwurm:
also bei mir funktioniert Dein Code. Gut ich muss den Ausdruck mit der Lupe betrachten, aber er funktioniert.

Kannst Du es so einrichten, dass vor dem WBobj.close dir mal in der Seitenansicht ansiehst, ob die Skalierung nach Deinen Wünschen durchgeführt worden ist?
Das habe ich getan.
Ich habe den Delphi-Code schrittweise durchlaufen lassen und nach jeder Zeile das Ergebnis in Excel kontrolliert. Das Umstellen auf Papierformat A4, als auch auf Querformat funktionieren wunderbar.
Lediglich das FitToPagesTall zeigt keine Wirkung.
Verändere ich z.B. den Zoom auf 95% wird das aber wiederum übernommen.

Zu dem Tipp mit der Lupe :-D
Auf der zweiten Seite befindet sich maximal 1-2 Spalte. Somit ist das kleiner Zoomen kein Problem. Der Ausdruck ist noch mit bloßem Auge und ohne Brille lesbar :-D

Chemiker 9. Mär 2008 11:16

Re: Anzahl der Seiten in Excel festlegen
 
Hallo toms

alles klar.


Bis bald Chemiker

Chemiker 9. Mär 2008 11:49

Re: Anzahl der Seiten in Excel festlegen
 
Hallo Werwurm,

ich habe diesen Code verwendet.

Delphi-Quellcode:
procedure TfrmExcelMain.btnWSNameAendernClick(Sender: TObject);
begin
  Excel.Worksheets[1].Activate;
  Excel.Worksheets[1].Name:='Einzel';
  Excel.ActiveSheet.PageSetup.PaperSize := 9; //A4 

  Excel.ActiveSheet.PageSetup.Orientation := 2; //Landscape

  // Fit to X page(s) wide by Y tall
  Excel.ActiveSheet.PageSetup.Zoom := FALSE;
  Excel.ActiveSheet.PageSetup.FitToPagesWide := 1;
  Excel.ActiveSheet.PageSetup.FitToPagesTall := 1;
  Excel.visible:= TRUE;
end;
Allerdings arbeite ich hier mit Excel 2000. Wenn das tatsächlich ein Excel 2003 Problem ist, kann ich das erst am Montag in der Firma prüfen.


Bis bald Chemiker

Werwurm 9. Mär 2008 12:19

Re: Anzahl der Seiten in Excel festlegen
 
Hallo Chemiker,

ich kann mir kaum vorstellen, das es ein Problem mit Excel 2003 bzw. 2007 ist.
Schließlich gilt offensichtlich noch die gleiche Syntax.
Wenn Du es bei Dir in der Firma trotzdem testen könntest wäre ich Dir sehr dankbar.

Leider habe ich keine ältere Version als 2003 zur Verfügung.

Schon mal Vielen Dank :thumb:

Chemiker 9. Mär 2008 12:52

Re: Anzahl der Seiten in Excel festlegen
 
Hallo Werwurm,

noch 2 Möglichkeiten.

1. Im Task-manager unter Prozesse nachsehen, ob ein noch nicht geschlossener Excel – Prozess läuft. Evt. den Rechner komplett runterfahren um mal den Speicher zu bereinigen.

2. Sicherstellen das das Workbook das Skaliert werden soll auch Aktiviert ist.


Delphi-Quellcode:
Excel.Worksheets['Einzel'].PageSetup.Zoom := FALSE;
             Excel.Worksheets['Einzel'].PageSetup.FitToPagesWide := 1;
             Excel.Worksheets['Einzel'].PageSetup.FitToPagesTall := 1;
Vielleicht das noch mal probieren.


Bis bald Chemiker

Werwurm 9. Mär 2008 13:32

Re: Anzahl der Seiten in Excel festlegen
 
Hallo Chemiker,

Du bist mein Held :lol:

Laut Task Manager lief kein Excel Prozess mehr.
Da ich schon zwei Tage dabei bin, wurde zwischenzeitlich auch mein PC neu gestartet.

Deshalb habe ich Deinen zweiten Vorschlag versucht.
Delphi-Quellcode:
Excel.Worksheets['Einzel'].PageSetup.Zoom := FALSE;
Excel.Worksheets['Einzel'].PageSetup.FitToPagesWide := 1;
Excel.Worksheets['Einzel'].PageSetup.FitToPagesTall := 1;
Und siehe da jetzt funktioniert es!
Auf die einfachsten Lösungen kommt man meist nicht von alleine...

Vielen Dank für Deine Hilfe :thumb:

Schönen Sonntag noch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz