テキスト セクションにフォントを設定する
適用対象: Excel 2010 | Office 2010 | PowerPoint 2010 | Word 2010
この記事の内容
パッケージとドキュメント パーツ
WordprocessingDocument オブジェクトを作成する
セクションのフォント要素の構造
サンプル コードの動作のしくみ
サンプル コード
このトピックでは、Open XML SDK 2.0 for Microsoft Office のクラスを使用して、プログラムによってワープロ ドキュメント内のテキスト部分のフォントを設定する方法について説明します。
このトピックのコードをコンパイルするには、次のアセンブリ ディレクティブが必要です。
using System.Linq;
using DocumentFormat.OpenXml.Wordprocessing;
using DocumentFormat.OpenXml.Packaging;
Imports System.Linq
Imports DocumentFormat.OpenXml.Wordprocessing
Imports DocumentFormat.OpenXml.Packaging
パッケージとドキュメント パーツ
Open XML ドキュメントはパッケージとして保存されます。このパッケージの形式は、ISO/IEC 29500-2 (英語) に定義されています。パッケージの内部は、リレーションシップで結ばれた複数のパーツに分けることができます。パーツ間のリレーションシップによって、ドキュメントのカテゴリが決まります。パッケージのリレーションシップ アイテムにメイン ドキュメント パーツへのリレーションシップを含めると、そのドキュメントをワープロ ドキュメントとして定義できます。パッケージのリレーションシップ アイテムにプレゼンテーション パーツへのリレーションシップを含めると、そのドキュメントをプレゼンテーション ドキュメントとして定義できます。パッケージのリレーションシップ アイテムにブック パーツへのリレーションシップを含めると、そのドキュメントをスプレッドシート ドキュメントとして定義できます。このトピックでは、ワープロ ドキュメント パッケージを使用します。
WordprocessingDocument オブジェクトを作成する
ファイルを読み取り/書き込みモードで開くかどうかを指定する文字列およびブール値を取る WordprocessingDocument クラスの、オーバーロードされた Open() メソッドの 1 つにファイル名を引数として渡して、ワープロ ドキュメントのパッケージ ファイルを開きます。この場合、ブール値は true で、ファイルを読み取り/書き込みモードで開くことを指定しています。
// Open a Wordprocessing document for editing.
using (WordprocessingDocument package = WordprocessingDocument.Open(fileName, true))
{
// Insert other code here.
}
' Open a Wordprocessing document for editing.
Dim package As WordprocessingDocument = WordprocessingDocument.Open(fileName, True)
Using (package)
' Insert other code here.
End Using
using ステートメントを、通常の .Create, .Save, .Close シーケンスの代わりに使用することをお勧めします。このステートメントを使用すると、閉じかっこに達したときに Dispose メソッド (クリーンアップするために Open XML SDK で使用される内部メソッド) が自動的に呼び出されます。using ステートメントに続くブロックは、using ステートメントで作成または指定されたオブジェクト (この例では package) のスコープを設定します。Open XML SDK の WordprocessingDocument クラスは System.IDisposable 実装の一部として自動的にオブジェクトを保存して閉じるため、また、Dispose メソッドがブロックの終わりで自動的に呼び出されるため、using を使用する場合は、Save と Close を明示的に呼び出す必要はありません。
セクションのフォント要素の構造
rFonts 要素を操作する場合、ISO/IEC 29500 (英語) 仕様の次の文面が役立つことがあります。
この要素は、このセクションのテキスト コンテンツの表示に使用するフォントを指定します。単一セクション内では、それぞれに以下の固有のフォントを使用して、最大 4 種類のコンテンツを表示できます。
ASCII
High ANSI
コンプレックス スクリプト
日本語用
cs 要素の使用によって手動で上書きされない限り、これらの各フォントの使用は、セクション コンテンツの Unicode 文字の値によって決定されます。
この要素が存在しない場合、既定値はスタイル階層の前のレベルで適用された書式設定のままになります。この要素がスタイル階層に一度も適用されていない場合、テキストは各種類のコンテンツをサポートするいずれかの既定のフォントで表示されます。
次のように、アラビア語と英語のテキストがある単一テキスト セクションを考えてみましょう。
English العربية
このコンテンツは、単一の WordprocessingML セクションで表現できます。
<w:r>
<w:t>English العربية</w:t>
</w:r>
同じセクション内にあっても、セクション内の ASCII 文字と CS 文字に異なるフォントを指定することによって、コンテンツは異なるフォント フェイスで表示されます。
<w:r>
<w:rPr>
<w:rFonts w:ascii="Courier New" w:cs="Times New Roman" />
</w:rPr>
<w:t>English العربية</w:t>
</w:r>
そのため、このテキスト セクションでは、ASCII 範囲にあるすべての文字に Courier New フォントが使用され、コンプレックス スクリプト範囲にあるすべての文字に Times New Roman フォントが使用されます。
c ISO/IEC29500: 2008.
サンプル コードの動作のしくみ
読み取り/書き込み用にパッケージ ファイルを開いたら、Ascii プロパティが "Arial" に設定されている RunFonts オブジェクトを含む RunProperties オブジェクトを作成します。RunProperties オブジェクトおよび RunFonts オブジェクトは、それぞれ、Open XML ワープロ ドキュメント スキーマでのセクションのプロパティ (<rPr>) 要素およびセクションのフォント要素 (<rFont>) を表します。RunProperties オブジェクトを使用して、特定のテキスト セクションのプロパティを指定します。この場合、セクションのフォントを Arial に設定するために、RunFonts オブジェクトを作成し、Ascii の値を "Arial" に設定します。
// Use an object initializer for RunProperties and rPr.
RunProperties rPr = new RunProperties(
new RunFonts()
{
Ascii = "Arial"
});
' Use an object initializer for RunProperties and rPr.
Dim rPr As New RunProperties(New RunFonts() With {.Ascii = "Arial"})
次に、ドキュメントの最初のテキスト セクションを表す Run オブジェクトを作成します。Run をインスタンス化し、ドキュメントの最初のテキスト セクションに設定します。その後、PrependChild<T>(T) メソッドを使用して、RunProperties オブジェクトを Run オブジェクトに追加します。PrependChild メソッドによって、メモリ内の XML 構造の指定された要素に最初の子要素として要素を追加します。この場合、コード サンプルを実行すると、メモリ内の XML 構造は、RunProperties 要素が Run 要素の最初の子要素として追加された状態になります。次に、変更を Save(MainDocumentPart) オブジェクトに保存します。WordprocessingDocument オブジェクトの Save メソッドの呼び出しによって、MainDocumentPart パーツのメモリ内の表現に対して行われた変更が MainDocumentPart 用の XML ファイル (ワープロドキュメント パッケージ内の document.xml ファイル) にコミットされます。
Run r = package.MainDocumentPart.Document.Descendants<Run>().First();
r.PrependChild<RunProperties>(rPr);
// Save changes to the MainDocumentPart part.
package.MainDocumentPart.Document.Save();
Dim r As Run = package.MainDocumentPart.Document.Descendants(Of Run)().First()
r.PrependChild(Of RunProperties)(rPr)
' Save changes to the MainDocumentPart part.
package.MainDocumentPart.Document.Save()
サンプル コード
以下に、ワープロ ドキュメントの最初の段落のフォントを変更するために使用できるコードを示します。たとえば、以下の呼び出しを使用することにより、プログラム内で SetRunFont メソッドを呼び出して、ファイル "MyPkg9.docx" 内のフォントを変更できます。
string fileName = @"C:\Users\Public\Documents\MyPkg9.docx";
SetRunFont(fileName);
Dim fileName As String = "C:\Users\Public\Documents\MyPkg9.docx"
SetRunFont(fileName)
プログラムを実行したら、ファイル "MyPkg9.docx" を調べて、フォントが変更されていることを確認します。
注意
このコード例では、テスト用のワープロ ドキュメント (MyPakg9.docx) に、少なくとも 1 つのテキスト セクションが含まれていることを前提としています。
以下に、C# と Visual Basic による完全なサンプル コードを示します。
// Set the font for a text run.
public static void SetRunFont(string fileName)
{
// Open a Wordprocessing document for editing.
using (WordprocessingDocument package = WordprocessingDocument.Open(fileName, true))
{
// Set the font to Arial to the first Run.
// Use an object initializer for RunProperties and rPr.
RunProperties rPr = new RunProperties(
new RunFonts()
{
Ascii = "Arial"
});
Run r = package.MainDocumentPart.Document.Descendants<Run>().First();
r.PrependChild<RunProperties>(rPr);
// Save changes to the MainDocumentPart part.
package.MainDocumentPart.Document.Save();
}
}
' Set the font for a text run.
Public Sub SetRunFont(ByVal fileName As String)
' Open a Wordprocessing document for editing.
Dim package As WordprocessingDocument = WordprocessingDocument.Open(fileName, True)
Using (package)
' Set the font to Arial to the first Run.
Dim rPr As RunProperties = New RunProperties(New RunFonts With {.Ascii = "Arial"})
Dim r As Run = package.MainDocumentPart.Document.Descendants(Of Run).First
r.PrependChild(Of RunProperties)(rPr)
' Save changes to the main document part.
package.MainDocumentPart.Document.Save()
End Using
End Sub