2015-12-13 6 views
1

Я попытался получить доступ к листу в документе ODS. Все работает нормально - я могу получить доступ к именованным диапазонам и т. Д., Но если я попытаюсь получить доступ к простой ячейке с помощью индексов Row/Col, я получаю сообщение об ошибке ...Автоматизация LibreOffice Calc извне через COM

Код является базой Lotus Notes (из-за вариантов. ..)

Dim rowFieldNameIndex As Integer 
Dim rowStartMergeIndex As Long 
Dim I As Integer 
Dim oCell As Variant ' Cell object. 
Dim oSheet As Variant 
Dim FieldName As String 

    rowFieldNameIndex = Val(GetOODocProperty (pOOObj, "FieldNameRow")) 
    rowStartMergeIndex = Val(GetOODocProperty (pOOObj, "MergeStartRow")) 
    '--> both working 

    If Not pOOobj Is Nothing Then 
     Set oSheet = pOOobj.Sheets(0) 

     MsgBox pOOobj.Sheets.Count   'works 
     MsgBox oSheet.CellsEnumeration.Count 
     'getCellByPosition(col,row) 
     Set oCell = oSheet.getCellByPosition(1, 1) 'ERROR?!?!? getCellByPosition is no tan Instance Member??? so how can I access a Cell 

     OCell.String = "Test" 
    End If 

Public Function GetOODocProperty (pOODoc As Variant, ByVal strVarName) As String 
    Dim userProps As Variant 

    On Error Resume Next 
    'get UserDefined Properties 
    Set userProps = pOODoc.DocumentProperties.getUserDefinedProperties() 

    'Try to Remove; on Error Property doesen't exists yet 
    If userProps.getPropertySetInfo().hasPropertyByName(strVarName) = True Then 
      'http://api.openoffice.org/docs/common/ref/com/sun/star/beans/XPropertySet.html 
     GetOODocProperty = userProps.getPropertyValue(strVarName) 
    Else 
     GetOODocProperty = "" 
    End If 
End function 

ответ

1

проблема была:

pOOBJ.Sheets(0) не возвращает объект листа в COM !!!!

это будет работать:

pOOObj.GetSheets().getbyIndex(0)

+0

В 'Sheets (0)' синтаксис кажется конкретного языка. Я думаю, 'getSheets(). GetByIndex()' или 'getSheets(). GetByName()' более надежны для большинства языков. Обычно то, что я делаю, это посмотреть, как это делается на Java, а затем применять это как можно ближе к любому языку, на котором работает UNO, в котором я работаю. –