RemoveDuplicates函数-如何设置多列
本文关键字:设置 函数 何设置 RemoveDuplicates | 更新日期: 2023-09-27 18:22:48
我试图使用Excel.Interop
来使用RemoveDuplicates
函数,但我不知道如何将其传递给列数组。我已经知道我不能把它作为一个简单的int[]
数组来传递,因为它在运行时会给出一个异常,我可以传递一个整数,它可以工作,但我希望能够选择在运行时使用哪些列。
我在C#中的当前代码如下:
using Excel = Microsoft.Office.Interop.Excel;
private void removeDuplicates(Excel.Application excelApp, Excel.Range range, int[] columns)
{
range.RemoveDuplicates(excelApp.Evaluate(columns),
Excel.XlYesNoGuess.xlNo);
}
如果只使用一列,它可以正常工作,但如果columns
数组有多个值,则只使用第一个值。
在VBA中,等效函数为:
Sub RemoveBadExample()
Dim colsToUse
colsToUse = Array(1, 2)
Selection.RemoveDuplicates Columns:=Evaluate(colsToUse), Header:=xlYes
End Sub
它也无法同时使用这两列。但是,如果我把它改成这个:
Selection.RemoveDuplicates Columns:=(colsToUse), Header:=xlYes
它工作得很好。我想我的问题是C#中的等价物是什么?
这个测试运行在使用4.5等的单元测试中对我有效。它无论如何都没有抛出异常。
Application app = new Application();
Workbook wb = app.Workbooks.Open("C:''Data''ABC.xlsx",
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
Worksheet ws = wb.Sheets[1];
Range rng = ws.Range["A1:C5", Type.Missing];
object cols = new object[]{1, 2};
rng.RemoveDuplicates(cols, XlYesNoGuess.xlYes);
请注意,定义范围的excel单元格索引是基于1的,而不是零。因此,如果你在一个糟糕的范围内传球,它会抛出这种异常。
Object temp = range.Cells[1][1].Value;