应使用Chr(10)换行符并启用自动换行,或通过API设置WrapText属性;禁用vbCr、vbCrLf及“\n”,确保列宽足够且公式中用CHAR(10)。

如果您在 LibreOffice Calc 中运行宏,发现单元格内显示的文本没有按预期换行,则可能是由于字符串中缺少正确的换行符或单元格格式未启用自动换行。以下是实现宏输出结果正确换行的具体方法:
一、使用正确的换行符 Chr(10) 并启用单元格自动换行
LibreOffice Calc 的单元格内换行依赖于 ASCII 换行符 Chr(10)(即换行符 LF),而非 Windows 常用的 Chr(13) & Chr(10)。同时,目标单元格必须开启“自动换行”格式,否则换行符将被忽略。
1、在宏代码中,用 & 连接多段文本,并插入 Chr(10) 作为分隔符,例如:"第一行" & Chr(10) & "第二行"。
2、选中目标单元格,在菜单栏选择【格式】→【单元格】→【对齐】选项卡,勾选“自动换行”。
3、确保列宽足够容纳最长行内容,否则换行可能不生效。
二、通过 API 设置单元格属性强制启用换行
仅靠手动设置格式不可靠,尤其在批量写入时。可通过 UNO API 在宏中直接设置单元格的 WrapText 属性,确保格式同步应用。
1、获取目标单元格对象,例如:oCell = oSheet.getCellByPosition(0, 0)。
2、设置换行属性:oCell.setPropertyValue("WrapText", True)。
3、向该单元格写入含 Chr(10) 的字符串,如:oCell.setValue("A" & Chr(10) & "B")。
三、使用 Formula 属性配合 CHAR(10) 实现动态换行
若需在公式上下文中嵌入换行(如 CONCATENATE 或字符串拼接结果),可在宏中向单元格写入公式而非纯值,并确保公式返回含 CHAR(10) 的文本,同时启用自动换行。
1、构造公式字符串,例如:="第一行" & CHAR(10) & "第二行"。
2、将该字符串赋给单元格的 Formula 属性:oCell.setFormula(formulaStr)。
3、调用 oCell.setPropertyValue("WrapText", True) 确保显示换行。
四、避免常见错误:禁止使用 vbCr、vbCrLf 或 "\n"
LibreOffice Basic 不识别 VB 风格的 vbCr 或 vbCrLf 常量;反斜杠转义序列如 "\n" 也不会被解析为换行符。所有换行必须显式使用 Chr(10)。
1、删除宏中所有 vbCr、vbCrLf 或 "\n" 的使用。
2、统一替换为 Chr(10)。
3、验证字符串实际内容:可用 MsgBox Asc(Right(text, 1)) 检查末尾字符是否为 10。








