ThoPos - Di 30.08.16 10:12
Titel: Übergabe von Arrays an Excel-Funktionen (OLEVariant)
Hallo zusammen,
ich versuche zur Zeit verzweifelt eine per OLE verbundene Excel-Tabelle nach Duplikaten zu filtern.
In VBA funktioniert der folgende Befehl:
Quelltext
1:
| Worksheets("Tabelle").Range("$A$1:$B$100").RemoveDuplcates(Columns := Array(1, 2), Header := 1) |
In Delphi verbinde ich mich per OLE mit Excel und anschließend mit der Arbeitsmappe sowie der Tabelle:
Delphi-Quelltext
1: 2: 3: 4:
| XL := GetActiveOleObject('Excel.Application'); WB := XL.Workbooks['Mappe1.xlsx']; WS := WB.Worksheets['Tabelle1']; WS.Range['$A$1:$B$100'].RemoveDuplicates(Columns := [color=red]?????[/color], Header := 1); |
Mein Problem ist jetzt die Übergabe des Array
[color=red]?????[/color]. Ich habe bereits mit der Array-Funktion "VarArrayCreate" experimentiert; nur leider ohne Erfolg.
Wenn ich nur nach einer Spalte reduzieren möchte, so funktioniert es. Dann kann man statt des Arrays einfach die Spaltennummer angeben.
Hat jemand von Euch eine Idee oder - noch besser - eine Lösung?
Gruß
Thomas
Moderiert von Narses: I- durch Delphi-Tags ersetzt
Blup - Mi 31.08.16 09:23
Möglicherweise ist das Problem, das ein 0-basierendes Array als Parameter erwartet wird.
Versuchs mal so (ungetestet):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| function OLEColumnsArray(const AColumns: array of Integer): OLEVariant; var n, nMax: Integer; begin nMax := High(AColumns); Result := VarArrayCreate([0, nMax], varVariant); for n := 0 to nMax do Result[n] := AColumns[n]; end;
WS.Range['$A$1:$B$100'].RemoveDuplicates(Columns := OLEColumnsArray([1, 2]), Header := 1); |