5

输出到word文档(docx)。

我想使用 C# 4.0 string.Format 制作这样的输出:

string1: stringValue1,  string2:stringValue2
string4: stringValue4,  string5:stringValue5
string6: stringValue6,  string7:stringValue7
string8: stringValue8,  string9:stringValue9

我正在使用string.Format("{0,-10} {1,-10}",string1,string2),但它什么也没做。有没有办法使用 string.Format() 对齐字符串?我看到了 '\t' 解决方案,但如何将它添加到 string.Format() 中?

这是我的代码和输出:

string titel = HttpUtility.HtmlEncode(docItem.Title);
                    string href = docItem.FullURL;
                    string title = string.Format("{0}", titel);
                    string author = docItem.Author;
                    string date = docItem.ChangedDate.Date.ToShortDateString();
                    CreateTextBoxConentParagraph(doc, string.Format("Title: <a href='{0}'>{1}</a> Author: {2} Geändert an: {3}",href,title.PadRight(20),author.PadRight(20), date),string.Format("chunkId_{0}", i++));

输出:标题:作者:aaa Geändert an:19.04.2013

标题:第二作者:aaa Geändert an:18.04.2013

标题:slika 作者:aaa Geändert an:18.04.2013

标题:dm 作者:aaa Geändert an:18.04.2013

标题:Mathias 作者:aaa Geändert an:19.04.2013

标题:QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ作者:aaa Geändert an:19.04.2013

4

5 回答 5

8

尝试使用PadLeftPadRight方法。例如:

string.Format("{0} {1}",string1.PadRight(25),string2.PadRight(25)) 

您也可以使用字符来填充空格。来自MSDN

string str = "forty-two";
char pad = '.';
Console.WriteLine(str.PadRight(15, pad));    // Displays "forty-two......".
Console.WriteLine(str.PadRight(2,  pad));    // Displays "forty-two".
于 2013-04-19T12:17:20.197 回答
4

像这样格式化值可以正常工作,但是您需要指定一个比字符串值更长的长度,否则它不会添加任何空格。

但是,如果您想在值后面加逗号并在其后添加填充,则需要将逗号放在值中,然后对其进行格式化。

例子:

string string1 = "asdf";
string string2 = "ffs";
string string3 = "What about me?";
string string4 = "gahah";
string string5 = "kjshdfkjh";
string string6 = "fg";
string string7 = "kkkdd";
string string8 = "asdasdf";
string string9 = "jjfjj";

Console.WriteLine(String.Format("string1: {0,-10} string2: {1,-10}", string1 + ",", string2));
Console.WriteLine(String.Format("string4: {0,-10} string5: {1,-10}", string4 + ",", string5));
Console.WriteLine(String.Format("string6: {0,-10} string7: {1,-10}", string6 + ",", string7));
Console.WriteLine(String.Format("string8: {0,-10} string9: {1,-10}", string8 + ",", string9));

输出:

string1: asdf,      string2: ffs
string4: gahah,     string5: kjshdfkjh
string6: fg,        string7: kkkdd
string8: asdasdf,   string9: jjfjj
于 2013-04-19T12:29:29.027 回答
2

以下示例的导入部分是

String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n",
                                      "City", "Year", "Population", "Change (%)")

请看下面的 MSDN 示例

public static void Main()
    {
        // Create array of 5-tuples with population data for three U.S. cities, 1940-1950.
        Tuple<string, DateTime, int, DateTime, int>[] cities = 
      { Tuple.Create("Los Angeles", new DateTime(1940, 1, 1), 1504277, 
                     new DateTime(1950, 1, 1), 1970358),
        Tuple.Create("New York", new DateTime(1940, 1, 1), 7454995, 
                     new DateTime(1950, 1, 1), 7891957),  
        Tuple.Create("Chicago", new DateTime(1940, 1, 1), 3396808, 
                     new DateTime(1950, 1, 1), 3620962),  
        Tuple.Create("Detroit", new DateTime(1940, 1, 1), 1623452, 
                     new DateTime(1950, 1, 1), 1849568) };

        // Display header 
        string header = String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n",
                                      "City", "Year", "Population", "Change (%)");
        Console.WriteLine(header);
        string output;
        foreach (var city in cities)
        {
            output = String.Format("{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}",
                                   city.Item1, city.Item2, city.Item3, city.Item4, city.Item5,
                                   (city.Item5 - city.Item3) / (double)city.Item3);
            Console.WriteLine(output);
        }
    }
于 2013-04-19T12:19:15.143 回答
1

如果您正在写入 DOCX 格式,则应该使用Office Open XML 格式。(有关更多详细信息,请参见此处。)

然后要以表格格式对齐数据,您应该在文档中插入一个表格,并用您想要的数据填充表格。

下面是一些示例代码,演示了如何以编程方式将表插入 DOCX 文件。

您应该能够隐藏表格的边框,以便您只剩下表格单元格中的文本可见。

于 2013-04-19T13:34:45.190 回答
0

您可以看到第二个代码示例http://msdn.microsoft.com/en-us/library/system.string.format.aspx

我也曾经使用 padLeft 和 padRight 方法

于 2013-04-19T12:18:20.153 回答