方法 : パスワードで保護されたドキュメント内のデータをキャッシュする
パスワードで保護された文書またはブックのデータ キャッシュにデータを追加した場合、キャッシュされたデータへの変更は自動的に保存されません。プロジェクトで 2 つのメソッドをオーバーライドすることによって、キャッシュされたデータへの変更を保存できます。
対象: このトピックの情報は、Excel 2013 と Excel 2010、および Word 2013 と Word 2010 のドキュメント レベルのプロジェクトに適用されます。詳細については、「Office アプリケーションおよびプロジェクト タイプ別の使用可能な機能」を参照してください。
Word 文書のキャッシュ
パスワードで保護された Word 文書内のデータをキャッシュするには
ThisDocument クラスで、キャッシュの対象とするパブリック フィールドまたはプロパティを指定します。詳細については、「キャッシュされたデータ」を参照してください。
ThisDocument クラスの DocumentBase.UnprotectDocument メソッドをオーバーライドし、文書の保護を解除します。
文書が保存されると、Visual Studio Tools for Office Runtime はこのメソッドを呼び出し、ユーザーには文書の保護を解除する機会が与えられます。これにより、キャッシュされたデータへの変更を保存できるようになります。
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 ブック内のデータをキャッシュするには
ThisWorkbook クラスまたはいずれかの Sheetn クラスで、キャッシュの対象とするパブリック フィールドまたはプロパティを指定します。詳細については、「キャッシュされたデータ」を参照してください。
ThisWorkbook クラスの WorkbookBase.UnprotectDocument メソッドをオーバーライドし、ブックの保護を解除します。
ブックが保存されると、Visual Studio Tools for Office Runtime はこのメソッドを呼び出し、ユーザーにはブックの保護を解除する機会が与えられます。これにより、キャッシュされたデータへの変更を保存できるようになります。
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 ドキュメント内のデータ ソースをプログラムでキャッシュする