[方法] Open XML API を使用して Office Open XML パッケージ内のドキュメント パーツを置換する
Office Open XML パッケージの仕様は、コンテンツを含み、単一のパッケージに格納されているすべてのドキュメント パーツのリレーションシップを定義する XML ファイルのセットを定義しています。これらのパッケージは、Microsoft® Office Excel® 2007、Microsoft Office PowerPoint® 2007、および Microsoft Office Word 2007 のドキュメント ファイルを構成するパーツを結合します。Open XML アプリケーション プログラミング インターフェイス (API) を使用して、パッケージを作成したり、パッケージを構成するファイルを操作したりできます。このトピックでは、Office Word 2007 で Office Open XML パッケージ内のドキュメント パーツ (ファイル) を別のドキュメント パーツと置換するためのコードと手順について説明していますが、手順は Office Open XML 形式をサポートする 3 つのどの 2007 Microsoft Office system プログラムでも同様です。
注意
このトピックのコード サンプルは、Microsoft Visual Basic® .NET および Microsoft Visual C#® で記述されており、Microsoft Visual Studio® 2008 で作成されたアドインで使用できますVisual Studio 2008 でアドインを作成する方法の詳細については、「Open XML 形式 SDK 1.0 を使用して作業を開始する」を参照してください。
パッケージのパーツを別のパーツと置換する
以下のコードでは、パッケージ内のあるドキュメント パーツを別のドキュメント パーツに置換し、次に、更新されたパーツにコンテンツを追加します。
' How to replace a document part in a package.
Public Sub ReplaceTheme(ByVal document As String, ByVal themeFile As String)
Dim wordDoc As WordprocessingDocument = WordprocessingDocument.Open(document, True)
Using (wordDoc)
Dim mainPart As MainDocumentPart = wordDoc.MainDocumentPart
' Delete the old document part.
mainPart.DeletePart(mainPart.ThemePart)
' Add a new document part and then add content.
Dim themePart As ThemePart = mainPart.AddNewPart(Of ThemePart)()
Dim streamReader As StreamReader = New StreamReader(themeFile)
Dim streamWriter As StreamWriter = New StreamWriter(themePart.GetStream(FileMode.Create))
Using (streamWriter)
streamWriter.Write(streamReader.ReadToEnd)
End Using
End Using
End Sub
// How to replace a document part in a package.
public static void ReplaceTheme(string document, string themeFile)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
MainDocumentPart mainPart = wordDoc.MainDocumentPart;
// Delete the old document part.
mainPart.DeletePart(mainPart.ThemePart);
// Add a new document part and then add content.
ThemePart themePart = mainPart.AddNewPart<ThemePart>( );
using (StreamReader streamReader = new StreamReader(themeFile))
using (StreamWriter streamWriter = new StreamWriter( themePart.GetStream(FileMode.Create ) ))
{
streamWriter.Write(streamReader.ReadToEnd( ));
}
}
}
ドキュメント パーツを別のドキュメント パーツに置換し、更新されたパーツにコンテンツを追加するには
最初に、ソース Word 2007 文書のパスと名前およびテーマ コンテンツを含むファイルの名前とパスを表すパラメータを渡します。
次に、文書を WordprocessingDocument オブジェクトとして開きます。
次に、パッケージから既存のテーマ パーツを削除し、空のテーマ パーツを追加します。
最後に、StreamReader オブジェクトと StreamWriter オブジェクトをそれぞれ使用して、元のテーマ ファイルのコンテンツを読み取り、それを新しいパーツに書き込みます。
注意
theme1.xml パーツ (またはそれ以外のほとんどのパーツ) を削除すると、theme1.xml.rels リレーションシップ パーツも削除されます。このファイルがなくなると、テーマ フォルダ内の .jpg イメージ ファイルなどのパーツがリレーションシップを失い、ドキュメント内で使用できなくなります。パーツを置換するときは、リレーションシップ パーツを追加して、新しいパーツを指すようにそれらのパーツを変更します。パーツを削除してから再作成するのではなく、コンテンツを置換する方法もあります。