4

私はいくつかの検索を行いましたが、見つけた関数は期待どおりに機能していないようです。間違ったパラメーターを渡していますか?

C# を使用して、Excel スプレッドシート内の重複する行エントリをすべて削除したいと考えています。

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

行全体を見るのではなく、重複するセル値を持つ行を削除するだけです。

私は何を間違っていますか?Excelにアクセスして[データ] >> [重複を削除]をクリックし、すべての列を選択すると、必要なものが得られます。これを行うプログラム的な方法は何ですか?

Removeduplicatesかなり速いようですので、ループなどはしたくありません。

4

1 に答える 1

4

あなたの質問に一日中悩まされていましたが、やっと解決しました!

重複を削除する列番号を指定する必要があります。

範囲を指定した後でも、列を指定する必要があります。この説明は、これがオプションであると述べているという点で誤解を招きやすく、これを空白のままにすると、範囲全体で重複が検索されることを示しています。本当じゃない。

この説明は、これがオブジェクト配列である可能性があると述べているという点で、より誤解を招くものです。列を指定できる唯一の方法は数値によるものであり、整数の配列をこのメソッドに渡すと実行時エラーが発生します。

このメソッドに渡す 2 番目のブール値パラメーターは期待どおりに機能し、列の最初のセルにタイトルが含まれていることを宣言できます。

次のコードは、列1から重複を削除することに関して、私にとってはうまくいきます:

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 に答える