Word 的內容控制項
瞭解 Microsoft Word 2013 內容控制項如何啟用更大範圍的結構化檔案例。
本主題提供 Microsoft Word 2013 中內容控件變更的相關信息,以及這些變更所啟用的檔案例。
結構化文件
結構化文件會控制文件中的內容可以出現在何處、何種內容可以出現,以及內容是否可以編輯。
以下是 Microsoft Word 中結構化內容的一些常見案例:
一間律師事務所需要建立包含法律用語的文件,文件不應該由使用者變更。
一個企業需要建立提案的封面頁,其中只有標題、作者和日期是由使用者輸入。
一個企業需要建立發票,其中包括客戶資料,位於預先定義的區域。
使用內容控制項來結構化文件
內容控制件是 Microsoft Word 實體,可作為檔中特定內容的容器。 個別的內容控制項可能含有內容,例如日期、清單或格式化文字的段落。 內容控制項可協助您建立豐富、結構化的內容區塊,且是設計用來在範本中,將妥善定義的區塊插入文件內、建立結構化文件。
內容控制項很適合用於建立結構化文件,因為內容控制項可協助您固定內容的位置、指定內容種類 (例如日期、圖片或文字)、限制或啟用編輯,並為內容加入語意上的意義。
Word 2010 中的內容控制件
2010 Word 提供下列內容控制項:
RTF 格式
純文字
圖片
建置組塊庫
下拉式方塊
下拉式清單
Date
核取方塊
Group
Word 2010 內容控制項可啟用各種潛在的結構化檔解決方案,但在 Word 2013 中,內容控制件會啟用更多範圍的案例。
Word 2013 中的內容控制項改善
在 Word 2013 中,內容控制項提供三個主要改善:改善的視覺效果、支援 RTF 內容控制件的 XML 對應,以及用於重複內容的新內容控制項。
改進的視覺效果
Word 2013 可讓個別內容控制件出現在三種可能狀態的其中一種:
週框方塊
開始/結束標籤
無
注意事項
除非另行指定,本節將討論文件不在 [設計模式] 下檢視時,內容控制項的視覺效果。您可以使用 [內容控制項屬性] 對話方塊中的 [顯示為] 下拉式清單控制項,來設定內容控制項的顯示模式。
圖 1: 內容控制件屬性對話框
您也可以使用 Word 2013 物件模型來設定內容控件的顯示模式, (稍後在 New Word 2013 內容控件物件模型成員) 中討論。
週框方塊
Word 2013 中內容控件的預設轉譯是保留內容控件在 2007 Word 和 2010 Word 中顯示的外觀,也就是當做周框方塊。 當內容控制項設定成顯示為 [週框方塊] 時,顯示的變更會視下列使用者互動而定︰
當內容控制項沒有焦點時,便不會發生視覺效果
當滑鼠移至上方時,內容控制項會顯示為具有陰影的矩形
圖 2: 滑鼠上方的內容控制件
- 當內容控制項有焦點 (使用者選擇內容控制項) 時,控制項會顯示為「週框方塊」(如果已設定標題,則內容和標題週圍會顯示線條)
圖 3: Content control with focus
開始/結束標籤
當內容控制項設定成顯示為 [開始/結束標籤] 時,不論使用者互動為何,都會顯示標籤,而標題永遠不會出現;但按鈕 (例如 [下拉式清單] 按鈕) 則會在滑鼠移至上方時出現。
圖 4: 內容控制項設定為顯示為開始/結束標記
無
當內容控制項設定成顯示為 [無] 時,則不會顯示內容控制項。
內容控制項的顏色標示
除了為內容控制件啟用不同類型的顯示,Word 2013 也可協助您設定個別內容控制件的色彩。 您可以使用在 [內容控制項屬性] 對話方塊中的 [色彩] 按鈕,來設定內容控制項的色彩。
您也可以使用 Word 2013 物件模型來設定內容控件的色彩, (稍後在 New Word 2013 內容控制件物件模型成員) 中討論。
圖 5: 內容控制件屬性對話框
支援 RTF 內容控制項的 XML 對應
Word 2013 可協助您將 RTF 內容控制項和檔案建置元件內容控制項的內容對應至 XML 資料存放區。 若要執行這項操作,請設定內容控制項的 [XML 對應] 。 您可以使用物件模型中現有的 XMLMapping.SetMapping 方法,來設定此屬性。 自訂的 XML 組件內,自訂 XML 會 (藉由使用標準 XML 編碼) 儲存為轉換為字串的 Open XML 標記,因此可以儲存為自訂 XML 組件中的文字節點。 但是,對應仍會有限制,所以只可以成功地對應到分葉節點或屬性。
注意事項
RTF 內容控制項不能包含其他 RTF 內容控制項。 如果其中一個存在於另一個內 (例如,因為檔案格式的處理、複製並貼上等等),則會中斷連結,直到不再包含在對應的 RTF 控制項內為止。
如需有關如何設定 XML 對應的詳細資訊,請參閱稍後在本主題中討論的<新的 Word 2013 內容控制項物件模型成員>章節。
支援重複的內容
除了視覺效果增強功能和支援對 RTF 內容控制件的 XML 對應之外,Word 2013 也新增了可讓您重複內容的新內容控制件。 重複區段內容控制項,會重複包含在其内的內容,包括其他內容控制項。
您可以在整個段落或表格列週圍,插入重複區段內容控制項。 一旦控制項環繞區段,您就可以在所包含的區段上方或下方,插入區段的複本。
圖 6: 重複區段內容控制項操作功能表
您可以重複插入的區段,方法是使用內容控件結尾的控件 (顯示為具有加號的按鈕 (號) ) 或選擇操作功能表上的命令,如圖 6 所示。 重複的內容會變成分離的區段,您可以使用 [內容控制項屬性] 對話方塊,來指派其標題。
圖 7: 在 [內容控件屬性] 對話框中指派區段標題
螢幕快照
一旦指定區段的標題,若您選取 [內容控制項屬性] 對話方塊中的 [允許使用者新增和移除區段],使用者就可以依名稱來新增或刪除區段。
圖 8. 使用重複區段內容控制項操作功能表來刪除區段
當重複區段內容控制項環繞其他內容控制項時,圍繞的內容控制項就會在每個新的項目中重複;但是,任何這樣的內容控制項,都會將其內容重設為預留位置文字。 在兩個例外狀況下會保留子控制項的內容︰
當子控制項為重複區段控制項時。
當子控制項 XML 對應到重複區段內容控制項外部的節點時。
Figure 9. 重複包含子控件的區段內容控制件,然後再重複
Figure 10. 重複重複后包含子控件的區段內容控制件
在 XML 對應的控制項週圍的重複區段內容控制項
針對重複區段中包含的 XML 對應,Word 2013 會對應它們,如下所示。
如果對應未與節點集合中的專案交集作為其父鏈結的一部分,系結就是「絕對系結」,而且會在所有重複的區段項目中顯示相同的內容。
如果對應與節點集合中的專案交集為其父鏈結的一部分,系結會是「相對系結」,並會依下列方式重新對應:
已決定節點的絕對繫結 (簡維出任何查詢運算式) - 這應該會發生在初始對應時
已移除與節點集交集的繫結座標軸
已評估相對於重複區段內容項目的 XPath,繫結 XPath 的其餘部分
例如,可能會發生下列的對應︰
重複區段已對應至 \root\next\path
範例項目中的控制項已對應至 \root\next\path[2]\baz
Word 會使 \root\next\path[2] 和節點集中的項目相符
繫結會因此評估為 .\baz,基底是重複內容項目的節點。
下列有關使用重複內容控制項的建議,可以協助您防止資料遺失,並避免挫敗感。
使用已對應至 XML 資料的重複區段內容控制項
如果您插入已對應至 XML 資料的重複區段內容控制項,每次您的使用者重新開啟文件時,Word 會根據資料存放區中的資訊,重新建立重複的區段項目。 即使您儲存檔,使用者在檔案的重複區段專案中所做的任何變更也不會對應到資料存放區。
為了避免這種情況發生,請鎖定重複區段內容控制項,並讓使用者只能在未鎖定的子內容控制項中編輯,子內容控制項也要對應到 XML。
將重複區段內容控制項繫結到資料表
如果您想要將重複區段內容控制項繫結至資料表,請插入表格,然後插入重複區段內容控制項,而不是正好相反。 (否則,您將無法只選取資料表) 。
巢狀化資料表內的重複區段內容控制項
若資料表內的重複區段內容控制項緊密巢狀化 (例如,當父系與子系重複區段內容控制項位於相同儲存格時),則當內部區段新增或移除項目時,也會刪除外部的重複區段。
您可以透過在一個重複區段內容控制項的結尾與下一個之間,新增段落標記,來避免這種情況發生。 若要隱藏段落標記,請在功能區的 [首頁] 索引標籤上,取消選取 [顯示/隱藏] 選項。
Open XML 檔案格式結構描述新增
下列元素已新增到 WordprocessingML Open XML 檔案格式結構描述中。
表 1. WordprocessingML Open XML 檔案格式架構中內容控件的新元素
元素 | 描述 |
---|---|
<w:appearance> |
<w:appearance> 是 w:sdtPr> 的<子元素。 下列值為 val 屬性的有效值: <w:appearance val= boundingBox|tags|hidden. 預設值為 boundingBox。 |
<w:color> |
<w:color> 是 w:sdtPr> 的<子元素。 內容模型符合現有的 CT_Color 複雜類型。 預設值為 Word 2010 中使用的色彩。 |
新 Word 2013 內容控制件物件模型成員
在 2013 Word 中,隨著內容控件的新增強功能和新增功能,已更新 Word 的物件模型,以允許以程式設計方式操作新的功能集。 此外,也對用於文字處理文件的內部 Open XML 檔案格式進行變更。
下列各節會提供有關特定物件模型變更的詳細資訊,與每個內容控制項的增強功能相關。
視覺效果增強功能
Word 2013 中包含數個新增的物件模型,以增強內容控件視覺效果。 下表列出了視覺效果 ContentControl 物件的新成員。
表 2. 新的 ContentControl 物件成員
Member | 描述 |
---|---|
.
WdContentControlAppearance的外觀 |
會取得或設定內容控制項的視覺效果。 |
.
WdColor 的色彩 |
取得或設定內容控制項的色彩。 |
下表列出了新 WdContentControlAppearance 列舉的常數。
表格 3 新的 WdContentControlAppearance 列舉常數
常數 | 描述 |
---|---|
wdContentControlBoundingBox |
代表內容控制項會顯示為具有陰影的矩形/週框方塊 (含選擇性標題)。 |
wdContentControlTags |
代表內容控制項會顯示為開始/結束標記。 |
wdContentControlHidden |
代表不顯示的內容控制項。 |
程式碼範例
下列程式碼範例會示範如何建立 RTF 內容控制項,並以程式設計方式來設定視覺效果。
Sub testVisualization()
Dim objcc As ContentControl
Dim objRange As Range
' Get the first paragraph as a range object.
Set objRange = ActiveDocument.Paragraphs(1).Range
' Create a rich text content control around the first paragraph.
Set objcc = ActiveDocument.ContentControls.Add(wdContentControlRichText, objRange)
objcc.Title = "Default Bounding Box"
' Set visualization to the default.
objcc.Appearance = wdContentControlBoundingBox
' Create a new paragraph.
objRange.InsertParagraphAfter
Set objRange = ActiveDocument.Paragraphs(2).Range
' Create a rich text content control around the second paragraph.
Set objcc = ActiveDocument.ContentControls.Add(wdContentControlRichText, objRange)
objcc.Title = "Non Bounding"
' Set visualization to invisible.
objcc.Appearance = wdContentControlHidden
' Create a new paragraph.
objRange.InsertParagraphAfter
Set objRange = ActiveDocument.Paragraphs(3).Range
' Create a rich text content control around the third paragraph.
Set objcc = ActiveDocument.ContentControls.Add(wdContentControlRichText, objRange)
objcc.Title = "Tags Only with Pink color"
' Set visualization to Start/End tags with pink color.
objcc.Appearance = wdContentControlTags
objcc.Color = wdColorPink
End Sub
XML 對應
未新增 Word 2013 物件模型,以容納檔數據存放區中 XML 節點的 RTF 對應。 相反地,是使用有的物件模型,來將 RTF 內容控制項對應到文件資料存放區中的 XML 節點。 此外,內部的 Open XML 檔案格式 WordprocessingML 結構描述未進行任何變更,由於一部分新包含的 RTF 內容控制項,會支援 XML 對應。
程式碼範例
下列程式碼範例會示範如何以程式設計方式,來將 RTF 內容控制項對應到 XML 節點。
Sub testRichBinding()
Dim objRange As Range
Dim objcc As ContentControl
Dim objCustomPart As CustomXMLPart
Dim blnMap As Boolean
' Add a custom XML part to the data store.
Set objCustomPart = ActiveDocument.CustomXMLParts.Add
' Load XML fragment into the custom XML part.
objCustomPart.LoadXML ("<x>Rich Text Databinding</x>")
' Get the first paragraph as a range object.
Set objRange = ActiveDocument.Paragraphs(1).Range
' Create a rich text content control around the first paragraph.
Set objcc = ActiveDocument.ContentControls.Add(wdContentControlRichText, objRange)
' Bind the XML node to the rich text content control.
blnMap = objcc.XMLMapping.SetMapping("/x")
' Return whether mapping worked.
MsgBox objcc.XMLMapping.IsMapped
End Sub
物件模型中所代表的重複區段內容控制項
透過使用下列新增的 ContentControl 物件及新的 RepeatingSectionItem 和 RepeatingSectionItemColl 物件,可在物件模型中使用重複區段內容控制項。 表 4 會列出重複區段內容控制項 ContentControl 物件最重要的新成員。
表格 4 ContentControl 物件成員
Member | 描述 |
---|---|
AllowInsertDeleteSection 作為 布爾值 |
取得或設定使用者是否可以使用UI從內容控制項新增或移除區段。 如果針對不是重複區段類型的內容控制件呼叫這個屬性,呼叫會失敗,並出現下列錯誤訊息:「此屬性只能與重複的區段內容控件搭配使用。」 |
RepeatingSectionItemTitle 作為 字串 |
取得或設定操作功能表中使用的重複區段項目的名稱。 如果針對不是重複區段類型的內容控件呼叫這個屬性,呼叫會失敗,並顯示:「此屬性只能與重複區段內容控件搭配使用。」 |
InsertRepeatingSectionItemBefore 作為 ContentControl |
在目前專案之前加入重複區段專案,並傳回新的重複區段專案。 如果針對不是重複區段項目類型的內容控制項呼叫這個方法,呼叫會失敗,並顯示:「此屬性只能與重複的區段專案內容控制項搭配使用。」 |
InsertRepeatingSectionItemAfter 作為 ContentControl |
將重複區段專案加入目前項目之後,並傳回新的重複區段專案。 如果針對不是重複區段項目類型的內容控制項呼叫這個方法,呼叫會失敗,並顯示:「此屬性只能與重複的區段專案內容控制項搭配使用。」 |
表 5 會列出 RepeatingSectionItem 物件最重要的成員。
表格 5 RepeatingSectionItem 對象成員
Member | 描述 |
---|---|
範圍 為 範圍 |
傳回指定的重複區段專案範圍,不包括開始和結束標記。 |
Delete |
會刪除指定的重複區段項目。 |
InsertItemAfter 作為 RepeatingSectionItem |
會在指定的項目之後新增重複區段項目,並傳回新項目。 |
InsertItemBefore 作為 RepeatingSectionItem |
會在指定的項目之前新增重複區段項目,並傳回新項目。 |
表 6 會列出 RepeatingSectionItemColl 物件最重要的成員。
表格 6 RepeatingSectionItemColl 對象成員
Member | 描述 |
---|---|
專案 為 RepeatingSectionItem |
會傳回個別的重複區段項目。 |
表 7 會顯示重複區段內容控制項 WdContentControlType 列舉的新成員。
表格 7 WdContentControlType 列舉加法
常數 | 描述 |
---|---|
wdContentControlRepeatingSection |
代表重複區段中包含單一項目的內容控制項。 |
程式碼範例
下列程式碼範例會示範如何以程式設計方式,來使用重複區段內容控制項。
Sub testRepeatingSectionControl()
Dim objRange As Range
Dim objTable As Table
Dim objCustomPart As CustomXMLPart
Dim objCC As ContentControl
Dim objCustomNode As CustomXMLNode
Set objCustomPart = ActiveDocument.CustomXMLParts.Add
objCustomPart.LoadXML ("<books>" & _
"<book><title>Everyday Italian</title>" & _
"<author>Giada De Laurentiis</author></book>" & _
"<book><title>Harry Potter</title>" & _
"<author>J K. Rowling</author></book>" & _
"<book><title>Learning XML</title>" & _
"<author>Erik T. Ray</author></book></books>")
Set objRange = ActiveDocument.Paragraphs(1).Range
Set objTable = ActiveDocument.Tables.Add(objRange, 2, 2)
With objTable.Borders
.InsideLineStyle = wdLineStyleSingle
.OutsideLineStyle = wdLineStyleDouble
End With
Set objRange = objTable.Cell(1, 1).Range
Set objCustomNode = objCustomPart.SelectSingleNode("/books[1]/book[1]/title[1]")
Set objCC = ActiveDocument.ContentControls.Add(wdContentControlText, objRange)
objCC.XMLMapping.SetMappingByNode objCustomNode
Set objRange = objTable.Cell(1, 2).Range
Set objCustomNode = objCustomPart.SelectSingleNode("/books[1]/book[1]/author[1]")
Set objCC = ActiveDocument.ContentControls.Add(wdContentControlText, objRange)
objCC.XMLMapping.SetMappingByNode objCustomNode
Set objRange = objTable.Rows(1).Range
Set objCC = ActiveDocument.ContentControls.Add(wdContentControlRepeatingSection, objRange)
objCC.XMLMapping.SetMapping ("/books[1]/book")
End Sub
重複區段內容控制項 Open XML 檔案格式的變更
重複區段內容控件的檔格式表示通常會使用與現有 XML 標記相同的專案名稱、值等等;不過,<代表外部重複區段容器的 sdt> 元素存在於 Word 2013 命名空間中,以確保與舊版 Word 相容。
系統會使用現有的 WordprocessingML 表示法,將 (環繞每個個別項目的) 重複區段內容控制項內的個別重複項目,儲存為 RTF 內容控制項。 表 8 會列出重複區段內容控制項的 WordprocessingML 結構描述中的新元素
表格 8 WordprocessingML 架構中用於重複區段內容控件的新元素
元素 | 描述 |
---|---|
<w15:repeatingSection> |
會指定重複區段內容控制項。 這個元素與所有其他控制項類型不可以同時存在,且沒有子元素或屬性。 |
<w15:repeatingSectionItem> |
會指定重複區段項目內容控制項。 這個元素與所有其他控制項類型不可以同時存在,且沒有子元素或屬性。 |
<w15:doNotAllowInsertDeleteSection> |
指定使用者無法使用 2013 Word 中的使用者介面來新增或刪除區段。 |
<w15:sectionTitle> |
會指定重複區段項目名稱 (且在擇控制項時,會用於操作功能表)。 |