我正在尝试使用该RemoveDuplicates函数Excel.Interop,但我仍然坚持如何将列数组传递给它.我已经知道我不能将它作为一个简单的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);
}
Run Code Online (Sandbox Code Playgroud)
如果只使用一列,它可以正常工作,但如果columns数组有多个值,则只使用第一列.
在VBA中,等效函数将是:
Sub RemoveBadExample()
Dim colsToUse
colsToUse = Array(1, 2)
Selection.RemoveDuplicates Columns:=Evaluate(colsToUse), Header:=xlYes
End Sub
Run Code Online (Sandbox Code Playgroud)
这也无法使用两列.但是,如果我将其更改为:
Selection.RemoveDuplicates Columns:=(colsToUse), Header:=xlYes
Run Code Online (Sandbox Code Playgroud)
它工作得很好.我想我的问题是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);
Run Code Online (Sandbox Code Playgroud)
请注意,定义范围的Excel单元格索引是基于1而不是零.因此,如果你传递的是一个糟糕的范围,它将抛出这种异常.
Object temp = range.Cells[1][1].Value;
Run Code Online (Sandbox Code Playgroud)