我有一个用于libreoffice的宏,它带有2个参数。
迭代与第一个arg有关的文档,并获取与第一个变量arg匹配的工作表。然后,我将该工作表转换为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张纸,其中第三张纸为DATA
,则该纸页应转换为CSV。
[以前,我曾经将工作表idnex直接提供给宏,并且效果很好。但是需求发生了变化,我必须传递一组可能的名称以进行匹配。因此是变量args。
但是现在我收到语法错误(附有屏幕截图)。我不明白这里出了什么问题。
我相信它在抱怨ParamArray关键字。经过一番挖掘,我发现您需要包括: