2012-03-25 39 views
3

私のアプリケーションでは、既に存在するエクセルファイルを開き、このファイルに情報を追加できます。私はMicrosoft Interopライブラリを使用しています。 AddとSaveasを使って新しいスプレッドシートを作成すると、エクセルアプリケーションを閉じるまで、ファイルを排他モードに設定できることに気付きました。Cでinteropを使用してエクセルファイルを開く#

しかし、既存のファイルを開くときに同じことをする方法が見つかりませんでした。私がそれをしたい理由は、アプリケーションが開いている間にExcelファイルを開くと、例外が発生するからです。私は、Excelを使用してExcelファイルを開くときに、自動的に排他モードで開くことを前提としています。

私はファイルを開いてからsaveasを使用しましたが、動作しませんでした。

private object missing=Type.Missing; 
workbook = workbooks.Open(excelfilename,missing, false, missing, missing, missing,missing,missing,missing,missing,false, missing,missing, missing, missing); 
workbook.SaveAs((String)excelfilename, missing, missing, missing, missing, missing, Excel.XlSaveAsAccessMode.xlExclusive, Excel.XlSaveConflictResolution.xlLocalSessionChanges, missing, missing, missing, missing); 

私は、後のコードで例外を取得しています:

Excel.Range testrange = sheet.get_Range(rangetext); 

私は取得しています例外COMExceptionは、 "HRESULTからの例外:0x800401A8" です。

ワークブッククラスExclusiveAccess施設で
+1

既存のファイルを開くときに排他的なアクセス権を既に持っている場合は、共有を許可するためにReadOnlyを使用する必要があります。例外はこれとほとんど関係がありません。最後の4桁の16進数を小数点に変換して、それに "Excel error"を置いてgoogleに転送します。たくさんのヒット。 –

+0

このような場合でも、アプリケーションの実行中にExcelでファイルを開くと、読み取り専用モードで実行できることが通知されません。自分のスプレッドシートを作成してsaveasを使用すると、問題はなく、Excelは読み取り専用モードでのみファイルを開くことができます。 – user1291263

+0

2つの異なる 'Excel.Application'インスタンスを使用していますか? – code4life

答えて

0

あなたは、Microsoftの相互運用ライブラリ

を使用して範囲&セットのプロパティ を取得/新しいシートを追加する/ Excelファイルを開く方法の完全な例のために this articleに行くことができます
関連する問題