次の方法で共有


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

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

対象: このトピックの情報は、Excel 2007 と Excel 2010、および Word 2007 と 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 はこのメソッドを呼び出し、ユーザーには文書の保護を再適用する機会が与えられます。

次のコード例は、パスワードで保護されている 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);
}

コードのコンパイル

このコードをプロジェクトの 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 はこのメソッドを呼び出し、ユーザーにはブックの保護を再適用する機会が与えられます。

次のコード例は、パスワードで保護されている 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);
}

コードのコンパイル

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

参照

処理手順

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

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

概念

キャッシュされたデータ