[方法] ワープロ ドキュメントの表内のテキストを変更する (Open XML SDK)How to: Change text in a table in a word processing document (Open XML SDK)

このトピックでは、Open XML SDK 2.5 for Office を使用して、既存のワープロ ドキュメントの表内のテキストをプログラムによって変更する方法について説明します。This topic shows how to use the Open XML SDK 2.5 for Office to programmatically change text in a table in an existing word processing document.

このトピックのコードをコンパイルするには、次のアセンブリ ディレクティブが必要です。The following assembly directives are required to compile the code in this topic.

    using System.Linq;
    using DocumentFormat.OpenXml.Packaging;
    using DocumentFormat.OpenXml.Wordprocessing;
    Imports System.Linq
    Imports DocumentFormat.OpenXml.Packaging
    Imports DocumentFormat.OpenXml.Wordprocessing

既存のドキュメントを開くOpen the Existing Document

既存のドキュメントを開くには、次の using ステートメントに示すように、WordprocessingDocument** クラスをインスタンス化します。同じステートメントで、指定のファイルパスにあるワープロ ファイルを ** Open**** メソッドによって開きます。ドキュメントの編集を有効にするには、ブール値のパラメーターを true に設定します。To open an existing document, instantiate the WordprocessingDocument class as shown in the following using statement. In the same statement, open the word processing file at the specified filepath by using the Open method, with the Boolean parameter set to true in order to enable editing the document.

    using (WordprocessingDocument doc =
           WordprocessingDocument.Open(filepath, true)) 
    { 
       // Insert other code here. 
    }
    Using doc As WordprocessingDocument = WordprocessingDocument.Open(filepath, True)
       ' Insert other code here. 
    End Using

通常の .Open、.Save、.Close シーケンスの代わりに using ステートメントを使用することをお勧めします。The using statement provides a recommended alternative to the typical .Open, .Save, .Close sequence. このステートメントを使用すると、閉じかっこに達したときに Dispose メソッド (リソースをクリーンアップするために Open XML SDK で使用される内部メソッド) が自動的に呼び出されます。It ensures that the Dispose method (internal method used by the Open XML SDK to clean up resources) is automatically called when the closing brace is reached. using ステートメントに続くブロックは、using ステートメントで作成または指定されたオブジェクトのスコープを設定します。この例では doc のスコープを設定します。Open XML SDK の WordprocessingDocument クラスはオブジェクトをその System.IDisposable 実装の一部として自動的に保存し、終了し、ブロックを終了するときに Dispose が自動的に呼び出されるため、using を使用する場合は、明示的に Save および Close を呼び出す必要はありません。The using statement provides a recommended alternative to the typical .Create, .Save, .Close sequence. It ensures that the Dispose () method (internal method used by the Open XML SDK to clean up resources) is automatically called when the closing bracket is reached. The block that follows the using statement establishes a scope for the object that is created or named in the using statement, in this case wordDocument. Because the WordprocessingDocument class in the Open XML SDK automatically saves and closes the object as part of its System.IDisposable implementation, and because Dispose is automatically called when you exit the bracketed block, you do not have to explicitly call Save and Close─as long as you use using.

表の構造The Structure of a Table

WordProcessingML ドキュメントの基本ドキュメント構造は、 document 要素と body 要素で構成されます。これらの要素の後には、 p (段落を表す) などのブロック レベル要素が 1 つ以上続きます。段落には 1 つ以上の r 要素が含まれます。 r は、セクション (書式設定などの一般的なプロパティを含むテキスト領域) を表します。セクションには、1 つ以上の t 要素が含まれ、 t 要素には、一連のテキストが含まれます。The basic document structure of a WordProcessingML document consists of the document and body elements, followed by one or more block level elements such as p, which represents a paragraph. A paragraph contains one or more r elements. The r stands for run, which is a region of text with a common set of properties, such as formatting. A run contains one or more t elements. The t element contains a range of text.

この例のように、ドキュメントには表が含まれている場合があります。The document might contain a table as in this example. は、に配置された一連の段落 (および他のブロック レベル コンテンツ) です。Another type of block-level content in WordprocessingML, A table is a set of paragraphs (and other block-level content) arranged in rows and columns. WordprocessingML の表は tbl 要素によって定義されます。これは HTML の table タグと類似しています。Tables in WordprocessingML are defined via the tbl element, which is analogous to the HTML たとえば、セルを 1 つだけ含む空白の表 (つまり 1 行 1 列の表) があり、その罫線が 1 ポイントに指定されているとします。Consider an empty one-cell table (that is, a table with one row and one column) and 1 point borders on all sides. それを WordprocessingML コードで表すと、次のようになります。The comment is represented by the following WordprocessingML code example. .

    <w:tbl>
      <w:tblPr>
        <w:tblW w:w="5000" w:type="pct"/>
        <w:tblBorders>
          <w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/>
          <w:left w:val="single" w:sz="4 w:space="0" w:color="auto"/>
          <w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/>
          <w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/>
        </w:tblBorders>
      </w:tblPr>
      <w:tblGrid>
        <w:gridCol w:w="10296"/>
      </w:tblGrid>
      <w:tr>
        <w:tc>
          <w:tcPr>
            <w:tcW w:w="0" w:type="auto"/>
          </w:tcPr>
          <w:p/>
        </w:tc>
      </w:tr>
    </w:tbl>

この表では、表全体に適用されるプロパティを使用して、対ページ比 100 % の表幅を tblW 要素に指定し、表の一連の罫線を tblBorders 要素に指定します。さらに、表のグリッド (表内で共有される一連の垂直方向の枠線) を tblGrid 要素に指定し、表内の 1 つの行を tr 要素に指定します。This table specifies table-wide properties of 100% of page width using the tblW element, a set of table borders using the tblBorders element, the table grid, which defines a set of shared vertical edges within the table using the tblGrid element, and a single table row using the tr element.

サンプル コードの動作のしくみHow the Sample Code Works

このサンプル コードでは、 using ステートメントでドキュメントを開いた後、そのドキュメントから 1 番目の表を見つけます。次に、その 1 番目の表からインデックスが 1 の行を検索して 2 番目の行を見つけます。さらに、その 2 番目の行からインデックスが 2 の 3 番目のセルを見つけます。次のコード例を参照してください。In the sample code, after you open the document in the using statement, you locate the first table in the document. Then you locate the second row in the table by finding the row whose index is 1. Next, you locate the third cell in that row whose index is 2, as shown in the following code example.

    // Find the first table in the document.
    Table table =
        doc.MainDocumentPart.Document.Body.Elements<Table>().First();

    // Find the second row in the table.
    TableRow row = table.Elements<TableRow>().ElementAt(1);

    // Find the third cell in the row.
    TableCell cell = row.Elements<TableCell>().ElementAt(2);
    ' Find the first table in the document.
    Dim table As Table = doc.MainDocumentPart.Document.Body.Elements(Of Table)().First()

    ' Find the second row in the table.
    Dim row As TableRow = table.Elements(Of TableRow)().ElementAt(1)

    ' Find the third cell in the row.
    Dim cell As TableCell = row.Elements(Of TableCell)().ElementAt(2)

目的のセルを見つけたら、そのセルの最初の段落から 1 番目のセクションを探して、テキストを別のテキストに置き換えます。これらの操作をコードで表すと、次のようになります。After you have located the target cell, you locate the first run in the first paragraph of the cell and replace the text with the passed in text. The following code example shows these actions.

    Paragraph p = cell.Elements<Paragraph>().First();
    Run r = p.Elements<Run>().First();
    Text t = r.Elements<Text>().First();
    t.Text = txt;
    Dim p As Paragraph = cell.Elements(Of Paragraph)().First()
    Dim r As Run = p.Elements(Of Run)().First()
    Dim t As Text = r.Elements(Of Text)().First()
    t.Text = txt

表内のセルのテキストを変更するChange Text in a Cell in a Table

次のコード例は、ワープロ ドキュメント内の表の指定されたセルのテキストを変更する方法を示します。このコード例では、ドキュメントのファイル名とパスは ChangeTextInCell メソッドへの引数として渡され、ドキュメントに 1 つの表が含まれていることを想定しています。また、表に少なくとも 2 つの行と 3 つの列があり、2 行 3 列目のセルにテキストが含まれていることも想定しています。 ChangeTextInCell メソッドをプログラム内で呼び出すと、指定された位置にあるセルのテキストが、 ChangeTextInCell メソッドの 2 番目の引数として渡されるテキストに置き換えられます。次の表では、"The text from the API example" というテキストを使用しています。The following code example shows how to change the text in the specified table cell in a word processing document. The code example expects that the document, whose file name and path are passed as an argument to the ChangeTextInCell method, contains a table. The code example also expects that the table has at least two rows and three columns, and that the table contains text in the cell that is located at the second row and the third column position. When you call the ChangeTextInCell method in your program, the text in the cell at the specified location will be replaced by the text that you pass in as the second argument to the ChangeTextInCell method. In the following table the text "The text from the API example" was used.

Some textSome textSome textSome textSome textSome text
Some textSome textSome textSome textThe text from the API exampleThe text from the API example

サンプル コードSample Code

ChangeTextinCell メソッドは、ファイル内の最初の表の 2 行 3 列目にあるテキストを変更します。このメソッドを呼び出すときは、ファイルの完全パスを 1 番目のパラメーター、使用するテキストを 2 番目のパラメーターとして渡します。たとえば、 ChangeTextInCell メソッドを次のように呼び出すと、指定したセルのテキストを "The text from the API example" に変更できます。The ChangeTextinCell method changes the text in the second row and the third column of the first table found in the file. You call it by passing a full path to the file as the first parameter, and the text to use as the second parameter. For example, the following call to the ChangeTextInCell method changes the text in the specified cell to "The text from the API example."

    ChangeTextInCell(@"c:\Users\Public\Documents\word4.docx",
    "The text from the API example");
    ChangeTextInCell("C:\Users\Public\Documents\word4.docx", _
    "The text from the API example")

次に、完全なコード例を示します。Following is the complete code example.

    // Change the text in a table in a word processing document.
    public static void ChangeTextInCell(string filepath, string txt)
    {
        // Use the file name and path passed in as an argument to 
        // open an existing document.            
        using (WordprocessingDocument doc =
            WordprocessingDocument.Open(filepath, true))
        {
            // Find the first table in the document.
            Table table =
                doc.MainDocumentPart.Document.Body.Elements<Table>().First();

            // Find the second row in the table.
            TableRow row = table.Elements<TableRow>().ElementAt(1);

            // Find the third cell in the row.
            TableCell cell = row.Elements<TableCell>().ElementAt(2);

            // Find the first paragraph in the table cell.
            Paragraph p = cell.Elements<Paragraph>().First();

            // Find the first run in the paragraph.
            Run r = p.Elements<Run>().First();

            // Set the text for the run.
            Text t = r.Elements<Text>().First();
            t.Text = txt;
        }
    }
    ' Change the text in a table in a word processing document.
    Public Sub ChangeTextInCell(ByVal filepath As String, ByVal txt As String)
        ' Use the file name and path passed in as an argument to 
        ' Open an existing document. 
        Using doc As WordprocessingDocument = WordprocessingDocument.Open(filepath, True)
            ' Find the first table in the document.
            Dim table As Table = doc.MainDocumentPart.Document.Body.Elements(Of Table)().First()

            ' Find the second row in the table.
            Dim row As TableRow = table.Elements(Of TableRow)().ElementAt(1)

            ' Find the third cell in the row.
            Dim cell As TableCell = row.Elements(Of TableCell)().ElementAt(2)

            ' Find the first paragraph in the table cell.
            Dim p As Paragraph = cell.Elements(Of Paragraph)().First()

            ' Find the first run in the paragraph.
            Dim r As Run = p.Elements(Of Run)().First()

            ' Set the text for the run.
            Dim t As Text = r.Elements(Of Text)().First()
            t.Text = txt
        End Using
    End Sub

関連項目See also

その他のリソースOther resources

Open XML SDK 2.5 クラス ライブラリ リファレンスOpen XML SDK 2.5 class library reference

[方法] ワープロ ドキュメントの表内のテキストを変更するHow to: Change Text in a Table in a Word Processing Document

統合言語クエリ (LINQ)Language-Integrated Query (LINQ)

拡張メソッド (C# プログラミング ガイド)Extension Methods (C# Programming Guide)

拡張メソッド (Visual Basic)Extension Methods (Visual Basic)