【发布时间】:2020-05-19 12:17:38
【问题描述】:
我有一个用于 libreoffice 的宏,它接受 2 个参数。
- 文件路径
- 作为要查找的工作表名称的变量 args。
我遍历与第一个 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 张表,第 3 张表为DATA,则该表应转换为 CSV。
以前我曾经将工作表 idnex 直接放入宏中,并且效果很好。但是要求发生了变化,我必须传入一组可能的名称来匹配。因此变量 args。
但现在我收到了一个语法错误(附有屏幕截图)。我无法弄清楚这里出了什么问题。
【问题讨论】:
-
你不需要
Sub ExportToCsv(URL as String, sheetNames As Variant)吗?或者因为你在libreoffice上,至少去掉sheetNames()的括号(不确定ParamArray是什么)。 -
宏标签上写着“不要用于 VBA”,所以被删除了。
-
好的。我不知道。谢谢
-
@jamheadart 我不太熟悉 vba。我以此作为参考 -
https://stackoverflow.com/questions/14716385/variable-argument-list-with-visual-basic
标签: vba libreoffice