![]() |
Excel -> Text in Spalten
Hallo zusammen.
Ich möchte aus Delphi heraus Daten als CSV exportieren (hab ich geschafft), in Excel öffnen (auch geschafft). DIese will ich jetzt in Spalten aufteilen (Befehl: Daten -> Text in Spalten). Wie kann ich das von Delphi aus automatisieren? Über die Excel-Komponenten bin ich nicht weitergekommen. Alternativ würde mir auch helfen, den Inhalt eines Memos als Makro in Excel ausführen zu können (ohne das dieser irgendwo im VB-Editor eingegeben werden muss). Eine Idee, wie ich eines von beiden anstellen kann? :gruebel: |
Re: Excel -> Text in Spalten
Ich habe einfach mal versucht, etwas zu stande zu bekommen. Leider scheitere ich daran, dass ich meistens nur eine IDispatch-Schnittstelle zur Verfügung habe. Das Öffnen der Datei geht super. Danach versuche ich Spalte A auszuwählen und zu sortieren. Leider schaffe ich es nicht, die Funktion TextToColumns aufzurufen. Eigentlich sollte die an einer Selection hängen, aber bis da komme ich nicht. Was muss ich tun?
Delphi-Quellcode:
var i: Integer; Delimiter: Char; S: String; j: Integer; list: TStringList; xTrue,XFalse,Delim: OleVariant; LCID: Integer; Selection: Variant; xRange: Variant; begin If not SaveDialog.Execute then Exit; xTrue:=True; XFalse:=False; LCID := GetUserDefaultLCID; Case SaveDialog.FilterIndex of 1:Delimiter:=','; 2:Delimiter:=#9; End; Delim:=Delimiter; /// Hier steht eigentlich das Erstellen und Speichern der CSV-Liste.... das spare ich mir aber hier mal ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open(SaveDialog.FileName, xTrue, xFalse, EmptyParam, EmptyParam, xFalse, xTrue, EmptyParam, Delim,xTrue,xFalse,EmptyParam,EmptyParam,xTrue,xFalse,LCID)); xRange:=ExcelWorksheet1.Range['A1','A30000'].Select; ExcelApplication1.Selection[LCID].TextToColumns(xRange,xlDelimited,xlDoubleQuote,xFalse,xTrue,xFalse,xTrue,xFalse,xFalse); |
Re: Excel -> Text in Spalten
Guten Morgen Thomas,
warum willst du unbedingt deine Daten zuerst in einen CSV-String umformen um sie anschließend von Excel wieder in eine Zellenstruktur zerlegen zu lassen? Du kannst deine Daten doch direkt in die Zellen exportieren.
Delphi-Quellcode:
Grüße vom marabu
var
s: String; iRow, iCol: Integer; begin s := 'dp'; iCol := 1; iRow := 2; Sheet.Cells.Item[row, col].Value2 := s; end; |
Re: Excel -> Text in Spalten
Wie kommst du denn an das Sheet? Das will bei mir nicht - ich bekomme immer einen allgemeinen OLE-Fehler. Hast du Häppchen Quellcode dazu?
|
Re: Excel -> Text in Spalten
In deinem Code-Fragment verwendest du ExcelWorkSheet1, bei mir habe ich es Sheet genannt - ist aber das gleiche. Oder liegt da dein Problem?
|
Re: Excel -> Text in Spalten
Ja, ich kann das ExcelWorksheet nicht mit ConnectTo verbinden, weil ich nicht weiß, wie ich an das _Sheet-Objekt komme.
|
Re: Excel -> Text in Spalten
'Ich habs jetzt anders gemacht (wie du gesagt hattest). Ich danke die schon mal für den guten Tipp und die Hilfe :thumb:
Delphi-Quellcode:
Trotzdem wüsste ich für die Zukunft gern, wie man ein Worksheet verbindet.
procedure TMainframe.ExportToExcel(Sender: TObject);
var i,j: Integer; ExcelApp: OLEVariant; const xlWBATWorksheet = -4167; xlWBATChart = -4109; begin try ExcelApp := GetActiveOleObject('Excel.Application'); except try // If no instance of Word is running, try to Create a new Excel Object ExcelApp := CreateOleObject('Excel.Application'); except ShowMessage('Cannot start Excel/Excel not installed ?'); Exit; end; end; ExcelApp.Workbooks.Add(xlWBatWorkSheet); // Add a new Workbook, Neue Arbeitsmappe öffnen for I := 0 to ListView1.Columns.Count - 1 do ExcelApp.Cells[1,i+1].Value:=ListView1.Column[i].Caption; for I := 0 to ListView1.Items.Count - 1 do for j := 0 to ListView1.Columns.Count - 1 do begin If j = 0 then ExcelApp.Cells[i+2,j+1].Value:=ListView1.Items[i].Caption else ExcelApp.Cells[i+2,j+1].Value:=ListView1.Items[i].SubItems[j-1]; end; ExcelApp.Visible := True; end; |
Re: Excel -> Text in Spalten
Da gibt es die properties ActiveWorkBook bzw. ActiveSheet, aber auch den Zugriff über die Liste: wb.Sheets.Item[i]
Grüße |
Re: Excel -> Text in Spalten
Funktioniert!
Danke für die superschnelle Hilfe :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13: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