0

私は C# が初めてで、相互運用ライブラリを使用して簡単な Excel 操作を実行しようとしています。

実際のデータ テーブルの下に常に別の行として表示されるテキスト値を削除したいと思います (テーブルとテキストの間に空白行があります)。それは「選択された行」です。自動化されたレポートに出力されるカウント。常に最初の列に表示されます。

行が削除され、ワー​​クブックを Close() しようとすると、エラー "COMexception unhandled - Cannot access read-only document - test1.xlsx" が表示されます。

ワークブックをリリースできないようです。他のフォーラムで見つかったランダムなガベージ コレクションの方法をたくさん試しましたが、これを見たことがある人はいますか?

助けてくれてありがとう!

編集 - プログラムの実行を開始するまで、ファイルは読み取り専用ではありません。プログラムを実行すると、ロックされて読み取り専用になります。ワークブックを閉じたり解放したりしていません...

編集 - Workbook.Save() 関数を追加し、Application オブジェクトの Quit() 関数を使用することになりました。この質問も非常に有益でした (同様の質問)。

        public void ExcelManip(string thisFileName)
        {
            Workbook workBook = _excelApp.Workbooks.Open(thisFileName,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                Type.Missing, Type.Missing);

            DeleteRowCount(ref workBook);

            workBook.Save();

            workBook.Close(false, Type.Missing, Type.Missing);
            _excelApp.Application.Quit();
            _excelApp.Quit();

            //workBook.Close(true, thisFileName);//ERROR;Cannot access read-only document
            //Marshal.ReleaseComObject(workBook);
            //GC.Collect();
            //GC.WaitForPendingFinalizers();

        }
4

1 に答える 1

1

Workbook.Save() 関数を追加し、Application オブジェクトの Quit() 関数を使用することになりました。この質問も非常に有益でした (同様の質問)。

于 2013-06-01T23:27:00.730 に答える