4

我已经进行了一些搜索,但我发现的功能似乎并没有按我的预期工作,我是否传入了错误的参数?

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

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

它似乎所做的只是删除具有任何重复单元格值的行,而不是将行视为一个整体。

我究竟做错了什么?当我进入excel并单击数据>>删除重复项并选择所有列时,它会给我我想要的。这样做的程序化方式是什么?

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

4

1 回答 1

4

你的问题一直困扰着我一整天,我终于想通了!

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

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

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

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

关于从第一列中删除重复项,以下代码对我有用:

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);
        }
    }
}
于 2012-09-07T12:01:16.160 回答