Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fernsteuerung von Excel (https://www.delphipraxis.net/58973-fernsteuerung-von-excel.html)

Frozen-Death 15. Dez 2005 10:08


Fernsteuerung von Excel
 
Hallo alles zusammen, ich habe folgendes Problem:

Ich tüftel derzeit daran, Excel via Delphi fernzusteuern. Ich möchte, dass Excel eine *.csv Datei öffnet und dann auch gleich die Spalten formatiert. Dazu habe ich die Makro aufzeichnung gewählt und alles so eingestellt, wie ich es gerne haben möchte. Danach hab ich mir den mitgeschnittenen VB-Quellcode in Excel angeschaut und dieses dann angepasst und nach Delphi übernommen und compatibel gemacht. Leider ist dies nicht ganz so einfach, wie ich es mir gedacht hatte.

Der gesamte Quellcode sieht derzeit wie folgt aus:

procedure TForm1.Button1Click(Sender: TObject);
var
excel: Variant;
begin
excel := CreateOleObject('Excel.Application');
excel.visible := true;
excel.Workbooks.Add;
excel.ActiveSheet.QueryTables.Add('Connection:= _ "TEXT;C:\Dokumente und Einstellungen\Stefan\Desktop\daten.csv"', 'Destination:= _ Range("A1")');
excel.activesheet.name := 'Daten';
excel.activesheet.fieldnames := false;
excel.rownumbers := false;
excel.filladjacentformulas := false;
excel.PreserveFormatting := True;
excel.RefreshOnFileOpen := False;
excel.RefreshStyle := xlInsertDeleteCells;
excel.SavePassword := False;
excel.SaveData := True;
excel.AdjustColumnWidth := True;
excel.RefreshPeriod := 0;
excel.TextFilePromptOnRefresh := False;
excel.TextFilePlatform := 1252;
excel.TextFileStartRow := 1;
excel.TextFileParseType := xlDelimited;
excel.TextFileTextQualifier := xlTextQualifierNone;
excel.TextFileConsecutiveDelimiter := False;
excel.TextFileTabDelimiter := False;
excel.TextFileSemicolonDelimiter := True;
excel.TextFileCommaDelimiter := False;
excel.TextFileSpaceDelimiter := False;
excel.TextFileColumnDataTypes := 'Array(1,1)';
excel.TextFileTrailingMinusNumbers := True;
excel.Refresh;
excel.BackgroundQuery := False;
end

mein Problem hab ich derzeit mit der Zeile:
excel.ActiveSheet.QueryTables.Add('Connection:= _ "TEXT;C:\Dokumente und Einstellungen\Stefan\Desktop\daten.csv"', 'Destination:= _ Range("A1")');
Delphi sagt mir, dass es einen Typenkonflikt gibt. Leider komme ich nicht mehr weiter und hab auch keinen Rat mehr. Hab schon alles Mögliche versucht.

Der Originale Quellcode in Excel, den es nach Delphi zu übertragen gilt lauten so:

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Dokumente und Einstellungen\Stefan\Desktop\daten.csv", Destination:= _
Range("A1"))
.Name = "daten"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierNone
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1,1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With }

Vielleicht hat ja irgendwer einen Rat für mich. Bei google hab ich leider auch keine weiteren Hinweise finden können.

Danke schonmal im vorraus!

Stefan

tomsel 15. Dez 2005 11:41

Re: Fernsteuerung von Excel
 
Zitat:

ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Dokumente und Einstellungen\Stefan\Desktop\daten.csv", Destination:= _
Range("A1"))
wie bei VBA üblich, werden hier die Namen der formalen Parameter Connection und Destination angegeben. Das funktioniert bei der Delphi-Variante natürlich nicht. Hier müssen die Parameterwerte ohne Namen und in der richtigen Reihenfolge angegeben werden.

mumu 15. Dez 2005 11:59

Re: Fernsteuerung von Excel
 
also folgendermaßen:

Delphi-Quellcode:
ActiveSheet.QueryTables.Add("TEXT;C:\Dokumente und Einstellungen\Stefan\Desktop\daten.csv", Range("A1"))

go4hl80ve 6. Jun 2006 19:39

Re: Fernsteuerung von Excel
 
hab gerade genau das selbe Problem :?
wenn ich diese variante versuche:
Zitat:

ActiveSheet.QueryTables.Add("TEXT;C:\Dokumente und Einstellungen\Stefan\Desktop\daten.csv", Range("A1"))
(und natürlich noch die " gegen ' austausche,) dann meckert Delphi 6 immer noch über das "Range"...

go4hl80ve 8. Jun 2006 17:07

Re: Fernsteuerung von Excel
 
hat denn wirklich keiner eine Idee? :(

shmia 8. Jun 2006 17:16

Re: Fernsteuerung von Excel
 
Zitat:

Zitat von go4hl80ve
hab gerade genau das selbe Problem :?
wenn ich diese variante versuche:
Zitat:

ActiveSheet.QueryTables.Add("TEXT;C:\Dokumente und Einstellungen\Stefan\Desktop\daten.csv", Range("A1"))
(und natürlich noch die " gegen ' austausche,) dann meckert Delphi 6 immer noch über das "Range"...

Ins Blaue:
Delphi-Quellcode:
var
   rangeA1 : OleVariant;
...
  rangeA1 := excel.ActiveSheet.Range('A1');
  excel.ActiveSheet.QueryTables.Add('TEXT;C:\Dokumente und Einstellungen\Stefan\Desktop\daten.csv', range);
Bei der Automatisierung sollte man übrigen von Zwischenvariablen Gebrauch machen.
Statt also ständig excel.ActiveSheet.irgendwas zu schreiben:
Delphi-Quellcode:
var
   mysheet:OleVariant;
....
   mysheet := excel.ActiveSheet;
   mysheet.irgendwasdummes;

go4hl80ve 8. Jun 2006 18:06

Re: Fernsteuerung von Excel
 
danke erstmal für den tip!
also wenn ich das so mache
Delphi-Quellcode:
var
   rangeA1 : OleVariant;
...
  rangeA1 := excel.ActiveSheet.Range('A1');
  excel.ActiveSheet.QueryTables.Add('TEXT;C:\Dokumente und Einstellungen\Stefan\Desktop\daten.csv', range);
dann kommt immer noch "undeclared identifier: 'range'".
wenn ich statt "range" jetzt "rangeA1" nehme, dann erhalte ich "Mitglied nicht gefunden" - allerdings bei
Delphi-Quellcode:
  rangeA1 := excel.ActiveSheet.Range('A1');
irgendwie ist das zum verrücktwerden... :wall: :wall: :wall:

semo 8. Jun 2006 20:00

Re: Fernsteuerung von Excel
 
zum thema range habe ichmal noch nen codeschnipsel für dich.

Delphi-Quellcode:
// die Kopfleiste formatieren:
XLApp.Workbooks[M].Worksheets[N].Range[RefToCell(9, 1), RefToCell(9, SheetColCount)].Select;
XLApp.Selection.Font.Bold          := true;
XLApp.Selection.Borders.Weight     := xlThin;
XLApp.Selection.Interior.ColorIndex := 15; // Zellhintergrund einfärben

// die Spaltengröße automatisch anpassen:
XLApp.Columns['A:F'].EntireColumn.AutoFit;

frasch 21. Jun 2006 18:07

Re: Fernsteuerung von Excel
 
Nachdem auch ich fast verzeifelt bin:

Versuche es mit Range['A1'] und nicht Range('A1').

So ist Delphi nun einmal...

Gruß

Frank


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