1

我想动态构建表(未知的编译时表数、行数、合并单元格等)

除了按照 rtf 格式编写低级标签之外,还有什么好的方法(可能是一些不错的 dll?)来使用 rtf?

4

1 回答 1

2

使用 RTF 创建表格并不难,知道控制字是最困难的部分。我在 C# WPF 中与他们合作过。RTF 表的诀窍是每一行都独立于表的其余部分。因此,第 1 行不知道第 2 行是同一张表的一部分,并且是 vis。

以下代码将为指定的行数/列数创建一个表。如果您想以编程方式合并单元格,则必须跟踪要合并的单元格,然后少运行一个 Row Cell 循环。

private String GetTableRTF(int numRows, int numColumns)
    {
        StringBuilder rtfTableString = new StringBuilder();

        // For each row, construct the rtf version of a row            
        for (int i = 0; i < numRows; i++)
        {
            // Start the row, autofits it to the page and gives it a black border by default
            rtfTableString.Append(@"{\trowd\trautofit1");
            rtfTableString.Append(@"\trbrdrt\brdrs\brdrw15\brdrcf11"); // Top border
            rtfTableString.Append(@"\trbrdrl\brdrs\brdrw15\brdrcf11"); // Left border
            rtfTableString.Append(@"\trbrdrb\brdrs\brdrw15\brdrcf11"); // Bottom border
            rtfTableString.Append(@"\trbrdrr\brdrs\brdrw15\brdrcf11"); // Right border
            rtfTableString.Append(@"\trbrdrh\brdrs\brdrw15\brdrcf11"); // Cell Horizontal border
            rtfTableString.Append(@"\trbrdrv\brdrs\brdrw15\brdrcf11"); // Cell Vertical border

            for (int z = 0; z < numColumns; z++)
            {
                // Create the cells for the table
                rtfTableString.Append(@"{\intbl \cell}");
            }
            //finish the row
            rtfTableString.Append(@"\row}");
        }

        return rtfTableString.ToString();
    }

这将为您提供一个基本表格,该表格将自动适应窗口并具有基本的黑色边框。任何进一步的设计调整都取决于您。

于 2013-07-08T13:50:43.437 回答