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

パスワードで保護された文書またはブックのデータ キャッシュにデータを追加した場合、キャッシュされたデータへの変更は自動的に保存されません。プロジェクトで 2 つのメソッドをオーバーライドすることによって、キャッシュされたデータへの変更を保存できます。

対象: このトピックの情報は、Excel 2013 と Excel 2010、および Word 2013 と Word 2010 のドキュメント レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。

Word 文書のキャッシュ

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

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

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

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

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

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

Cc668203.collapse_all(ja-jp,VS.110).gif

次のコード例は、パスワードで保護されている Word 文書のデータをキャッシュする方法を示しています。コードでは、DocumentBase.UnprotectDocument メソッドで保護を解除する前に、現在の ProtectionType 値を保存します。こうして、DocumentBase.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);
}

Cc668203.collapse_all(ja-jp,VS.110).gifコードのコンパイル

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

Excel ブックのキャッシュ

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

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

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

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

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

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

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

Cc668203.collapse_all(ja-jp,VS.110).gif

次のコード例は、パスワードで保護されている Excel ブックのデータをキャッシュする方法を示しています。コードでは、WorkbookBase.UnprotectDocument メソッドで保護を解除する前に、現在の ProtectStructure 値と ProtectWindows 値を保存します。こうして、WorkbookBase.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);
}

Cc668203.collapse_all(ja-jp,VS.110).gifコードのコンパイル

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

参照

処理手順

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

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

概念

キャッシュされたデータ