web-dev-qa-db-ja.com

.Net Excel Interopワークシートの削除

相互運用Excelクラス(Excel 2003用)を使用して、.Net c#3.5アプリケーションからExcelドキュメントからワークシートを削除しようとしています。

私は多くのことを試みます:

Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
worksheet.Delete();

動作せず、エラーも発生しません...

25
Melursus

1時間以上探した後、私は答えを見つけました:

xlApp.DisplayAlerts = false;
worksheet.Delete();
xlApp.DisplayAlerts = true;
64
Melursus

Excelワークシートの削除を処理する場合、2つの重要な点を確認してください。

  1. Excelの相互運用は1から(ゼロからではなく)カウントされるため、2番目のアイテムを削除すると、3番目のアイテムが配置されます!。したがって、ワークシートを削除する適切な方法は最後から最初からです:

    // Remove LAST worksheet
    MyWorkBook.Worksheets[3].Delete();
    
    // and only then remove the second (which is the last one)
    MyWorkBook.Worksheets[2].Delete();
    

    または、リストの2番目の項目([2])を削除することもできますtwice。これにより、同じ結果が得られます。

  2. 次の行willは、ワークシートが1つしか残っていない場合に例外をスローします。

     MyWorkBook.Worksheets[1].Delete();
    
10
itsho

また、ワークブックには少なくとも1つのワークシートが含まれている必要があることに注意してください。つまり、ワークブック内のすべてのワークシートを削除することはできません。

7
Richard Morgan
Microsoft.Office.Interop.Excel.Worksheet worksheet = Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets[1];
worksheet.Delete();
1
Saranya

次のように、c#コンソールアプリケーションからExcelワークシートを削除します。

 Microsoft.Office.Interop.Excel.Worksheet worksheet = 
 (Worksheet)workbook.Worksheets["Worksheet_Name" (or) "Countings"];
 worksheet.Delete();
0
Ismayil S

名前でワークシートを検索してみてください:

var app = new Microsoft.Office.Interop.Excel.Application();
var workbook = app.Workbooks.Add();
((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets["Sheet3"]).Delete();
0
Gev Dale

このようにワークシートを削除できます

 Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();

                if (xlApp == null)
                {

                    return;
                }


                xlApp.DisplayAlerts = false;
                string filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
                                        + "\\Sample.xlsx";
                Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filePath, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
                Excel.Sheets worksheets = xlWorkBook.Worksheets;

                worksheets[4].Delete();
                worksheets[3].Delete();
                xlWorkBook.Save();
                xlWorkBook.Close();

                releaseObject(worksheets);
                releaseObject(xlWorkBook);
                releaseObject(xlApp);

そしてこれを使う

  static void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                throw ex;

            }
            finally
            {
                GC.Collect();
            }
        }
0
Vinoth