Entwickler-Ecke

Sonstiges (Delphi) - Übergabe von Arrays an Excel-Funktionen (OLEVariant)


ThoPos - Di 30.08.16 11: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 user profile iconNarses: I- durch Delphi-Tags ersetzt


Blup - Mi 31.08.16 10: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([12]), Header := 1);


ThoPos - Do 01.09.16 07:12

Hallo Blup,

super und vielen Dank! Das war's :-)

Gruß aus Köln
Thomas