0

ここで見たいくつかの解決策を試しましたが、Excel ファイルの書き込みにまだ問題があります。

開始するために最初に作業ファイルにコピーするテンプレート xlsx ファイルがあります。次に、このようなブロックがあります

    using (var connection = new OleDbConnection(string.Format(
        "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Mode=ReadWrite;Extended Properties=\"Excel 12.0;HDR=YES\";",
        outputfileName)))
    {
        connection.Open();
        var command = connection.CreateCommand();

続いて一連の

command.ExecuteNonQuery();

最終的に、using ブロックが閉じる前に、

        connection.Close( );
    }

この時点で、私のアプリは Excel ファイルにハングアップしているように見えます。手動または 経由で開こうとするとSystem.Diagnostics.Process、「ファイルは「別のユーザー」による編集のためにロックされています」というメッセージが表示され、「OK」と応答しても空のテンプレートしか表示されません。

実際にアプリを終了すると、Excel ファイルは完全でアクセス可能になっているように見えます。どうやら、接続を閉じるだけでは、バッファをフラッシュしてファイルを解放するには不十分です。

私が理解したいのは、ファイルの保留を解除する方法です。これにより、ユーザーがプロセスを使用してファイルを開くか、必要に応じて手動で開く機会を実際にアプリに与えることができます。

4

1 に答える 1

0

使いやすく、Excel をまったく開かない EPPlus を見つけたので、ロックの問題は解決しました。これは実際には質問への回答ではありませんが、特に EPPlus への書き込みは OLEDB 経由での Excel への書き込みよりもはるかに簡単であるため、許容できる回避策です。

于 2012-06-25T12:52:54.990 に答える