C# で、Excelを開いて閉じるときに止まってしまう現象が。
どうやら、閉じるときに、「保存しますか?」ダイアログが開いてしまってたのが原因らしい。
たとえば、こんなコード。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application(); //エクセルを非表示 ExcelApp.Visible = false; //エクセルファイルを開く Microsoft.Office.Interop.Excel.Workbook WorkBook = ExcelApp.Workbooks.Open("c:text.xlsx"); //3シート目を選択 Microsoft.Office.Interop.Excel.Worksheet sheet = WorkBook.Sheets[3]; sheet.Select(); string text = ""; //B列の最後の行を取得 int row_end = sheet.get_Range("B1").End[Microsoft.Office.Interop.Excel.XlDirection.xlDown].Row; if (row_end < 10000 || row_end > 0) { for (int i = 0; i < row_end; i++) { //B列の内容を最後まで取得 Microsoft.Office.Interop.Excel.Range range = sheet.get_Range("B" + (i + 1).ToString()); Object cellValue = range.Value; //取得した内容(文字列)を取得 text += (string)cellValue; } } Console.Write(text); //ワークブックを閉じる WorkBook.Close(); //エクセルを閉じる ExcelApp.Quit(); |
WorkBook.Close();
のところで止まってしまってました。
で、解決策を探したところ、
WorkBook.Close(false, Type.Missing, Type.Missing);
にするといいらしい。
参考→https://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.excel.workbook.close.aspx
閉じるときに保存するかのダイアログが表示されずに閉じることができます。
ちなみに、Type.Missing はC#では省略できないそうです。
なんでも、VBA用につくられてるので、C#では引数を省略しちゃいけないそうで。
参考になりました→http://d.hatena.ne.jp/ron_s-nakazawa/20120924/1348452525