RemoveDuplicates函数 – 如何设置多个列?
我想使用Excel.Interop
的RemoveDuplicates
函数,但我坚持如何传递它的列数组。 我已经知道我不能将它作为一个简单的int[]
数组传递,因为它在运行时会给出一个exception,并且我可以传递一个整数并且它可以工作,但是我希望能够select在运行时使用哪些列。
我在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中,等价的function是:
Sub RemoveBadExample() Dim colsToUse colsToUse = Array(1, 2) Selection.RemoveDuplicates Columns:=Evaluate(colsToUse), Header:=xlYes End Sub
其中也没有使用这两列。 但是,如果我将其更改为:
Selection.RemoveDuplicates Columns:=(colsToUse), Header:=xlYes
它工作得很好。 我想我的问题是在C#中的等价物是什么?
这个testing运行在我使用4.5等unit testing。它没有抛出任何例外。
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的,而不是零。 所以如果你通过了一个不好的范围,它会抛出这种exception。
Object temp = range.Cells[1][1].Value;
- 在Microsoft HPC上通过Com-interop C#API打开一个excel文件
- C#Interop非可调用成员“Microsoft.Office.Interop.Excel.Range.End”不能像方法一样使用
- C#和Microsoft.Office.Interop.Excel – 如何用它的值replace一个公式?
- 使用Interop C#保存Excel电子表格
- 什么架构来解决这个SystemOutOfMemoryException,同时允许我实例化一个工作表的单元格?
- 配合互操作事件增加Excel VBAmacros执行时间
- C#.net Excel Interop离开Excel进程挂起
- 使用Interop创buildExcel图表 – 更新到Office 2013时出错
- 使用vb.net在Excel中获取范围地址