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

лис.хвост

VIP
Разработчик
Сообщения
636
Реакции
1,022
Баллы
228
Добрый день. Подскажите, пожалуйста, как создать новый документ Calc скриптом vbs. Пробовала такой вариант:
VB.NET:
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'"
 
Последнее редактирование модератором:

лис.хвост

VIP
Разработчик
Сообщения
636
Реакции
1,022
Баллы
228
Рабочий вариант:

VB.NET:
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)
 
Последнее редактирование модератором:

лис.хвост

VIP
Разработчик
Сообщения
636
Реакции
1,022
Баллы
228
VB.NET:
Объединение ячеек:
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)
 
Последнее редактирование:

Кирилл

Команда форума
Администратор
Сообщения
13,827
Реакции
6,168
Баллы
913
tisha, это рабочий вариант?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,132
Реакции
5,907
Баллы
648
Да уж. Open Offic-овскую объектную модель гораздо тяжелее понять, чем MS Office. Или это на первый взгляд так кажется...
 

лис.хвост

VIP
Разработчик
Сообщения
636
Реакции
1,022
Баллы
228
Работает, но код некрасивый, завтра посмотрю
VB.NET:
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:
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
 

лис.хвост

VIP
Разработчик
Сообщения
636
Реакции
1,022
Баллы
228
У меня для упрощения работы получилась вот такая плюшка
 

Вложения

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,132
Реакции
5,907
Баллы
648
Пора открывать раздел по Open Offic-у :)
Добавлю это чуть позже в полезные примеры в VBA. Спасибо.
 
Сверху Снизу