Libreoffice Calc,使用VBScript来VLOOKUP值或评估公式?

时间:2019-01-14 23:01:05

标签: vbscript libreoffice openoffice-calc libreoffice-calc

对于处理订单,我们使用vbscripts将其导入到会计软件中。有几个供应商,每个供应商都有自己的文件格式,主要是.CSV和XML。第一步是提取所有订单行(每个供应商的自定义功能),然后进行一些附加处理,然后将其写入数据库,这对于所有供应商都是相同的。

一个新的供应商使用Excel文件将一张纸中的所有订单行,除了相应的增值税百分比值在另一张纸中可用。可以使用订单中的商品代码查询每件商品的增值税百分比。

Libreoffice Calc VLOOKUP a vat value on another sheet

该公司只有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(或类似操作)?
还是有一种方法可以在运行时从字符串评估单元格公式?

0 个答案:

没有答案