Share via


[方法] 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( ));
         }
   }
}

ドキュメント パーツを別のドキュメント パーツに置換し、更新されたパーツにコンテンツを追加するには

  1. 最初に、ソース Word 2007 文書のパスと名前およびテーマ コンテンツを含むファイルの名前とパスを表すパラメータを渡します。

  2. 次に、文書を WordprocessingDocument オブジェクトとして開きます。

  3. 次に、パッケージから既存のテーマ パーツを削除し、空のテーマ パーツを追加します。

  4. 最後に、StreamReader オブジェクトと StreamWriter オブジェクトをそれぞれ使用して、元のテーマ ファイルのコンテンツを読み取り、それを新しいパーツに書き込みます。

    注意

    theme1.xml パーツ (またはそれ以外のほとんどのパーツ) を削除すると、theme1.xml.rels リレーションシップ パーツも削除されます。このファイルがなくなると、テーマ フォルダ内の .jpg イメージ ファイルなどのパーツがリレーションシップを失い、ドキュメント内で使用できなくなります。パーツを置換するときは、リレーションシップ パーツを追加して、新しいパーツを指すようにそれらのパーツを変更します。パーツを削除してから再作成するのではなく、コンテンツを置換する方法もあります。