ひっそりと生きるプログラマのブログ

日頃気になった事なりを書き留めるブログです。関心ごとは多くもう少し更新頻度を上げたいところです。

DocX を使ってみる - 5

DocX を使ってみる - 4 - ひっそりと生きるプログラマのブログ

前回に引き続き、今回は表形式(Table)の出力についてです。
説明するより実装を確認した方が分かり易いので、以下の通りです。

一部の変数には適切なパスを設定して下さい。

結構、簡単に Table を作れるのでなかなか面白いですね。

static void Main(string[] args)
{
    using (var document = DocX.Create(filePath))
    {
        DataTableSample(document);
    }
}

private static void DataTableSample(DocX document)
{
    var dataTable = CreateDataTable();
    CreateTable(document, dataTable);
}


private static DataTable CreateDataTable()
{
    var result = new DataTable("Sample Table Name");
    result.Columns.Add("No");
    result.Columns.Add("Name");
    result.Columns.Add("Summary");
    for (int index = 1; index <= 10; index++)
    {
        var name = "name" + index;
        var summary = "summary" + index;
        result.Rows.Add(index, name, summary);
    }
    return result;
}

private static void CreateTable(DocX document, DataTable dataTable)
{
    // ヘッダー行も含めて出力するので、
    // 行数 + 1 で table を作成する。
    var table = document.AddTable(
        dataTable.Rows.Count + 1,
        dataTable.Columns.Count);

    document.InsertParagraph(dataTable.TableName);
    // ヘッダーの出力
    {
        var currentRow = table.Rows[0];
        for (int index = 0; index < dataTable.Columns.Count; index++)
        {
            var paragraph = currentRow.Cells[index].Paragraphs.First();
            paragraph.Append(Convert.ToString(dataTable.Columns[index].ColumnName));
        }
    }

    // データの出力
    {
        for (int x = 0; x < dataTable.Rows.Count; x++)
        {
            var currentRow = table.Rows[x + 1];
            for (int y = 0; y < dataTable.Columns.Count; y++)
            {
                var paragraph = currentRow.Cells[y].Paragraphs.First();
                paragraph.Append(Convert.ToString(dataTable.Rows[x][y]));
            }
        }
    }
    document.InsertTable(table);
}