使用宏删除双引号
remove double quotes using a macro
我正在使用这个功能,它按预期工作。它会删除所有标点符号。
- 第一个问题是没有去掉双引号"
- 第二个问题是我需要select需要处理的文本。我更喜欢默认更正的当前文件(所有文本)。
Sub removePunc()
REM the text ranges to work on must be seleczed in advance.
REM This will be done mostly by a F&R action with an appropriate
REM search strung and 'Find All'.
REM the this macro can be run.
fa = createUnoService("com.sun.star.sheet.FunctionAccess")
rgs = ThisComponent.CurrentSelection
n = rgs.Count -1
For k = 0 To n
rg = rgs(k)
h = fa.callFunction("REGEX", Array(rg.String, "!", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "'", " ", "g"))
h = fa.callFunction("REGEX", Array(h , ",", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\(", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\)", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\*", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\-", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\;", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\?", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\[", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\]", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\–", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\—", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\‘", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\“", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\”", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\.", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\:", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\'", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\uFEFF", " ", "g"))
rg.String = h
Next k
End Sub
- 这对我有用:
h = fa.callFunction("REGEX", Array(h, """", " ", "g"))
- 我对 VBA 和 LibreOffice 几乎一无所知,所以这可能不是最佳解决方案,但它以某种方式工作,无需选择:
Sub removePunc()
fa = createUnoService("com.sun.star.sheet.FunctionAccess")
rg = ThisComponent.Text
h = fa.callFunction("REGEX", Array(rg.String, "!", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "'", " ", "g"))
h = fa.callFunction("REGEX", Array(h , ",", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\(", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\)", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\*", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\-", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\;", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\?", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\[", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\]", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\–", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\—", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\‘", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\“", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\”", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\.", " ", "g"))
h = fa.callFunction("REGEX", Array(h , """", " ", "g"))
ThisComponent.Text.String = h
End Sub
其实你所有的改变都可以一步完成:
查找:"[!',\(\)\*\-;\?\[\]\–\—‘“”\.\""]"
替换为:
(space)
不过,如果您想使用更改列表,这里是更优化的实现:
Sub Replace
Dim to_search() As String
Dim to_replace() As String
Dim n As Long
Dim oDocument As Object
Dim oReplace As Object
to_search() = Array("[!',\(\)\*\-;\?\[\]\–\—‘“”\.\""]")
to_replace() = Array(" ")
oDocument = ThisComponent
oReplace = oDocument.createReplaceDescriptor
oReplace.SearchRegularExpression = True
For n = lbound(to_search()) To ubound(to_search())
oReplace.SearchString = to_search(n)
oReplace.ReplaceString = to_replace(n)
oDocument.replaceAll(oReplace)
Next n
End Sub
基于官方示例:https://api.libreoffice.org/examples/basic/text/modifying_text_automatically/
它也一步完成替换,但如果需要,您可以向数组添加额外的元素,这样:
to_search() = Array("no", "never", "no way!")
to_replace() = Array("yes", "always", "why not?")
感谢用户@Yuri khristich 这按预期工作:
Sub removePunc()
fa = createUnoService("com.sun.star.sheet.FunctionAccess")
rg = ThisComponent.Text
h = fa.callFunction("REGEX", Array(rg.String, "[!',\:\(\)\*\-;\?\[\]\–\—‘“”\.\""]", " ", "g"))
h = fa.callFunction("REGEX", Array(h, "\uFEFF", " ", "g"))
ThisComponent.Text.String = h
ListMisSpelledWords3
End Sub
我正在使用这个功能,它按预期工作。它会删除所有标点符号。
- 第一个问题是没有去掉双引号"
- 第二个问题是我需要select需要处理的文本。我更喜欢默认更正的当前文件(所有文本)。
Sub removePunc() REM the text ranges to work on must be seleczed in advance. REM This will be done mostly by a F&R action with an appropriate REM search strung and 'Find All'. REM the this macro can be run. fa = createUnoService("com.sun.star.sheet.FunctionAccess") rgs = ThisComponent.CurrentSelection n = rgs.Count -1 For k = 0 To n rg = rgs(k) h = fa.callFunction("REGEX", Array(rg.String, "!", " ", "g")) h = fa.callFunction("REGEX", Array(h , "'", " ", "g")) h = fa.callFunction("REGEX", Array(h , ",", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\(", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\)", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\*", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\-", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\;", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\?", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\[", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\]", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\–", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\—", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\‘", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\“", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\”", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\.", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\:", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\'", " ", "g")) h = fa.callFunction("REGEX", Array(h , "\uFEFF", " ", "g")) rg.String = h Next k End Sub
- 这对我有用:
h = fa.callFunction("REGEX", Array(h, """", " ", "g"))
- 我对 VBA 和 LibreOffice 几乎一无所知,所以这可能不是最佳解决方案,但它以某种方式工作,无需选择:
Sub removePunc()
fa = createUnoService("com.sun.star.sheet.FunctionAccess")
rg = ThisComponent.Text
h = fa.callFunction("REGEX", Array(rg.String, "!", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "'", " ", "g"))
h = fa.callFunction("REGEX", Array(h , ",", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\(", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\)", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\*", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\-", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\;", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\?", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\[", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\]", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\–", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\—", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\‘", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\“", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\”", " ", "g"))
h = fa.callFunction("REGEX", Array(h , "\.", " ", "g"))
h = fa.callFunction("REGEX", Array(h , """", " ", "g"))
ThisComponent.Text.String = h
End Sub
其实你所有的改变都可以一步完成:
查找:"[!',\(\)\*\-;\?\[\]\–\—‘“”\.\""]"
替换为:
(space)
不过,如果您想使用更改列表,这里是更优化的实现:
Sub Replace
Dim to_search() As String
Dim to_replace() As String
Dim n As Long
Dim oDocument As Object
Dim oReplace As Object
to_search() = Array("[!',\(\)\*\-;\?\[\]\–\—‘“”\.\""]")
to_replace() = Array(" ")
oDocument = ThisComponent
oReplace = oDocument.createReplaceDescriptor
oReplace.SearchRegularExpression = True
For n = lbound(to_search()) To ubound(to_search())
oReplace.SearchString = to_search(n)
oReplace.ReplaceString = to_replace(n)
oDocument.replaceAll(oReplace)
Next n
End Sub
基于官方示例:https://api.libreoffice.org/examples/basic/text/modifying_text_automatically/
它也一步完成替换,但如果需要,您可以向数组添加额外的元素,这样:
to_search() = Array("no", "never", "no way!")
to_replace() = Array("yes", "always", "why not?")
感谢用户@Yuri khristich 这按预期工作:
Sub removePunc()
fa = createUnoService("com.sun.star.sheet.FunctionAccess")
rg = ThisComponent.Text
h = fa.callFunction("REGEX", Array(rg.String, "[!',\:\(\)\*\-;\?\[\]\–\—‘“”\.\""]", " ", "g"))
h = fa.callFunction("REGEX", Array(h, "\uFEFF", " ", "g"))
ThisComponent.Text.String = h
ListMisSpelledWords3
End Sub