c#Excel为什么从单元格中删除重复项而不是整行?

时间:2012-09-07 10:42:40

标签: c# excel duplicates removeall

我已经做了一些搜索并且我找到的功能似乎没有按照我的预期工作,我是否传递了错误的参数?

我想使用c#删除Excel电子表格中的所有重复行条目。

Range theRange = workSheet.UsedRange as Range;
theRange.RemoveDuplicates(XlYesNoGuess.xlYes);

它似乎只是删除具有任何重复单元格值的行,并将其作为一个整体查看行。

我做错了什么?当我进入excel并点击Data>>删除重复项并选择所有列然后它将给我我想要的。什么是编程方式?

Removeduplicates似乎相当快,所以我不想做任何类型的循环等。

1 个答案:

答案 0 :(得分:3)

你的问题一直困扰着我,我终于明白了!

您需要指定要从中删除重复项的列号。

即使您已经指定了范围,仍然需要指定列。该描述具有误导性,因为它将其声明为可选,并指示如果将其留空,则将搜索整个范围的重复项。事实并非如此。

描述更具误导性,因为它说这可以是一个对象数组。您可以指定列的唯一方法是按编号,并将整数数组传递给此方法会导致运行时错误。

传递给此方法的第二个布尔参数按预期工作,它允许您声明列中的第一个单元格包含标题。

以下代码适用于我从第一列中删除重复项:

using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace RemoveDupes
{
    class Program
    {
        static void Main()
        {
            var excel = new Excel.Application();
            var workbook = excel.Workbooks.Open(@"C:\Test\Test.xlsx");
            Excel.Worksheet worksheet = workbook.Sheets[1];

            var usedRange = worksheet.UsedRange;

            usedRange.RemoveDuplicates(1);

            workbook.Close(true);

            Marshal.ReleaseComObject(excel);
        }
    }
}