在宏中传递变量参数时出现语法错误
Syntax error when passing variable args in macro
我有一个接受 2 个参数的 libreoffice 宏。
- 文件路径
- 变量参数 sheet 要查找的名称。
我遍历与第一个 arg 相关的文档并获得与第一个变量 arg 匹配的 sheet。然后我将 sheet 转换为 CSV。
Sub ExportToCsv(URL as String, ParamArray sheetNames() As Variant)
Dim saveParams(1) as New com.sun.star.beans.PropertyValue
saveParams(0).Name = "FilterName"
saveParams(0).Value = "Text - txt - csv (StarCalc)"
saveParams(1).Name = "FilterOptions"
saveParams(1).Value = "44,34,0,1,1" ' 44=comma, 34=double-quote
GlobalScope.BasicLibraries.loadLibrary("Tools")
URL = ConvertToURL(URL)
document = StarDesktop.loadComponentFromUrl(URL, "_blank", 0, Array())
baseName = Tools.Strings.GetFileNameWithoutExtension(document.GetURL(), "/")
directory = Tools.Strings.DirectoryNameoutofPath(document.GetURL(), "/")
sheets = document.Sheets
sheetCount = sheets.Count
Dim x as Integer
Dim requiredSheetIndex as Integer
For x = 0 to sheetCount -1
sheet = sheets.getByIndex(x)
sheet.isVisible = True
For i = LBound(sheetNames) To UBound(sheetNames)
If StrComp(sheet.Name, sheetNames(i), vbTextCompare) = 0 Then
requiredSheetIndex = x
End If
Next
Next
currentSheet = document.GetCurrentController.GetActiveSheet()
sheet = sheets(requiredSheetIndex)
document.GetCurrentController.SetActiveSheet(sheet)
filename = directory + "/" + baseName + ".csv"
fileURL = convertToURL(Filename)
document.StoreToURL(fileURL, saveParams())
document.close(True)
End Sub
例如。 ExportToCsv(<path>, 'Data')
。假设文档有 4 个 sheet,第 3 个 sheet 为 DATA
,这个 sheet 应该转换为 CSV。
以前我曾经将 sheet idnex 直接赋给宏,并且效果很好。但是要求发生了变化,我必须传入一组可能的名称以进行匹配。因此变量 args.
但现在我遇到语法错误(附截图)。我不知道这里出了什么问题。
我相信它是在抱怨 ParamArray 关键字。经过一番挖掘,我发现你需要包括:
option compatible
在模块的顶部。欲了解更多信息,您可以refer to this link.
我有一个接受 2 个参数的 libreoffice 宏。
- 文件路径
- 变量参数 sheet 要查找的名称。
我遍历与第一个 arg 相关的文档并获得与第一个变量 arg 匹配的 sheet。然后我将 sheet 转换为 CSV。
Sub ExportToCsv(URL as String, ParamArray sheetNames() As Variant)
Dim saveParams(1) as New com.sun.star.beans.PropertyValue
saveParams(0).Name = "FilterName"
saveParams(0).Value = "Text - txt - csv (StarCalc)"
saveParams(1).Name = "FilterOptions"
saveParams(1).Value = "44,34,0,1,1" ' 44=comma, 34=double-quote
GlobalScope.BasicLibraries.loadLibrary("Tools")
URL = ConvertToURL(URL)
document = StarDesktop.loadComponentFromUrl(URL, "_blank", 0, Array())
baseName = Tools.Strings.GetFileNameWithoutExtension(document.GetURL(), "/")
directory = Tools.Strings.DirectoryNameoutofPath(document.GetURL(), "/")
sheets = document.Sheets
sheetCount = sheets.Count
Dim x as Integer
Dim requiredSheetIndex as Integer
For x = 0 to sheetCount -1
sheet = sheets.getByIndex(x)
sheet.isVisible = True
For i = LBound(sheetNames) To UBound(sheetNames)
If StrComp(sheet.Name, sheetNames(i), vbTextCompare) = 0 Then
requiredSheetIndex = x
End If
Next
Next
currentSheet = document.GetCurrentController.GetActiveSheet()
sheet = sheets(requiredSheetIndex)
document.GetCurrentController.SetActiveSheet(sheet)
filename = directory + "/" + baseName + ".csv"
fileURL = convertToURL(Filename)
document.StoreToURL(fileURL, saveParams())
document.close(True)
End Sub
例如。 ExportToCsv(<path>, 'Data')
。假设文档有 4 个 sheet,第 3 个 sheet 为 DATA
,这个 sheet 应该转换为 CSV。
以前我曾经将 sheet idnex 直接赋给宏,并且效果很好。但是要求发生了变化,我必须传入一组可能的名称以进行匹配。因此变量 args.
但现在我遇到语法错误(附截图)。我不知道这里出了什么问题。
我相信它是在抱怨 ParamArray 关键字。经过一番挖掘,我发现你需要包括:
option compatible
在模块的顶部。欲了解更多信息,您可以refer to this link.