Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Excel -> Text in Spalten (https://www.delphipraxis.net/79265-excel-text-spalten.html)

Codewalker 19. Okt 2006 10:57


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:

Codewalker 20. Okt 2006 07:20

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);

marabu 20. Okt 2006 07:35

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:
var
  s: String;
  iRow, iCol: Integer;
begin
  s := 'dp';
  iCol := 1;
  iRow := 2;
  Sheet.Cells.Item[row, col].Value2 := s;
end;
Grüße vom marabu

Codewalker 20. Okt 2006 07:51

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?

marabu 20. Okt 2006 07:56

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?

Codewalker 20. Okt 2006 07:58

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.

Codewalker 20. Okt 2006 08:01

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:
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;
Trotzdem wüsste ich für die Zukunft gern, wie man ein Worksheet verbindet.

marabu 20. Okt 2006 08:09

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

Codewalker 20. Okt 2006 08:10

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