【问题标题】:How to insert programmatically a new line in an Excel cell in C#?如何以编程方式在 C# 的 Excel 单元格中插入新行?
【发布时间】:2009-07-24 09:13:06
【问题描述】:

我正在使用 Aspose 库来创建 Excel 文档。在某个单元格的某处,我需要在文本的两个部分之间插入一个新行。

我试过 "\r\n" 但它不起作用,只是在单元格中显示两个方形符号。但是,我可以按 Alt+Enter 在同一个单元格中创建一个新行。

如何以编程方式插入新行?

【问题讨论】:

  • 您使用的编码是否正确? .net 字符串是 UTF16 ...
  • 我真的不知道。我只是在修改别人的代码。有什么方法可以对一段字符串进行不同的编码?

标签: c# .net excel aspose


【解决方案1】:

来自 Aspose Cells 论坛:How to use new line char with in a cell?

提供文本后,应将单元格的 IsTextWrapped 样式设置为 true

worksheet.Cells[0, 0].Style.WrapText = true;

【讨论】:

  • 收到此异常:“System.__ComObject”不包含“IsTextWrapped”的定义
  • 尝试使用“worksheet.Cells[0, 0].Style.WrapText = true;”而是。
【解决方案2】:
cell.Text = "your firstline<br style=\"mso-data-placement:same-cell;\">your secondline";

如果您从 DB 获取文本,则:

cell.Text = textfromDB.Replace("\n", "<br style=\"mso-data-placement:same-cell;\">");

【讨论】:

    【解决方案3】:

    您需要插入 Excel 使用的字符代码,IIRC 为 10(十)。


    编辑:好的,这里有一些代码。请注意,我可以通过创建一个包含以下内容的单元格来确认使用的字符代码确实是 10:

    一个

    B

    ...然后选择它并在 VBA 即时窗口中执行:

    ?Asc(Mid(Activecell.Value,2,1))
    

    因此,您需要将该值插入 VBA 中的另一个单元格的代码是:

    ActiveCell.Value = "A" & vbLf & "B"
    

    (因为 vbLf 是字符代码 10)。

    我知道您使用的是 C#,但我发现如果您首先在 VBA 中进行操作,则要容易得多,因为您可以“交互地”尝试它而无需编译任何事物。无论您在 C# 中做什么,都只是复制您在 VBA 中所做的,因此几乎没有任何区别。 (请记住,C# 互操作只是使用与 VBA 相同的底层 COM 库)。

    无论如何,C# 将是:

    oCell.Value = "A\nB";
    

    找出不同之处:-)


    编辑 2:啊啊啊!我刚刚重新阅读了这篇文章,发现您正在使用 Aspose 库。抱歉,在那种情况下我不知道。

    【讨论】:

    • 嗯,U+000A 是\n。但我认为如果这有效,那么插入 \r\n 也会有效,但会在第一个单元格上留下一个正方形。
    • 我从来没有接触过也没有见过VBA,所以无论如何我都做不到。无论如何,谢谢你的时间。
    • 最后我选择了分号,因为换行不是必需的选项。因此,该问题已关闭。
    【解决方案4】:

    在内部 Excel 使用 U+000D U+000A (CR+LF, \r\n) 作为换行符,至少在其 XML 表示中是这样。我也无法直接在单元格中找到该值。它已迁移到另一个包含共享字符串的 XML 文件。可能包含换行符的单元格被文件格式以不同方式处理,而您的库不知道这一点。

    【讨论】:

    • 在 Excel 2010 中似乎 CRLF 工作正常,但导致在早期版本中显示不可打印的字符框。为了与旧版本的 Excel 兼容,似乎只需要使用 "\n" (LF)。
    【解决方案5】:

    如果有人对 Infragistics 解决方案感兴趣,就在这里。

    1. 使用

      Environment.NewLine

    2. 确保您的单元格已包裹

      dataSheet.Rows[i].Cells[j].CellFormat.WrapText = ExcelDefaultableBoolean.True;

    【讨论】:

    • ExcelDefaultableBoolean.True 没有这样的东西。
    • @hakan :我在查找和使用 ExcelDefaultableBoolean.True 时没有问题,也许这是 Infragistics 的版本问题?这不是他们第一次做出改变。
    【解决方案6】:

    SpreadsheetGear for .NET 这样做:

            IWorkbook workbook = Factory.GetWorkbook();
            IRange a1 = workbook.Worksheets[0].Cells["A1"];
            a1.Value = "Hello\r\nWorld!";
            a1.WrapText = true;
            workbook.SaveAs(@"c:\HelloWorld.xlsx", FileFormat.OpenXMLWorkbook);
    

    注意“WrapText = true”——没有这个,Excel 将不会换行文本。我会假设 Aspose 有类似的 API。

    免责声明:我拥有 SpreadsheetGear LLC

    【讨论】:

      【解决方案7】:

      "\n" 工作正常。如果输入来自多行文本框,则新行字符将为“\r\n”,如果将其替换为“\n”,它将起作用。

      【讨论】:

        【解决方案8】:

        使用 PEAR 'Spreadsheet_Excel_Writer' 和 'OLE':

        让“\n”工作的唯一方法是让单元格$format-&gt;setTextWrap();,然后使用“\n”工作。

        【讨论】:

          【解决方案9】:

          您可以使用 Chr(13)。然后将整个东西包裹在 Chr(34) 中。 Chr(34) 是双引号。

          • VB.Net 示例:
          • TheContactInfo = ""
          • TheContactInfo = Trim(TheEmail) & chr(13)
          • TheContactInfo = TheContactInfo & Trim(ThePhone) & chr(13)
          • TheContactInfo = Chr(34) & TheContactInfo & Chr(34)

          【讨论】:

            【解决方案10】:

            什么对我有用:

            worksheet.Cells[0, 0].Style.WrapText = true;
            worksheet.Cells[0, 0].Value = yourStringValue.Replace("\\r\\n", "\r\n");
            

            我的问题是 \r\n 逃脱了。

            【讨论】:

              【解决方案11】:
              E.Run runForBreak = new E.Run();
              
              E.Text textForBreak = new E.Text() { Space = SpaceProcessingModeValues.Preserve };
              textForBreak.Text = "\n";
              runForBreak.Append(textForBreak);
              sharedStringItem.Append(runForBreak);
              

              【讨论】:

              • 虽然提供纯代码答案是可以接受的,但如果您还可以提供代码解释并帮助人们理解它为什么解决了问题。这可以减少后续问题的数量,并帮助新开发人员理解底层概念。这在这里特别有用,因为已经有十二个其他答案;是什么让你的方法与他们不同?我可以要求您更新您的问题并提供更多详细信息吗?
              【解决方案12】:

              其实很简单。

              您可以编辑 xml 版本的 excel。编辑单元格以在文本之间添加新行,然后保存。稍后您可以在编辑器中打开文件,然后您会看到一个新行表示为 &amp;#10;

              试一试……

              【讨论】:

                【解决方案13】:

                你有没有试过“\n”我猜,它应该可以工作。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-04-09
                  • 2014-03-19
                  • 1970-01-01
                  • 2011-11-22
                  • 2018-05-15
                  • 2012-08-05
                  • 1970-01-01
                  相关资源
                  最近更新 更多