Share via


方法 : パスワードで保護されたドキュメント内のデータをキャッシュする

更新 : 2008 年 7 月

対象

このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。

プロジェクトの種類

  • ドキュメント レベルのプロジェクト

Microsoft Office のバージョン

  • 2007 Microsoft Office system

詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

Word 2007 や Excel 2007 のドキュメント レベルのプロジェクトで、パスワードで保護された文書やブック内のデータ キャッシュにデータを追加した場合、キャッシュされたデータに加えられた変更は保存されません。

Visual Studio 2008 Service Pack 1 (SP1) 以降、プロジェクトで 2 つのメソッドをオーバーライドすることで、キャッシュされたデータへの変更を保存できるようになりました。

Word 文書のキャッシュ

パスワードで保護された Word 文書内のデータをキャッシュするには

  1. ThisDocument クラスで、キャッシュの対象とするパブリック フィールドまたはプロパティを指定します。詳細については、「キャッシュされたデータ」を参照してください。

  2. ThisDocument クラスの Document.UnprotectDocument メソッドをオーバーライドし、文書の保護を解除します。

    ドキュメントが保存されると、Visual Studio Tools for Office ランタイムはこのメソッドを呼び出し、ユーザーには文書の保護を解除する機会が与えられます。これにより、キャッシュされたデータへの変更を保存できるようになります。

  3. ThisDocument クラスの Document.ProtectDocument メソッドをオーバーライドし、文書に保護を再適用します。

    ドキュメントが保存されると、Visual Studio Tools for Office ランタイムはこのメソッドを呼び出し、ユーザーには文書の保護を再適用する機会が与えられます。

次のコード例は、パスワードで保護されている Word 文書のデータをキャッシュする方法を示しています。コードでは、Document.UnprotectDocument メソッドで保護を解除する前に、現在の ProtectionType 値を保存します。こうして、Document.ProtectDocument メソッドを使用して同じ種類の保護を再適用できるようにします。

<CachedAttribute()> _
Public CachedString As String = "This string is cached in the document."

Private protectionTypeValue As Word.WdProtectionType

Protected Overrides Sub UnprotectDocument()
    If Me.ProtectionType <> Word.WdProtectionType.wdNoProtection Then
        protectionTypeValue = Me.ProtectionType
        Me.Unprotect(securelyStoredPassword)
    End If
End Sub

Protected Overrides Sub ProtectDocument()
    Me.Protect(protectionTypeValue, Password:=securelyStoredPassword)
End Sub
[CachedAttribute]
public string CachedString = "This string is cached in the document.";

private Word.WdProtectionType protectionTypeValue;

protected override void UnprotectDocument()
{
    if (this.ProtectionType != Word.WdProtectionType.wdNoProtection)
    {
        protectionTypeValue = this.ProtectionType;
        this.Unprotect(ref securelyStoredPassword);
    }
}

protected override void ProtectDocument()
{
    this.Protect(protectionTypeValue, ref missing,
        ref securelyStoredPassword, ref missing, ref missing);
}

コードのコンパイル

このコードをプロジェクトの ThisDocument クラスに追加します。このコードでは、パスワードは securelyStoredPassword という名前のフィールドに格納されていることを前提としています。

Excel ブックのキャッシュ

Excel プロジェクトでこの手順が必要になるのは、Workbook.Protect メソッドを使用してブック全体をパスワードで保護している場合だけです。Worksheet.Protect メソッドを使用して特定のワークシートだけをパスワードで保護している場合は、この手順は必要ありません。

パスワードで保護された Excel ブック内のデータをキャッシュするには

  1. ThisWorkbook クラスまたはいずれかの Sheetn クラスで、キャッシュの対象とするパブリック フィールドまたはプロパティを指定します。詳細については、「キャッシュされたデータ」を参照してください。

  2. ThisWorkbook クラスの Workbook.UnprotectDocument メソッドをオーバーライドし、ブックの保護を解除します。

    ブックが保存されると、Visual Studio Tools for Office ランタイムはこのメソッドを呼び出し、ユーザーにはブックの保護を解除する機会が与えられます。これにより、キャッシュされたデータへの変更を保存できるようになります。

  3. ThisWorkbook クラスの Workbook.ProtectDocument メソッドをオーバーライドし、ドキュメントに保護を再適用します。

    ブックが保存されると、Visual Studio Tools for Office ランタイムはこのメソッドを呼び出し、ユーザーにはブックの保護を再適用する機会が与えられます。

次のコード例は、パスワードで保護されている Excel ブックのデータをキャッシュする方法を示しています。コードでは、Workbook.UnprotectDocument メソッドで保護を解除する前に、現在の ProtectStructure 値と ProtectWindows 値を保存します。こうして、Workbook.ProtectDocument メソッドを使用して同じ種類の保護を再適用できるようにします。

<CachedAttribute()> _
Public CachedString As String = "This string is cached in the workbook."

Private protectStructureValue As Boolean
Private protectWindowsValue As Boolean

Protected Overrides Sub UnprotectDocument()
    protectStructureValue = Me.ProtectStructure
    protectWindowsValue = Me.ProtectWindows

    Me.Unprotect(securelyStoredPassword)
End Sub

Protected Overrides Sub ProtectDocument()
    Me.Protect(securelyStoredPassword, protectStructureValue, _
        protectWindowsValue)
End Sub
[CachedAttribute]
public string CachedString = "This string is cached in the workbook.";

private bool protectStructureValue;
private bool protectWindowsValue;

protected override void UnprotectDocument()
{
    protectStructureValue = this.ProtectStructure;
    protectWindowsValue = this.ProtectWindows;

    this.Unprotect(securelyStoredPassword);
}

protected override void ProtectDocument()
{
    this.Protect(securelyStoredPassword, protectStructureValue,
        protectWindowsValue);
}

コードのコンパイル

このコードをプロジェクトの ThisWorkbook クラスに追加します。このコードでは、パスワードは securelyStoredPassword という名前のフィールドに格納されていることを前提としています。

参照

処理手順

方法 : オフラインで使用するデータまたはサーバー上で使用するデータをキャッシュする

方法 : Office ドキュメント内のデータ ソースをプログラムでキャッシュする

概念

キャッシュされたデータ

履歴の変更

日付

履歴

理由

2008 年 7 月

新しいトピックを追加

SP1 機能変更