Función RemoveDuplicates: ¿cómo puedo configurar varias columnas?

Estoy tratando de usar la function RemoveDuplicates usando Excel.Interop , pero estoy atascado en cómo pasarlo a la matriz de columnas. Ya sé que no puedo pasarlo como una simple matriz int[] , ya que da una exception en el time de ejecución, y que puedo pasar un único integer y funciona, pero quiero poder seleccionar qué columnas usar en time de ejecución .

Mi código actual en C # se ve así:

 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); } 

Y funciona bien si se usa solo una columna, pero si el set de columns tiene más de un valor, solo se usa el primero.

En VBA, la function equivalente sería:

 Sub RemoveBadExample() Dim colsToUse colsToUse = Array(1, 2) Selection.RemoveDuplicates Columns:=Evaluate(colsToUse), Header:=xlYes End Sub 

Que tampoco puede usar ambas columnas. sin embargo, si lo cambio a esto:

  Selection.RemoveDuplicates Columns:=(colsToUse), Header:=xlYes 

Funciona bien. Supongo que mi pregunta es, ¿cuál es el equivalente en C #?

Esta testing funcionó para mí en una testing unitaria usando 4.5, etc. No lanzó una exception en ningún caso.

  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); 

Tenga en count que los índices de celdas de Excel que definen ranges están basados ​​en 1, no en cero. Entonces, si pasas en un range malo, arrojará ese tipo de exception.

 Object temp = range.Cells[1][1].Value;