4

Excel.interop.object ライブラリ 9.0 を使用して、C# で xls ファイルを操作しています

5枚のシートを持つxlsがあるとします。いくつかの行を持つすべてのシート。

次のコードを使用して、xls の各シートから上位 2 行を削除しています

Excel.Application excelApp = new Excel.Application();
        Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(mstrFilePath, 1, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, null, false);
        try
        {
            Excel.Sheets excelWorkSheet = excelWorkbook.Sheets;                
            foreach (Excel.Worksheet work in excelWorkSheet)
            {
                Excel.Range range = work.get_Range("A1", "A3");
                Excel.Range entireRow = range.EntireRow; // update
                for (int i = 1; i <= 3; i++)
                {
                    entireRow.Delete(Excel.XlDirection.xlUp);                       
                }                  
            }
            //excelWorkbook.Close(false, mstrFilePath, null);
        }
        catch (Exception ex)
        {

        }
        finally
        {
            excelApp.Quit();
        }

しかし、シート 3 から 2 行を削除し、他のシートから行を削除しないという動作は正しくありません。

ここで何がうまくいかなかったのですか?

4

1 に答える 1

6

コード内のforループ(for(int i = 1; i <= 3; i ++))を削除すると機能します。

すでにA1からA3までの範囲を選択しています(3行)........。

Excel.Range range = work.get_Range("A1", "A3"); 

したがって、以下のように同じ範囲でもう一度ループする必要はありません。

//for (int i = 1; i <= 3; i++)
//{
    entireRow.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlUp);
//}
于 2013-03-11T10:37:47.450 に答える