如何在 OpenOffice VBA 的公式中使用 "(双引号)?例如使用 Replace()
How do you use " (double quotes) in a formula in OpenOffice VBA? For instance with Replace()
我正在寻找用反斜杠转义双引号替换双引号 "
- \"
.
我在网上看到可以在VBA中使用双引号,如果你在主双引号内使用两个双引号。但是,这似乎对我不起作用。例如,我尝试了以下代码:
Function ADDSLASHES(InputString As String)
NewString = Replace(InputString, "\", "\")
NewString = Replace(NewString, "'", "\'")
NewString = Replace(NewString, """", "\""")
ADDSLASHES = NewString
End Function
当我测试它时,这个函数成功地替换了单反斜杠和单引号,但没有替换双引号。
我还了解到您可以使用 CHR(34),而在其他地方则可以使用 CHR(147)。但这也行不通。我尝试了以下几行:
NewString = Replace(NewString, CHR(34), "\"+CHR(34))
NewString = Replace(NewString, CHR(147), "\"+CHR(147))
但是用带有双引号的单元格测试它不起作用。难道我做错了什么?如何在 Replace() 函数中使用双引号?
当我在单元格中输入 a"b
时,Calc 将其转换为右双引号,而不是左双引号。添加此行使其工作:
NewString = Replace(NewString, CHR(148), "\"+CHR(148))
请注意 x94
(十进制 148)是一个扩展的 ASCII 编码字符,我会不惜一切代价避免这种情况。强烈建议仅使用前 128 个字符作为 ASCII,而对其他所有字符使用 Unicode。
右双引号的 Unicode 值为 U+201D
。遗憾的是,显然 LibreOffice Basic 没有处理这些值的原生方式。有 ChrW 但这需要 VBA 兼容性选项。另一种方法是从 Basic 调用 UNICODE()
电子表格函数,但这很麻烦。
我的偏好:不要将 Basic 用于任何重要的事情。 LibreOffice 宏可以用 Python 编写,它具有强大的 Unicode 支持。
编辑:
有一件事我昨天忘了提:Select公式栏中的引号,然后按Alt+x找出它到底是什么。这会将其转换为 Unicode 值,然后再转换回来。
编辑 2:
没错——Alt+X 仅适用于 LibreOffice,不适用于 AOO。同样出于某种原因,上面的扩展 ASCII 代码似乎在 AOO 中不起作用。也许这不是一件坏事。无论如何,这是Unicode电子表格函数访问方法,它在AOO和LO中对我都有效。
fa = createUnoService("com.sun.star.sheet.FunctionAccess")
ch = fa.CallFunction("UNICHAR", Array(CLng("&H201D"))
NewString = Replace(NewString, ch, "\"+ch)
如果这不起作用,那么您的单元格中可能还有其他内容。要弄清楚它是什么,您可以安装 LibreOffice。或者还有很多其他方式;我最常使用 GVim 文本编辑器。另外,我刚刚用谷歌搜索并找到 https://www.branah.com/unicode-converter,您可以在其中粘贴一些文本并查看实际的 UTF-16 十六进制值。
我正在寻找用反斜杠转义双引号替换双引号 "
- \"
.
我在网上看到可以在VBA中使用双引号,如果你在主双引号内使用两个双引号。但是,这似乎对我不起作用。例如,我尝试了以下代码:
Function ADDSLASHES(InputString As String)
NewString = Replace(InputString, "\", "\")
NewString = Replace(NewString, "'", "\'")
NewString = Replace(NewString, """", "\""")
ADDSLASHES = NewString
End Function
当我测试它时,这个函数成功地替换了单反斜杠和单引号,但没有替换双引号。
我还了解到您可以使用 CHR(34),而在其他地方则可以使用 CHR(147)。但这也行不通。我尝试了以下几行:
NewString = Replace(NewString, CHR(34), "\"+CHR(34))
NewString = Replace(NewString, CHR(147), "\"+CHR(147))
但是用带有双引号的单元格测试它不起作用。难道我做错了什么?如何在 Replace() 函数中使用双引号?
当我在单元格中输入 a"b
时,Calc 将其转换为右双引号,而不是左双引号。添加此行使其工作:
NewString = Replace(NewString, CHR(148), "\"+CHR(148))
请注意 x94
(十进制 148)是一个扩展的 ASCII 编码字符,我会不惜一切代价避免这种情况。强烈建议仅使用前 128 个字符作为 ASCII,而对其他所有字符使用 Unicode。
右双引号的 Unicode 值为 U+201D
。遗憾的是,显然 LibreOffice Basic 没有处理这些值的原生方式。有 ChrW 但这需要 VBA 兼容性选项。另一种方法是从 Basic 调用 UNICODE()
电子表格函数,但这很麻烦。
我的偏好:不要将 Basic 用于任何重要的事情。 LibreOffice 宏可以用 Python 编写,它具有强大的 Unicode 支持。
编辑:
有一件事我昨天忘了提:Select公式栏中的引号,然后按Alt+x找出它到底是什么。这会将其转换为 Unicode 值,然后再转换回来。
编辑 2:
没错——Alt+X 仅适用于 LibreOffice,不适用于 AOO。同样出于某种原因,上面的扩展 ASCII 代码似乎在 AOO 中不起作用。也许这不是一件坏事。无论如何,这是Unicode电子表格函数访问方法,它在AOO和LO中对我都有效。
fa = createUnoService("com.sun.star.sheet.FunctionAccess")
ch = fa.CallFunction("UNICHAR", Array(CLng("&H201D"))
NewString = Replace(NewString, ch, "\"+ch)
如果这不起作用,那么您的单元格中可能还有其他内容。要弄清楚它是什么,您可以安装 LibreOffice。或者还有很多其他方式;我最常使用 GVim 文本编辑器。另外,我刚刚用谷歌搜索并找到 https://www.branah.com/unicode-converter,您可以在其中粘贴一些文本并查看实际的 UTF-16 十六进制值。