Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Excel paste mutiple cellls from clipboard (https://www.delphipraxis.net/212903-excel-paste-mutiple-cellls-clipboard.html)

Detlev 21. Apr 2023 15:48

Excel paste mutiple cellls from clipboard
 
Delphi-Quellcode:
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Add;
Excel.Cells[1,1].Paste; // ERROR 1
Excel.SaveAs(APath + AFilename + '.xlsx'); // ERROR 2
Excel.Workbook.Close;
Excel.Quit;
ERROR 1:
In der Zwischenablage befindet sich ein Text mit etlichen Tab-separierten Zellen und CR-separierten Zeilen. Manuell kann ich die Zelle A1 anclicken und Bearbeiten-Einfügen (Ctrl-V) machen und Excel fügt alles perfekt ein.

Wie lautet der passende Befehl, um dies per OLE zu machen?

ERROR 2:
Wie speichert man das aktuelle Workbook unter einem neuen Namen ab? "SaveAs" wäre naheliegend gewesen, geht aber leider nicht.

(beide Male die Fehlermeldung: 'Die Methode 'XXX' wird vom Automatisierungsobjekt nicht unterstützt'.)

Ich möchte nacheinander eine Vielzahl von Excel-Dateien automatisiert erzeugen. Dazu neue Workbook erzeugen, Daten von Delphi aus kopieren und abspeichern, dann schließen.

Bonusfrage: Kann man einfach feststellen, ob Excel schon vor Beginn offen ist und man dann das Quit sich spart, weil der Nutzer es vielleicht noch weiter offen haben will?

Danke im voraus!

peterbelow 21. Apr 2023 16:29

AW: Excel paste mutiple cellls from clipboard
 
Sieh Dir die VBA-Hilfe von Excel an, da ist alles dokumentiert was das Objektmodell anbietet.

Neben CreateOLEObject gibt es auch ein GetActiveOleObject

Chemiker 21. Apr 2023 22:00

AW: Excel paste mutiple cellls from clipboard
 
Hallo,

Bonusfrage: Das kann man machen, sollte man aber nicht. Wenn Excel über ein Programm gesteuert wird, sollte ausschließlich die Steuerung beim Programm liegen, ohne das der Benutzer manuell eingreifen kann.

Delphi-Quellcode:
var
  DateiName: TFileName;
  oEXCEL: OLEVariant;
begin
  try
    oEXCEL := CreateOleObject('Excel.Application');
  except
    ShowMessage('Excel ist nicht geöffnet !');
    Exit;
  end;
  oEXCEL.Workbooks.add;
  oEXCEL.Visible:= TRUE;
  // Die Daten werden ab der Zelle B1 eingefügt
  oEXCEL.range['B1','B1'].Select;
  // Daten aus der Zwischenablage nach Excel importieren
  oEXCEL.ActiveSheet.Paste;
  // Neuer Dateiname; gegebenfalls sind Schreibrechte zu beachten
  DateiName:='C:\Users\Internet\Documents\KopieTest.xlsx';
  // Datei abspeichern
  oEXCEL.ActiveWorkbook.SaveAs(Filename:=DateiName);

  if NOT VarIsEmpty(oEXCEL) then
  begin
    oEXCEL.ActiveWorkBook.Saved:= TRUE;
    oEXCEL.Quit;
    oEXCEL:= Unassigned;
  end;
Mit diesem Code kann man die Zwischenablage nach Excel importieren.

Bis bald Chemiker

Detlev 4. Mai 2023 17:20

AW: Excel paste mutiple cellls from clipboard
 
Vielen lieben Dank! Das hat großartig funktioniert!

Klasse!

himitsu 4. Mai 2023 17:39

AW: Excel paste mutiple cellls from clipboard
 
Es gibt auch fertige Komponenten, die schön nach Excel exportieren.

DevExpress-Grids: direkt in eine Daen, ohne das Excel installiert sein muß (wenn ich mich nicht irre)
FastReports: aber da muß xcel installiert sein

OK, Delphi bringt auch alles mit. (nur den CSV-Import muß man nicht kopieren ... Delphi-Referenz durchsuchenSplitString bzw. siehe StringHelper :stupid:)
https://learndelphi.org/de/what-you-...l-from-delphi/


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