Здравствуйте!
У меня такая задачка. Есть скрипт, написанный на VBScript. Он вызывает Excel и строит в нём таблицу. Существует ли возможность исправить этот скрипт так, чтобы та же таблица строилась в Calc (аналог Excel из Open Office)?
В имеющемся скрипте есть строка:
set Excel = CreateObject("Excel.Application")
Если я правильно понял, здесь создаётся объект класса Application из библиотеки Excel. То есть чтобы можно было работать с Calc, необходимо иметь соответствующую библиотеку? Верно?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте!
А>У меня такая задачка. Есть скрипт, написанный на VBScript. Он вызывает Excel и строит в нём таблицу. Существует ли возможность исправить этот скрипт так, чтобы та же таблица строилась в Calc (аналог Excel из Open Office)?
А>В имеющемся скрипте есть строка:
А>А>set Excel = CreateObject("Excel.Application")
А>
А>Если я правильно понял, здесь создаётся объект класса Application из библиотеки Excel. То есть чтобы можно было работать с Calc, необходимо иметь соответствующую библиотеку? Верно?
Всё верно.
Делай так:
set Excel = CreateObject("com.sun.star.ServiceManager")
Здравствуйте, Аноним, Вы писали:
А>У меня такая задачка. Есть скрипт, написанный на 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