VBS: как создать новый документ OpenOffice

лис.хвост

VIP
Разработчик
Сообщения
623
Реакции
586
Добрый день. Подскажите, пожалуйста, как создать новый документ Calc скриптом vbs. Пробовала такой вариант:
VB.NET / VBA:
Dim objServiceManager, Stardesktop, oDocToStore
Dim args()
Set objServiceManager = CreateObject("com.sun.star.ServiceManager")
Set Stardesktop = objServiceManager.createInstance("com.sun.star.frame.Desktop")
Set oDocToStore = Stardesktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, args())

работает в vba, vbs выдает ошибку "Индекс выходит за пределы допустимого диапазона: 'args'"
 
Последнее редактирование модератором:
Рабочий вариант:

VB.NET / VBA:
Set ServiceManager = CreateObject("com.sun.star.ServiceManager")
Set Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop")
arr = Array()
Set Document = Desktop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, arr)
Set Sheets = Document.getSheets()
Set Sheet = Sheets.getByIndex(0)
 
Последнее редактирование модератором:
VB.NET / VBA:
Объединение ячеек:
Dim dispatcher 'as object
Set dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper")
    ReDim args1(0)
Set args1(0) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
args1(0).Name = "ToPoint"
args1(0).Value = "$B$3"
Call dispatcher.executeDispatch(Document.getCurrentController.getFrame, ".uno:GoToCell", "", 0, args1)
    ReDim args2(1)
Set args2(0) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
args2(0).Name = "By"
args2(0).Value = 1
Set args2(1) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
args2(1).Name = "Sel"
args2(1).Value = True
Call dispatcher.executeDispatch(Document.getCurrentController.getFrame, ".uno:GoRight", "", 0, args2)
    ReDim args3(1)
Set args3(0)= ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
args3(0).Name = "By"
args3(0).Value = 1
Set args3(1)= ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
args3(1).Name = "Sel"
args3(1).Value = True
Call dispatcher.executeDispatch(Document.getCurrentController.getFrame, ".uno:GoRight", "", 0, args3)
oArgs = Array()
Call dispatcher.executeDispatch(Document.getCurrentController.getFrame, ".uno:MergeCells", "", 0,oArgs)
 
Последнее редактирование:
Да уж. Open Offic-овскую объектную модель гораздо тяжелее понять, чем MS Office. Или это на первый взгляд так кажется...
 
Работает, но код некрасивый, завтра посмотрю
VB.NET / VBA:
Function test_1(column, line, NumberOfCells)
    Dim dispatcher
    Set dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper")

    ReDim args1(0)
    Set args1(0) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
    args1(0).Name = "ToPoint"
    args1(0).Value = "$"& column &"$"& line

    Call dispatcher.executeDispatch(Document.getCurrentController.getFrame, ".uno:GoToCell", "", 0, args1)

    For i = 1 To NumberOfCells - 1
        ReDim args2(1)
        Set args2(0) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
        args2(0).Name = "By"
        args2(0).Value = 1
        Set args2(1) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
        args2(1).Name = "Sel"
        args2(1).Value = True

        Call dispatcher.executeDispatch(Document.getCurrentController.getFrame, ".uno:GoRight", "", 0, args2)
    Next
    oArgs = Array()
    Call dispatcher.executeDispatch(Document.getCurrentController.getFrame, ".uno:MergeCells", "", 0,oArgs)
End Function
Все намного проще, выделяем сразу диапазон:
VB.NET / VBA:
Function CellMerging(d)
    Dim dispatcher
    Set dispatcher = ServiceManager.createInstance("com.sun.star.frame.DispatchHelper")
    ReDim args1(0)
    Set args1(0) = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
    args1(0).Name = "ToPoint"
    args1(0).Value = d
    Call dispatcher.executeDispatch(Document.getCurrentController.getFrame, ".uno:GoToCell", "", 0, args1)
    oArgs = Array()
    Call dispatcher.executeDispatch(Document.getCurrentController.getFrame, ".uno:MergeCells", "", 0, oArgs)
End Function
 
Пора открывать раздел по Open Offic-у :)
Добавлю это чуть позже в полезные примеры в VBA. Спасибо.
 
Назад
Сверху Снизу