我正在使用Delphi 7编写一个程序来从Excel读取数据。 Excel 文件包含两列数据。 现在我需要通过 Delphi 从 Excel 范围中删除重复项。
如果有帮助的话,VBA宏代码如下:
ActiveSheet.Range("$A$1:$B$42").RemoveDuplicates Columns:=Array(1, 2), Header _
:=xlYes
Excel_TLB程序如下:
procedure RemoveDuplicates(Columns: OleVariant; Header: XlYesNoGuess);
VBA 帮助中的符号:
Columns - 包含重复信息的列索引的变体数组。
我的代码如下:
procedure TForm1.PuskBClick(Sender: TObject);
var
FExcel, FSheet, FBook: Variant;
MyColumns: OleVariant;
begin
// open file
if OpenDialog.Execute then
begin
// create Excel
FExcel := CreateOleObject('Excel.Application');
FExcel.Visible := true;
if not VarIsEmpty(FExcel) then // if not empty then
begin
// open real file Excel and define workbook
FBook:=FExcel.Workbooks.Open(OpenDialog.FileName);
// off any Alerts
FExcel.DisplayAlerts := false;
// define WorkSheet
FSheet := FBook.WorkSheets[1];
// create array for define columns numbers
MyColumns:= VarArrayCreate([1,1,1,2], varVariant);
MyColumns[1,1]:=1; // column 1
MyColumns[1,2]:=2; // column 2
//call the procedure
FSheet.Range['A1','B42'].RemoveDuplicates(MyColumns[1,1], xlYes);
end;
end;
end;
此代码工作正常,但计算仅在第一列上完成。如果我更改索引,则仅在第二列上进行计算。
FSheet.Range['A1','B42'].RemoveDuplicates(MyColumns[1,**2**], xlYes);
我应该如何一次为两列指定一个数组?
我得到了答案。
需要使用程序:
FSheet.Range['A1','B42'].RemoveDuplicates(VarArrayOf([1,2]), xlYes);
左右:
FSheet.UsedRange.RemoveDuplicates(VarArrayOf([1,2]), xlYes);
其中 [1,2] - 是 Excel 工作表中包含重复信息的列的索引。
没错。
谢谢你帮助我!
我是这样理解的:
如果需要使用第 7 列和第 20 列,那么你应该输入
VarArrayOf([7, 20])
等等