Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Excel Sheet Move() (https://www.delphipraxis.net/193616-delphi-excel-sheet-move.html)

zobien123 21. Aug 2017 13:05

Delphi Excel Sheet Move()
 
Hallo :-D

und zwar baue ich gerade ein Excel Export Programm. Nun möchte ich ein Sheet an die letzte stelle schieben.

So sollte, meines Wissens, der Code aussehen. Jedoch wird das Sheet immer auf die 1 Stelle generiert :cyclops: und ich versteh nicht warum. Kennt jemand eine andere Möglichkeit ein Sheet zu verschieben?

Code:
CurrentSheet.Move(Sheets[Sheets.Count-1]);

nahpets 21. Aug 2017 13:20

AW: Delphi Excel Sheet Move()
 
Wenn ich bei der Fernsteuerung von Excel, Word + Co. nicht so recht weiter weiß, mache ich die Aufgabe immer im zu steuernden Programm händisch und lasse gleichzeitig MakroAufzeichen mitlaufen.

Das Makro lasse ich mir dann anzeigen und übersetze mir dessen Quelltext nach Delphi.
Das was das rauskommt ist regelmäßig etwas anders als erwartet.

So scheint bei Excel die "Sheet-Zählung" bei 1 zu beginnen und nicht bei 0.

Würde mal (ungetestet) behaupten, es müsste
Delphi-Quellcode:
CurrentSheet.Move(Sheets[Sheets.Count]);
heißen.

zobien123 21. Aug 2017 13:26

AW: Delphi Excel Sheet Move()
 
Das mit dem Makroaufzeichnen habe ich auch schon versucht, konnte den Code aber nicht in Delphi umsetzen.

Makroaufnahme:

Code:
 Sheets("Juni-2017").Select
Sheets("Juni-2017").Move After:=Sheets(10)
Mit
Delphi-Quellcode:
CurrentSheet.Move(Sheets[Sheets.Count]);
kommt die Fehlermeldung: Listenindex überschreitet das Maximum.

Aviator 21. Aug 2017 13:30

AW: Delphi Excel Sheet Move()
 
Mal so probiert:
Delphi-Quellcode:
CurrentSheet.Move(Sheets.Count);
?

zobien123 21. Aug 2017 13:36

AW: Delphi Excel Sheet Move()
 
Zitat:

Zitat von Aviator (Beitrag 1379148)
Mal so probiert:
Delphi-Quellcode:
CurrentSheet.Move(Sheets.Count);
?

Funktioniert leider auch nicht :x

Hat jemand einen ganz anderen Ansatz bzw Funktion um ein Sheet zu verschieben? Wie gesagt, ich habe versucht das Makro in Delphi umzusetzen - vergeblich.

nahpets 21. Aug 2017 13:40

AW: Delphi Excel Sheet Move()
 
Eigentlich müsste Dein Versuch so korrekt sein, die Frage ist, was ist denn in CurrentSheet?

Sprich: Zeig' uns bitte mal etwas mehr Quelltext, so dass wir nachvollziehen können wie Du das, was das Makro macht, im Quelltext nachvollzogen hast.

Chemiker 22. Aug 2017 08:13

AW: Delphi Excel Sheet Move()
 
Hallo zobien123,

hier mal Codefragment um Tabellenblätter an die erste oder letzte Stelle einzufügen. Zum Schluss wird das erste Tabellenblatt auf die letzte Stelle verschoben (Delphi: Berlin / Excel: 2016).

Delphi-Quellcode:
procedure TForm1.btSheetLetzteStelleClick(Sender: TObject);
var
  oExcel: OLEVariant;
  oWB1: OLEVariant;
  oWS1: OLEVariant;
  oWS2: OLEVariant;
  oWS3: OLEVariant;
  oWS4: OLEVariant;
  aFileFormat: integer;

  letzteBlatt: integer;
  strName: String;
begin
  try
    oExcel := CreateOleObject('Excel.Application');
  except
    ShowMessage('Microsoft Excel kann nicht starten.');
    exit;
  end;
  oExcel.Visible:= TRUE;
  // Workbook anlegen
  if (NOT VarIsEmpty(oExcel)) then
  begin
    oWB1:=oExcel.Workbooks.add;
    oExcel.Cells[1,1]:= 'das ist ein Test';
  end;

  if ((NOT VarIsEmpty(oExcel))and(NOT VarIsEmpty(oWB1))) then
  begin
    // Wir legen mal ein neues WorkSheet an, es soll vor den ersten Sheet eingefügt
    // werden
    oWS1:= oWB1.Worksheets.add(before:= oWB1.WorkSheets[1]);
    oWS1.Name:= 'Blatt 1';
    oWS2:= oWB1.Worksheets[2];
    oWS2.Name:= 'Blatt 2';
    oWS2.activate;
    ShowMessage('Blatt 2 aktiviert');
    oWS1.activate;
    ShowMessage('Blatt 1 aktiviert');

    // Wir legen 2 weitere Tabellenblätter an

    oWS3:= oWB1.Worksheets.add(after:= oWB1.WorkSheets[2]);
    oWS3.Name:= 'Blatt 3';
    oWS4:= oWB1.Worksheets.add(after:= oWB1.WorkSheets[3]);
    oWS4.Name:= 'Blatt 4';

    // Das letzte Tabellenblatt ermitteln
    letzteBlatt:= oWB1.WorkSheets.Count;
    ShowMessage('Letztes Blatt: '+inttostr(letzteBlatt));

    // Erstes Tabellenblatt auf die letzte Stelle setzen

    oWB1.Worksheets['Blatt 1'].Move(after:= oWB1.WorkSheets[oWB1.WorkSheets.Count]);
    ShowMessage('Alles klar!');

  end;

 // Ab hier muss alles wieder aufgeräumt werden.
Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 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