6

xls ワークブックを開くコードが少しあります。

Excel.Workbooks workBooks;
workBooks = excelApp.Workbooks;
workbook = workBooks.Open(sourceFilePath + sourceFileName + ".xls");

次に、ワークシートを取得します。

worksheets = workbook.Worksheets;
worksheet = worksheets.get_Item("Standard");

次に、ファイルを csv として保存します。

worksheet.SaveAs(sourceFilePath + sourceFileName + ".csv", Excel.XlFileFormat.xlCSVWindows, Type.Missing, Type.Missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing);

次に、ワークブックを閉じようとします。

Marshal.FinalReleaseComObject(worksheet);
Marshal.FinalReleaseComObject(worksheets);
workbook.Close();
Marshal.FinalReleaseComObject(workbook);

ただし、workbook.Close() の行に到達するたびに、システムが停止します。

SaveAs を実行しないと、ブックは問題なく閉じます。

ブックを閉じるにはどうすればよいですか?

編集

タスク マネージャーを見ると、Excel.exe がまだ実行中であることがわかります。それを閉じると、コードでエラーが発生します。

編集 2

参照されているSOの投稿をすでに見ましたが、問題は解決しませんでした。

4

5 に答える 5

6

2を組み合わせてみませんか。これにより、保存が完了する前に閉じる際の問題が解決されます。Closeファイルを保存する方法にオプションがあります。

workbook.Close(true, fileName, Missing.Value);

また、ファイルが正しく保存されていて、問題が純粋に Excel.exe プロセスがまだ実行されていることが原因である場合は、必要なものをすべて閉じて解放しなかったことが原因である可能性があります。私は以前にこれを持っていて、より完全な閉鎖ルーチンを開発しました. Excelファイルをシャットダウンするための私のコードは次のとおりです。

        book.Close(true, fileName, Missing.Value); //close and save individual book
        allBooks.Close(); //close all books
        excel.Quit();
        Marshal.ReleaseComObject(allCells); //any used range objects
        Marshal.ReleaseComObject(sheet);
        Marshal.ReleaseComObject(sheets);
        Marshal.ReleaseComObject(book);
        Marshal.ReleaseComObject(allBooks);
        Marshal.ReleaseComObject(excel);

これは私にとって100%の時間機能します。

于 2013-07-03T05:46:48.377 に答える
0

この質問がポップアップし続けます。次を参照してください。

C# で Excel 相互運用オブジェクトを適切にクリーンアップする方法

使用するすべての Excel オブジェクトで System.Runtime.InteropServices.Marshal.ReleaseComObject() を呼び出す必要があります。

var worksheet = excelApp.Worksheets.Open()

ここには 2 つのオブジェクトがあります。

両方ともリリースする必要があります (そのため、ワークシートの参照を保持しておくことをお勧めします):

var wkCol = excelApp.Worksheets;
var ワークシート = wkCol.Open();
于 2013-07-05T00:39:05.587 に答える