Переход с одной книги в другую

Автор RRNDeonisiusEZH, 5 июля 2013, 01:19

0 Пользователи и 1 гость просматривают эту тему.

RRNDeonisiusEZH

Всем доброго времени суток!
Пишу в VBA, но по работе возникла необходимость написать небольшой код для OOo. Суть кода в следующем:
1. Код пробегается по 1му файлику и собирает нужную информацию при выполнении условий.
2. Переходит в другую книгу.
3. Вставляет данные в необходимые ячейки.
'--------------------
Первый пункт реализовал (хоть и потратил около 3х часов))).
Третий пункт тоже не проблема будет реализовать.

Но вот со вторым - это беда. Обшарил весь нет, переводил с разных языков...все в пустую.
Название в книги, в которую нужно переходить всегда стандартное, то есть на примере VBA мне необходимо:
Application.Workbooks("Нужная_книга.xls").Activate

Подскажите пож-ста...

Всем заранее ОгРоМнЕйШеЕ спасибо!

Yakov

Для нового документа:

secondDoc = StarDesktop.loadComponentFromUrl("private:factory/scalc","_blank",0,dimArray())
selectSheetByName(secondDoc, "Name_of_sheet")

RRNDeonisiusEZH

Прошу прощения, не уточнил, документ в который он переходит - не новый, он уже есть - это другая книга с данными.
Ножен кусочек кода, который бы указывал, что нужно активировать "такую-то книгу".

RRNDeonisiusEZH

Проблему решил открытием необходимой книги, то есть чтоб она стала активной, я ее открываю, но если кто знает код просто активации, буду очень рад =)

tisha

Добрый день. Объясните, пожалуйста, как быть. Есть код:
Dim objServiceManager, Stardesktop, oDocToStore, 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())

Ошибка: Индекс выходит за пределы допустимого диапазона: 'args'

rami

Цитата: tisha от  3 августа 2015, 08:54Ошибка: Индекс выходит за пределы допустимого диапазона: 'args'
Разумеется выйдет, массив то пустой. Определите массив args() не просто Dim args() , а как:
Dim args() As new com.sun.star.beans.PropertyValue

tisha

пробовала, ошибка: "Предполагается наличие окончания инструкции"
еще пробовала:
   ReDim args(1)
   Set args(0) = objServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
   args(0).Name = "Hidden"
   args(0).Value = False
   
   Set args(1) = objServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
   args(1).Name = "AsTemplate"
   args(1).Value = False

rami

Цитата: tisha от  3 августа 2015, 09:16пробовала, ошибка: "Предполагается наличие окончания инструкции"
еще пробовала:
   ReDim args(1)
   Set args(0) = objServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
   args(0).Name = "Hidden"
   args(0).Value = False
   
   Set args(1) = objServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
   args(1).Name = "AsTemplate"
   args(1).Value = False
К сожалению, я это не понимаю. Вы мешаете в кучу разные языки программирования, а выше процитированное вообще можно опустить.

Что вы хотите сделать? Открыть документ как обычно или как шаблон или скрытно или ещё как?

tisha

Хочу просто создать новый документ, занести данные в определенные ячейки и сохранить

Yakov

#9

Dim objServiceManager, Stardesktop, oDocToStore
Dim args(1) As new com.sun.star.beans.PropertyValue

Rem args(0).Name = "Hidden"
Rem args(0).Value = False
Rem args(1).Name = "AsTemplate"
Rem args(1).Value = False

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())



Участок кода закомментировал, так как работает и без него

JohnSUN

Или
GlobalScope.BasicLibraries.LoadLibrary("Tools")
oODS = CreateNewDocument("scalc")
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: tisha от  3 августа 2015, 09:36Хочу просто создать новый документ, занести данные в определенные ячейки и сохранить
В самом верху этой темы Yakov уже ответил.

Открыть новый документ можно так:
Sub OpenDokument  Dim oDoc
oDoc=StarDesktop.loadComponentFromUrl("private:factory/scalc","_blank",0,dimArray())
End Sub

tisha

Прошу прощения, я не верно объяснила. Цель создать новый документ не из макроса Calc, а из скрипта vbs

tisha

Как-то так все решалось:
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)

rami

Попробуйте так:
Option VbaSupport 1
Sub OpenDokument
Set Desktop = GetProcessServiceManager.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)
End Sub

У меня открылся новый документ.