对于处理订单,我们使用vbscripts将其导入到会计软件中。有几个供应商,每个供应商都有自己的文件格式,主要是.CSV和XML。第一步是提取所有订单行(每个供应商的自定义功能),然后进行一些附加处理,然后将其写入数据库,这对于所有供应商都是相同的。
一个新的供应商使用Excel文件将一张纸中的所有订单行,除了相应的增值税百分比值在另一张纸中可用。可以使用订单中的商品代码查询每件商品的增值税百分比。
该公司只有Libreoffice Calc,而且我知道您可以在宏中执行类似的操作。但是,这是一个完全自动化的过程,vbscript已经处理了所有其他文件,因此,我不想例外或仅手动处理该一种订单类型(打开Calc并运行宏)。因此,在这种情况下,它必须是 VBS和LibreOffice 。
这是我到目前为止获得的VBScript代码:
Option Explicit
' variables
Dim oSM, oDesk
Dim sFilename
Dim oDoc
Dim oSheet
Dim iLine
Dim sCode, iCount, sDesc, fCost, Perc
Set oSM = WScript.CreateObject("com.sun.star.ServiceManager")
Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
sFilename = "file:///C:/orders/import/supplier_orderlist_08-01-2019.xls"
set oDoc = oDesk.loadComponentFromURL( sFilename, "_blank", 0, Array() )
set oSheet = oDoc.getSheets().getByName("Orderlist")
For iLine = 11 to 12 ' testing first 2 lines
sCode = oSheet.getCellByPosition(1, iLine).getString()
iCount = oSheet.getCellByPosition(2, iLine).getString()
sDesc = oSheet.getCellByPosition(5, iLine).getString()
fCost = oSheet.getCellByPosition(8, iLine).getString()
'lookup doesn't work
Perc = Macro_VLOOKUP(sCode, oDoc)
WScript.Echo sCode & " - " & iCount & "x - " & sDesc & " => " & fCost & ", " & Perc & "%"
Next 'iLine
WScript.Quit 1
Function Macro_VLOOKUP(SearchValue, oDocGlob)
Dim oSheetLook, CellRange
Dim Column, Mode, svc, arg, Value
Set oSheetLook = oDocGlob.getSheets().getByName("Itemlisttotal")
Set CellRange = oSheetLook.getCellRangeByName("A1:B10000")
Column = 1
Mode = 0
svc = createUnoService("com.sun.star.sheet.FunctionAccess") '<- error: variable not defined
arg = Array(SearchValue, CellRange, Column, Mode)
Value = svc.callFunction("VLOOKUP", arg)
Macro_VLOOKUP = Value
End Function
它在createUnoService
的行上给出了错误
未定义变量'createUnoService'
这可能是基于Libreoffice的基本功能,需要将其转换为VBScript等效项。对此没有太多文档或示例,所以我只能猜测,但是Set svc = WScript.CreateObject("com.sun.star.sheet.FunctionAccess")
也不起作用,并显示“找不到类名”错误。
所以我的问题是:
是否可以从Libreoffice Calc中的VBScript执行VLOOKUP(或类似操作)?
还是有一种方法可以在运行时从字符串评估单元格公式?