C# Excel互操作,在Excel单元格文本中插入换行符

11

我正在使用interop编写Excel表格。在表格中,我需要将一组句子放入一个单元格中,并且这些文本需要按照换行的方式呈现。我该如何实现这个目标?

提前感谢您的帮助。


1
你不能给单元格分配一个宽度,然后将nowrap设置为false吗?或者你需要在特定位置换行吗? - KMC
嗨,我需要将多行数据放入一个单元格中。而且这些行应该是分行的,也就是说每一行必须以新行开始。 - Thanushka
每一行都必须以新行开始?这里的“行”是指单元格行/范围,还是同一单元格内的换行符? - KMC
抱歉,每行应该在同一个单元格内以新行开始。 - Thanushka
1
你有一个接受别人答案并接受自己答案的记录。这可能会破坏声誉的目的。 - KMC
7个回答

15

这可以通过输入 "\r\n" 或者 Environment.NewLine 来完成。同时,还要记得将 WrapText 属性设置为 true,以便使换行符可见。


很有趣,正确的答案被踩了。我会给这个+1。 - Rudy
1
当它创建一个新行时,它会在每行末尾放置一个小象限框,有没有办法去掉它? - user1514042
抱歉,我没有听懂。 - Thanushka
7
@Rudy 这个答案不正确。 Excel 只会使用 \n 作为换行符,\r 将保留为可见字符。在早期版本的 Excel 中,\r 将像 user1514042 所提到的那样被绘制成矩形,在较新版本中它将是不可见的,但仍然存在于单元格中(你可以移动文本光标超出可见行的末端,因为还有其他内容)。 - GSerg

7
您可以按如下方式在程序中为单元格添加样式:
worksheet.Cells.Style.WrapText = true;

5

在Excel单元格内的换行符是LF字符,在C#中是“\n”。不要忘记将单元格的WrapText属性设置为TRUE。


3

在Excel单元格内换行是LF字符,C#中表示为"\n"


2
在VB或VBA中,我曾经使用vbCrLf(区分大小写)来将句子分隔成行,以便在Excel单元格中像下面这样分隔行:
Dim myString As String
myString = "First sentence" & vbCrLf & "Second sentence"
ActiveCell.ForumulaR1C1 = myString

在C#中,我非常确信C#等同于VB的vbCrLf"\r\n",因此:
myString = "First sentence\r\n" + "Second sentence"

vbCrLf 在 VB.NET 中运行得非常完美。我尝试在 VB.NET 中使用 \r\n,但它没有起作用。非常感谢您的出色回答。 - R.S.K

0

我遇到了这个问题,但不同的是我在代码中没有访问工作表的权限,因为我只是将它传递给内存流,然后创建文件作为 .csv 类型。

foreach (var s in propertyValues)
                streamWriter.WriteLine(s);

            streamWriter.Flush();
            memoryStream.Seek(0, SeekOrigin.Begin);

我从这里开始使用它。

 subjExportData.FileStream = stream;
            subjExportData.FileName = string.Format("SubjectExport_{0}.csv", DateTime.Now.ToString("ddMMyyyy_HHmm"));

因此,在此建议中,设置文本或单元格换行不是一个选项。使用上面的答案并在文本/字符串之前和之后放置双引号使其工作。替换是为了处理句子中也有双引号的情况。因此,此解决方案处理句子或段落中的换行符、逗号和双引号。

if (value.ToString().Contains("\n"))
                                {
                                    value = value.ToString().Replace("\n", "\r\n");
                                    sb.Append('"'+ value.ToString().Replace(@"""", @"""""") + '"'+ ",");
                                }

-2

这个问题的答案是在你想要在Excel单元格中显示的字符串前面和后面添加一个“引号”。在C#中,它可能是这样的(Convert.ToChar(34) + stringToExport + Convert.ToChar(34))。


从一个非常快速的测试中,插入一个带引号的多行字符串(其中换行符不是\r\n)到Excel中,这种方法不起作用。同时该问题已经有了一个被接受的答案已经存在2年之久。 - OGHaza
这对我很有效。我没有直接在Excel中进行测试。我正在我的应用程序中处理一个包含\r\n的文本的副本事件,我想将其粘贴到Excel唯一单元格中。上面的代码使其正常工作。 - Franck Ngako
从阅读 OP 自己的答案中,您可以看到他的问题是数据中没有包含 \r\n - OGHaza
它在Excel中直接运行不起来是正常的。在Excel中,你只需要按Alt+Enter :) - Franck Ngako
好吧,我的错...我以为他想在将数据粘贴到Excel时去掉"\r\n"。糟糕!!希望这篇反馈能帮助未来的某个人。 - Franck Ngako

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接