您可以針對文件層級自訂中的資料進行程式設計,而不需要使用 Microsoft Office Word 或 Microsoft Office Excel 的物件模型。 這表示您可以在未安裝 Word 或 Excel 的伺服器上存取文件中包含的資料。 例如,伺服器上的程式碼 (例如,在 ASP.NET 頁面中) 可以自訂文件中的資料,並將自訂文件傳送給一般使用者。 當使用者開啟文件時,解決方案組件中的資料繫結程式碼會將自訂資料繫結到文件中。 這是可能的,因為文件中的資料與使用者介面是分開的。 如需詳細資訊,請參閱 文件層級自訂中的快取資料。
適用於: 本主題中的資訊適用於 Excel 和 Word 的文件層級專案。 如需詳細資訊,請參閱 Office 應用程式和專案類型所提供的功能。
將資料快取以供伺服器使用
若要在文件中快取資料物件,請在設計階段將其標記為 CachedAttribute 屬性,或在執行階段使用主機項目的 StartCaching 方法。 當您快取文件中的資料物件時,Visual Studio Tools for Office 執行階段會將物件序列化為儲存在文件中的 XML 字串。 物件必須符合特定條件,才能具備被快取的資格。 如需詳細資訊,請參閱 快取資料。
伺服器端程式碼可以操作資料快取中的任何資料物件。 繫結至快取資料執行個體的控制項會與使用者介面同步化,以便在用戶端上開啟文件時,自動顯示對資料所做的任何伺服器端變更。
存取快取中的資料
您可以從 Office 外部的應用程式存取快取中的資料,例如從主控台應用程式、Windows Forms 應用程式或網頁。 存取快取資料的應用程式必須具有完全信任;具有部分信任的 Web 應用程式無法插入、擷取或變更快取在 Office 文件中的資料。
資料快取可透過類別ServerDocument的屬性CachedData所公開的集合階層來存取:
屬性 CachedData 會傳回 CachedData,其中包含文件層級自訂中的所有快取資料。
每個 CachedData 都包含一或多個 CachedDataHostItem 物件。 A CachedDataHostItem 包含單一類別內定義的所有快取資料物件。
每個 CachedDataHostItem 都包含一或多個 CachedDataItem 物件。 A CachedDataItem 代表單一快取資料物件。
下列程式碼範例示範如何存取 Excel 活頁簿專案類別中的
Sheet1快取字串。 此範例是針對方法 Save 提供的較大範例的一部分。
修改快取中的資料
若要修改快取的資料物件,您通常會執行下列步驟:
將快取物件的 XML 表示法還原序列化為物件的新實例。 您可以透過代表快取資料物件的 Xml 屬性來存取 CachedDataItem 中的 XML。
對此副本進行變更。
將變更的物件序列化回資料快取,您可以使用下列其中一個選項:
如果您想要自動序列化變更,請使用SerializeDataInstance方法。 此方法使用 DiffGram 格式來序列化資料快取中的DataSet、DataTable和類型化的資料集物件。 DiffGram 格式可確保離線文件中資料快取的變更會正確傳送至伺服器。
如果您想要針對快取資料的變更執行自己的序列化,您可以直接寫入 Xml 屬性。 如果您使用 DiffGram 格式,將 DataAdapter, DataSet, 或類型化資料集中的資料變更更新到資料庫,請指定該格式。 否則,DataAdapter 會更新資料庫,具體方式是新增資料列,而不是修改現有資料列。
修改資料而不反序列化當前值
在某些情況下,您可能想要修改快取的物件的值,而不先將目前的值反序列化。 例如,如果您要變更具有簡單類型(如字串或整數)的物件值或正在伺服器上的文件中初始化快取 DataSet,則可以執行此操作。 在這些情況下,您可以使用方法 SerializeDataInstance ,而不需要先還原序列化快取物件的目前值。
下列程式碼範例示範如何變更 Excel 活頁簿專案類別中 Sheet1 快取字串的值。 此範例是針對方法 Save 提供的較大範例的一部分。
serverDocument1 = new ServerDocument(documentPath);
CachedDataHostItem hostItem1 =
serverDocument1.CachedData.HostItems["ExcelWorkbook1.Sheet1"];
CachedDataItem dataItem1 = hostItem1.CachedData["CachedString"];
if (dataItem1 != null &&
Type.GetType(dataItem1.DataType) == typeof(string))
{
dataItem1.SerializeDataInstance("This is the new cached string value.");
serverDocument1.Save();
}
修改資料快取中的空值
資料快取不會儲存儲存並關閉文件時值為 null 的物件。 當您修改快取資料時,此限制會產生數個後果:
如果將資料快取中的任何物件設定為 值null,則在開啟文件時,資料快取中的所有物件都會自動設定為 null ,並在儲存和關閉文件時清除整個資料快取。 也就是說,所有快取的物件都會從資料快取中移除,且 CachedData 集合會是空的。
如果您在資料快取中建立了具有空值物件的解決方案,並且想要在第一次開啟文件之前通過ServerDocument類別來初始化這些物件,您必須確保初始化資料快取中的所有物件。 如果您只初始化部分物件,則開啟文件時所有物件都會設定為 空值 ,而儲存和關閉文件時,整個資料快取都會被清除。
存取快取中的類型化資料集
如果您想要從 Office 解決方案和 Office 外部的應用程式 (例如 Windows Forms 應用程式或 ASP.NET 專案) 存取類型化資料集中的資料,您必須在這兩個專案中參考的個別元件中定義類型化資料集。 如果您使用 [資料來源設定 精靈] 或 [資料集設計工具] 將類型化資料集新增至每個專案,.NET Framework 會將兩個專案中的類型化資料集視為不同的類型。 如需建立類型化資料集的詳細資訊,請參閱在 Visual Studio 中建立和設定資料集。