Скрипт на VBScript для Calc (Open Office)
От: Аноним  
Дата: 26.12.09 15:39
Оценка:
Здравствуйте!
У меня такая задачка. Есть скрипт, написанный на VBScript. Он вызывает Excel и строит в нём таблицу. Существует ли возможность исправить этот скрипт так, чтобы та же таблица строилась в Calc (аналог Excel из Open Office)?
В имеющемся скрипте есть строка:

set Excel = CreateObject("Excel.Application")


Если я правильно понял, здесь создаётся объект класса Application из библиотеки Excel. То есть чтобы можно было работать с Calc, необходимо иметь соответствующую библиотеку? Верно?
Re: Скрипт на VBScript для Calc (Open Office)
От: Аноним  
Дата: 24.05.11 07:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте!

А>У меня такая задачка. Есть скрипт, написанный на VBScript. Он вызывает Excel и строит в нём таблицу. Существует ли возможность исправить этот скрипт так, чтобы та же таблица строилась в Calc (аналог Excel из Open Office)?
А>В имеющемся скрипте есть строка:

А>
А>set Excel = CreateObject("Excel.Application")
А>


А>Если я правильно понял, здесь создаётся объект класса Application из библиотеки Excel. То есть чтобы можно было работать с Calc, необходимо иметь соответствующую библиотеку? Верно?


Всё верно.
Делай так:
set Excel = CreateObject("com.sun.star.ServiceManager")
Re: Скрипт на VBScript для Calc (Open Office)
От: Vi2 Удмуртия http://www.adem.ru
Дата: 24.05.11 12:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У меня такая задачка. Есть скрипт, написанный на VBScript. Он вызывает Excel и строит в нём таблицу. Существует ли возможность исправить этот скрипт так, чтобы та же таблица строилась в Calc (аналог Excel из Open Office)?

А>В имеющемся скрипте есть строка:
А>set Excel = CreateObject("Excel.Application")

А>Если я правильно понял, здесь создаётся объект класса Application из библиотеки Excel. То есть чтобы можно было работать с Calc, необходимо иметь соответствующую библиотеку? Верно?

Вот тебе рабочий шаблончик открытия новой таблицы или существующего файла. Есть тут ключевые слова, по которым можно рыскать в Интернете.
Dim OApplication, ODesktop, ODocument, srcFile, srcProps()

Set OApplication = CreateObject("com.sun.star.ServiceManager")
If Not (OApplication Is Nothing) Then

   Set ODesktop = OApplication.createInstance("com.sun.star.frame.Desktop")
   If Not (ODesktop Is Nothing) Then
      If srcFile = "" Then

' Открыть новую пустую таблицу

         ReDim srcProps(0)
         Set srcProps(0) = OApplication.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
         With srcProps(0): .Name = "Hidden": .Value = False: End With

         Set ODocument = ODesktop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, srcProps)

      Else

' Открыть таблицу из файла srcFile, например, srcFile = "C:\TMP\tmp.xls"

         ReDim srcProps(1)
         Set srcProps(0) = OApplication.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
         With srcProps(0): .Name = "FilterName": .Value = "MS Excel 97": End With
         Set srcProps(1) = OApplication.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
         With srcProps(1): .Name = "Hidden": .Value = False: End With

         Set ODocument = ODesktop.LoadComponentFromURL("file:///" & srcFile, "_default", 0, srcProps)

      End If
   End If

' здесь ODocument - таблица для работы. Например,
'   Set OSheet = Office_GetSheet(True, ODocument, "Лист 1")
' или
'   Call Office_ActivateSheet(True, ODocument, "Лист 1")

End If


Всю функциональность Excel и Calc можно свести к однообразным функциям, например,
Function Office_GetSheet(bOO, doc, srcSheet)
On Error Resume Next
   Set Office_GetSheet = Nothing
   If Not (doc Is Nothing) Then

      If bOO Then ' Open Office

         If VarType(srcSheet) = vbString Then
            If srcSheet = "" Then
               Set Office_GetSheet = doc.CurrentController.ActiveSheet
            Else
               Set Office_GetSheet = doc.Sheets.getByName(srcSheet)
            End If
         Else
            Set Office_GetSheet = doc.Sheets.getByIndex(srcSheet - 1)
         End If

      Else      ' MS Office

         If VarType(srcSheet) = vbString Then
            If srcSheet = "" Then
               Set Office_GetSheet = doc.ActiveSheet
            Else
               Set Office_GetSheet = doc.Sheets(srcSheet)
            End If
         Else
            Set Office_GetSheet = doc.Sheets(srcSheet)
         End If

      End If

   End If
End Function

Sub Office_ActivateSheet(bOO, doc, srcSheet)
Dim sheet
On Error Resume Next
   Set sheet = Office_GetSheet(doc, srcSheet)
   If Not (sheet Is Nothing) Then

      If bOO Then ' Open Office

         Call doc.CurrentController.setActiveSheet(sheet)

      Else    ' MS Office

         Call sheet.Activate

      End If

   End If
End Sub
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.