AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fernsteuerung von Excel

Ein Thema von Frozen-Death · begonnen am 15. Dez 2005 · letzter Beitrag vom 21. Jun 2006
Antwort Antwort
Frozen-Death

Registriert seit: 25. Nov 2005
2 Beiträge
 
#1

Fernsteuerung von Excel

  Alt 15. Dez 2005, 09:08
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
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#2

Re: Fernsteuerung von Excel

  Alt 15. Dez 2005, 10:41
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.
  Mit Zitat antworten Zitat
mumu

Registriert seit: 28. Okt 2003
Ort: Bamberg
519 Beiträge
 
#3

Re: Fernsteuerung von Excel

  Alt 15. Dez 2005, 10:59
also folgendermaßen:

ActiveSheet.QueryTables.Add("TEXT;C:\Dokumente und Einstellungen\Stefan\Desktop\daten.csv", Range("A1"))
  Mit Zitat antworten Zitat
go4hl80ve

Registriert seit: 19. Mai 2006
11 Beiträge
 
#4

Re: Fernsteuerung von Excel

  Alt 6. Jun 2006, 18:39
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"...
  Mit Zitat antworten Zitat
go4hl80ve

Registriert seit: 19. Mai 2006
11 Beiträge
 
#5

Re: Fernsteuerung von Excel

  Alt 8. Jun 2006, 16:07
hat denn wirklich keiner eine Idee?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: Fernsteuerung von Excel

  Alt 8. Jun 2006, 16:16
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;
Andreas
  Mit Zitat antworten Zitat
go4hl80ve

Registriert seit: 19. Mai 2006
11 Beiträge
 
#7

Re: Fernsteuerung von Excel

  Alt 8. Jun 2006, 17:06
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
  rangeA1 := excel.ActiveSheet.Range('A1'); irgendwie ist das zum verrücktwerden...
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Fernsteuerung von Excel

  Alt 8. Jun 2006, 19:00
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;
  Mit Zitat antworten Zitat
frasch

Registriert seit: 21. Jun 2006
1 Beiträge
 
#9

Re: Fernsteuerung von Excel

  Alt 21. Jun 2006, 17:07
Nachdem auch ich fast verzeifelt bin:

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

So ist Delphi nun einmal...

Gruß

Frank
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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