4

Excel スプレッドシートのセルに値を書き込む必要があるアプリケーションを作成しています。ワークブックを開くことはできますが、常に読み取り専用モードで開きます。私のコードは

myExcelApp = new Excel.ApplicationClass();
myExcelApp.Visible = false;
Excel.Workbook myExcelWorkbooks = myExcelApp.Workbooks.Open(fileName, misValue, **false**, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);

3 番目の引数は、false として割り当てた読み取り専用です。しかし、まだmyExcelWorkbooks.readOnlyしか表示されませんTrue

誰かがこれから私を助けてくれますか?

4

5 に答える 5

11

C# 4 以降を使用している場合は、次のようにします。

var myExcelApp = new Excel.Application()
    {
        Visible=false
    };

Excel.Workbook myExcelWorkbooks = myExcelApp.Workbooks.Open(Filename: @"F:\oo\bar.xlsx", ReadOnly: false);

完了したら、次のことを確認してください。

myExcelWorkbooks.Save();
myExcelWorkbooks.Close();

myExcelApp.Quit();

Marshal.ReleaseComObject(myExcelApp);

2 番目の部分を実行していない場合は、タスク マネージャーを開き、EXCEL.EXE のすべてのインスタンスを強制終了して (またはマシンを再起動して)、最初の部分をもう一度試してください。

Excel ファイルが別のプロセスによってロックされている場合、Excel は常に読み取り専用モードでブックを開きます。相互運用性をいじっていて、後で Excel プロセスを強制終了していない場合は、これが表示されている動作を説明している可能性があります。したがって、コードと UAC の設定は問題ない可能性があるため、コードをさらに変更したり、UAC で遊んだりする前に、実行中の Excel インスタンスをすべて削除します。

于 2013-01-11T11:51:24.953 に答える
0
 xl = new Excel.Application();
 Excel.Workbooks books = xl.Workbooks;
 Excel.Workbook book = books.Open(filepath);

これは常に機能し、デフォルトでは非表示になり、読み取り/書き込み用に開かれます。Excel.Application()見た目ではなく使用する必要がExcel.ApplicationClass()ありますが、それが問題の原因ではないかと思います(私が読んだ記事では、恐れていることもわかりません)。また、ワークブックとワークブックオブジェクトの宣言を分割する方法にも注目してください。これもベストプラクティスであるようです。そうしないと、起動するプロセスが常に閉じられるとは限りません。

于 2013-01-11T13:30:48.397 に答える
0

OpenXml を使用してみてください。コードプレックスには、単に反復するためのラッパーがあります。

http://closedxml.codeplex.com/

于 2013-01-11T11:56:08.100 に答える
0

UAC が何らかの形で干渉している可能性があります。アプリまたは Visual Studio を管理者として (コンテキスト メニューから) 起動してみてください。

于 2013-01-11T11:48:53.683 に答える