通过 Delphi 从命名范围 Excel 中删除重复项

问题描述 投票:0回答:1

我正在使用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);

我应该如何一次为两列指定一个数组?

excel delphi delphi-7
1个回答
1
投票

我得到了答案。

需要使用程序:

FSheet.Range['A1','B42'].RemoveDuplicates(VarArrayOf([1,2]), xlYes);

左右:

FSheet.UsedRange.RemoveDuplicates(VarArrayOf([1,2]), xlYes);

其中 [1,2] - 是 Excel 工作表中包含重复信息的列的索引。

没错。

谢谢你帮助我!

我是这样理解的:

如果需要使用第 7 列和第 20 列,那么你应该输入

VarArrayOf([7, 20])

等等

© www.soinside.com 2019 - 2024. All rights reserved.