リレーションシップ ID を受け取る新しいドキュメント パーツをパッケージに追加する
適用対象: Excel 2010 | Office 2010 | PowerPoint 2010 | Word 2010
この記事の内容
パッケージとドキュメント パーツ
WordProcessingML ドキュメントの構造
サンプル コードの動作のしくみ
サンプル コード
このトピックでは、Open XML SDK 2.0 for Microsoft Office のクラスを使用して、ワープロ ドキュメントのリレーションシップ Id パラメーターを受け取るドキュメント パーツ (ファイル) を追加する方法について説明します。
このトピックのコードをコンパイルするには、次のアセンブリ ディレクティブが必要です。
using System.IO;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System.Xml;
Imports System.IO
Imports DocumentFormat.OpenXml
Imports DocumentFormat.OpenXml.Packaging
Imports DocumentFormat.OpenXml.Wordprocessing
Imports System.Xml
パッケージとドキュメント パーツ
Open XML ドキュメントはパッケージとして保存されます。このパッケージの形式は、ISO/IEC 29500-2 (英語) に定義されています。パッケージの内部は、リレーションシップで結ばれた複数のパーツに分けることができます。パーツ間のリレーションシップによって、ドキュメントのカテゴリが決まります。パッケージのリレーションシップ アイテムにメイン ドキュメント パーツへのリレーションシップを含めると、そのドキュメントをワープロ ドキュメントとして定義できます。パッケージのリレーションシップ アイテムにプレゼンテーション パーツへのリレーションシップを含めると、そのドキュメントをプレゼンテーション ドキュメントとして定義できます。パッケージのリレーションシップ アイテムにブック パーツへのリレーションシップを含めると、そのドキュメントをスプレッドシート ドキュメントとして定義できます。このトピックでは、ワープロ ドキュメント パッケージを使用します。
WordProcessingML ドキュメントの構造
WordProcessingML ドキュメントの基本ドキュメント構造は、document 要素と body 要素、およびそれに続く 1 つ以上のブロック レベルの要素 (段落を表す p など) で構成されます。段落には 1 つ以上の r 要素が含まれます。r はセクションを表し、書式などの共通のプロパティ セットがあるテキストの領域です。セクションには 1 つ以上の t 要素が含まれます。t 要素は、さまざまなテキストを含みます。次のコード例は、テキスト "Example text." を含むドキュメントの WordprocessingML マークアップを示します。
<w:document xmlns:w="https://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>Example text.</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
Open XML SDK 2.0 を使用すると、WordprocessingML 要素に対応した、厳密に型指定されたクラスを使用してドキュメント構造とコンテンツを作成できます。これらのクラスは DocumentFormat.OpenXml.Wordprocessing 名前空間にあります。以下の表に、document、body、p、r、t の各要素に対応するクラスのクラス名を示します。
WordprocessingML 要素 |
Open XML SDK 2.0 のクラス |
説明 |
---|---|---|
document |
メイン ドキュメント パーツのルート要素 |
|
body |
ISO/IEC 29500 の仕様で規定されている、段落、表、注釈などのブロック レベル構造のコンテナー |
|
p |
段落 |
|
r |
セクション |
|
t |
さまざまなテキスト |
サンプル コードの動作のしくみ
このサンプル コードでは、まず Word 文書のパスを表すパラメーターを渡します。次に、ドキュメントを WordprocessingDocument オブジェクトとして作成します。
public static void AddNewPart(string document)
{
// Create a new word processing document.
WordprocessingDocument wordDoc =
WordprocessingDocument.Create(document,
WordprocessingDocumentType.Document);
Public Shared Sub AddNewPart(ByVal document As String)
' Create a new word processing document.
Dim wordDoc As WordprocessingDocument = _
WordprocessingDocument.Create(document, WordprocessingDocumentType.Document)
リレーションシップ ID rId1 を使用して、新しいワープロ ドキュメントに MainDocumentPart パーツを追加します。また、CustomFilePropertiesPart パーツと CoreFilePropertiesPart パーツも新しいワープロ ドキュメントに追加します。
// Add the MainDocumentPart part in the new word processing document.
MainDocumentPart mainDocPart = wordDoc.AddNewPart<MainDocumentPart>
("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", "rId1");
mainDocPart.Document = new Document();
// Add the CustomFilePropertiesPart part in the new word processing document.
CustomFilePropertiesPart customFilePropPart = wordDoc.AddCustomFilePropertiesPart();
customFilePropPart.Properties = new DocumentFormat.OpenXml.CustomProperties.Properties();
// Add the CoreFilePropertiesPart part in the new word processing document.
CoreFilePropertiesPart coreFilePropPart = wordDoc.AddCoreFilePropertiesPart();
using (XmlTextWriter writer =
new XmlTextWriter(coreFilePropPart.GetStream(FileMode.Create), System.Text.Encoding.UTF8))
{
writer.WriteRaw("<?xml version=\"1.0\" encoding=\"UTF-
8\"?>\r\n<cp:coreProperties xmlns:cp=\
"https://schemas.openxmlformats.org/package/2006/metadata/core-properties\"></cp:coreProperties>");
writer.Flush();
}
' Add the MainDocumentPart part in the new word processing document.
Dim mainDocPart As MainDocumentPart = wordDoc.AddNewPart(Of MainDocumentPart) _
("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", "rId1") _
mainDocPart.Document = New Document()
' Add the CustomFilePropertiesPart part in the new word processing document.
Dim customFilePropPart As CustomFilePropertiesPart = wordDoc.AddCustomFilePropertiesPart()
customFilePropPart.Properties = New DocumentFormat.OpenXml.CustomProperties.Properties()
' Add the CoreFilePropertiesPart part in the new word processing document.
Dim coreFilePropPart As CoreFilePropertiesPart = wordDoc.AddCoreFilePropertiesPart()
Using writer As New XmlTextWriter(coreFilePropPart.GetStream(FileMode.Create), System.Text.Encoding.UTF8)
writer.WriteRaw("<?xml version=""1.0"" encoding=""UTF-8""?>" _
& vbCrLf & "<cp:coreProperties xmlns:cp=""https://schemas.openxmlformats.org/package/2006/metadata/core-properties""></cp:coreProperties>")
writer.Flush()
End Using
リレーションシップ ID rId4、rId5、および rId6 を使用して、DigitalSignatureOriginPart パーツ、ExtendedFilePropertiesPart パーツ、および ThumbnailPart パーツを新しいワープロ ドキュメントに追加します。そして wordDoc オブジェクトを閉じます。
// Add the DigitalSignatureOriginPart part in the new word processing document.
wordDoc.AddNewPart<DigitalSignatureOriginPart>("rId4");
// Add the ExtendedFilePropertiesPart part in the new word processing document.**
ExtendedFilePropertiesPart extendedFilePropPart = wordDoc.AddNewPart<ExtendedFilePropertiesPart>("rId5");
extendedFilePropPart.Properties = new DocumentFormat.OpenXml.ExtendedProperties.Properties();
// Add the ThumbnailPart part in the new word processing document.
wordDoc.AddNewPart<ThumbnailPart>("image/jpeg", "rId6");
wordDoc.Close();
' Add the DigitalSignatureOriginPart part in the new word processing document.
wordDoc.AddNewPart(Of DigitalSignatureOriginPart)("rId4")
' Add the ExtendedFilePropertiesPart part in the new word processing document.**
Dim extendedFilePropPart As ExtendedFilePropertiesPart = wordDoc.AddNewPart(Of ExtendedFilePropertiesPart)("rId5")
extendedFilePropPart.Properties = New DocumentFormat.OpenXml.ExtendedProperties.Properties()
' Add the ThumbnailPart part in the new word processing document.
wordDoc.AddNewPart(Of ThumbnailPart)("image/jpeg", "rId6")
wordDoc.Close()
注意
AddNewPart<T> メソッドは、現在のドキュメント パーツから新しいドキュメント パーツにリレーションシップを作成します。このメソッドは、新しいドキュメント パーツを返します。また、DataPart.FeedData メソッドを使用してドキュメント パーツにデータを入力することもできます。
サンプル コード
以下のコードでは、カスタム XML を含む新しいドキュメント パーツを外部ファイルから追加し、そのドキュメント パーツを設定します。AddNewPart メソッドを呼び出すには、次のコード例のような呼び出しを使用します。
string document = @"C:\Users\Public\Documents\MyPkg1.docx";
AddNewPart(document);
Dim document As String = "C:\Users\Public\Documents\MyPkg1.docx"
AddNewPart(document)
以下は、C# および Visual Basic の完全なコード例です。
public static void AddNewPart(string document)
{
// Create a new word processing document.
WordprocessingDocument wordDoc =
WordprocessingDocument.Create(document,
WordprocessingDocumentType.Document);
// Add the MainDocumentPart part in the new word processing document.
var mainDocPart = wordDoc.AddNewPart<MainDocumentPart>
("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", "rId1");
mainDocPart.Document = new Document();
// Add the CustomFilePropertiesPart part in the new word processing document.
var customFilePropPart = wordDoc.AddCustomFilePropertiesPart();
customFilePropPart.Properties = new DocumentFormat.OpenXml.CustomProperties.Properties();
// Add the CoreFilePropertiesPart part in the new word processing document.
var coreFilePropPart = wordDoc.AddCoreFilePropertiesPart();
using (XmlTextWriter writer = new
XmlTextWriter(coreFilePropPart.GetStream(FileMode.Create), System.Text.Encoding.UTF8))
{
writer.WriteRaw("<?xml version=
\"1.0\" encoding=\"UTF-8\"?>\r\n<cp:coreProperties xmlns:cp=\
"https://schemas.openxmlformats.org/package/2006/metadata/core-properties\"></cp:coreProperties>");
writer.Flush();
}
// Add the DigitalSignatureOriginPart part in the new word processing document.
wordDoc.AddNewPart<DigitalSignatureOriginPart>("rId4");
// Add the ExtendedFilePropertiesPart part in the new word processing document.
var extendedFilePropPart = wordDoc.AddNewPart<ExtendedFilePropertiesPart>("rId5");
extendedFilePropPart.Properties =
new DocumentFormat.OpenXml.ExtendedProperties.Properties();
// Add the ThumbnailPart part in the new word processing document.
wordDoc.AddNewPart<ThumbnailPart>("image/jpeg", "rId6");
wordDoc.Close();
}
Public Sub AddNewPart(ByVal document As String)
' Create a new word processing document.
Dim wordDoc As WordprocessingDocument = _
WordprocessingDocument.Create(document, WordprocessingDocumentType.Document)
' Add the MainDocumentPart part in the new word processing document.
Dim mainDocPart = wordDoc.AddNewPart(Of MainDocumentPart) _
("application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", "rId1")
mainDocPart.Document = New Document()
' Add the CustomFilePropertiesPart part in the new word processing document.
Dim customFilePropPart = wordDoc.AddCustomFilePropertiesPart()
customFilePropPart.Properties = New DocumentFormat.OpenXml.CustomProperties.Properties()
' Add the CoreFilePropertiesPart part in the new word processing document.
Dim coreFilePropPart = wordDoc.AddCoreFilePropertiesPart()
Using writer As New XmlTextWriter(coreFilePropPart.GetStream(FileMode.Create), _
System.Text.Encoding.UTF8)
writer.WriteRaw( _
"<?xml version=""1.0"" encoding=""UTF-8""?>" & vbCr & vbLf & _
"<cp:coreProperties xmlns:cp=""https://schemas.openxmlformats.org/package/2006/metadata/core-properties""></cp:coreProperties>")
writer.Flush()
End Using
' Add the DigitalSignatureOriginPart part in the new word processing document.
wordDoc.AddNewPart(Of DigitalSignatureOriginPart)("rId4")
' Add the ExtendedFilePropertiesPart part in the new word processing document.
Dim extendedFilePropPart = wordDoc.AddNewPart(Of ExtendedFilePropertiesPart)("rId5")
extendedFilePropPart.Properties = _
New DocumentFormat.OpenXml.ExtendedProperties.Properties()
' Add the ThumbnailPart part in the new word processing document.
wordDoc.AddNewPart(Of ThumbnailPart)("image/jpeg", "rId6")
wordDoc.Close()
End Sub