5

Workbook.SaveAsメソッドを使用してC#で作成されたワークシートを保存しています。XlSaveAsAccessMode引数が問題を引き起こしています。

xlSharedはワークシートを保護モードで保存するため、ユーザーはグラフをいじって慎重に調べることができません。基本的に、データを参照できないデッドチャートとして表示されます。

xlExclusiveを使用すると、ユーザーは書籍を保護されていないアクセスで保存できますが、他のユーザーは保存できません。他のユーザーにはまだデッドチャートが表示されます。

ワークシートを誰もが表示および確認できるモードで保存し、グラフで遊んだり、シリーズをデータポイントに接続したりできるようにする必要があります。ただし、同時に、変更を保存できないようにする必要があります。ファイルを上書きします。C#COM Excel APIを使用してこれを実現するにはどうすればよいですか?

参考文献-

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.workbook.saveas(v=vs.80).aspx

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xlsaveasaccessmode.aspx

4

1 に答える 1

5

最初に、変更を防ぐためのパスワードを使用してファイルを保存します。これは、ファイルを保存するときに、[名前を付けて保存] ダイアログ (ダイアログの下部にある [ツール] ドロップダウンの下) で行うことができます。また、読み取り専用を推奨するチェックボックスをオンにして、ファイルを読み取り専用モードにします。

ユーザーがファイルを開くと、Excel は書き込みパスワードを要求しますが、そのパスワードを持っていないユーザーは読み取り専用モードに強制されます。読み取り専用 mdoe では、ユーザーはファイルに変更を加えることができますが、元のファイルに上書き保存することはできません (ファイル システムの読み取り専用属性に関係なく)。新しい名前 (または別のフォルダー内の同じ名前)。

これらのプロパティを使用してワークブックをプログラムで保存するには、次のようにします。

oWorkbook.SaveAs ( oWorkbook.Path + @"\Workbook.xls",
    Excel.XlFileFormat.xlWorkbookDefault,
    missing,
    "WritePassword",  // password against modification
    true,             // read-only recommended
    false,
    Excel.XlSaveAsAccessMode.xlNoChange,
    missing,
    missing,
    missing,
    missing,
    missing );

イベントを処理し、WorkBookBeforeSave追跡情報を使用してブックを更新して、元のブックのコピーを識別することもできます。これは、コピーを元のファイル名で別のフォルダーに保存する場合に役立ちます。(私はこの特定のイベントに精通していませんが、処理中に保存操作をキャンセルできる場合もあります。)

ファイルを完全に制御しない限り (Excel だけを使用するのはほぼ不可能です)、ユーザーはファイルのコピーを作成できますが、上記の設定により、少なくとも元のファイルがそのままの状態で新しいコピーを保存するように強制されます。これで問題は解決しますか?

于 2012-11-12T04:11:06.190 に答える