Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: работа с OpenOffice
 
 автор: ДрЮня   (16.02.2011 в 10:05)   личное сообщение
 
 

Всем привет !
у меня задача - обрабатывать OpenOffice электронные таблицы макросами из VBA.
Где можно почитать, как использовать методы этого OpenOffice ?
Статью osmor-а (http://hiprog.com/index.php?option=com_content&task=view&id=251661586&Itemid=35) прочитал и частично использовал, но нужны еще и другие методы,например, копирование содержимого всего листа на новый лист и проч.
Буду признателен за ссылочки...

  Ответить  
 
 автор: osmor   (16.02.2011 в 18:06)   личное сообщение
 
 

Для меня все очень не просто.
Полного писания модели (понятного мне) я так и не нашел.
в основном все брал от сюда
http://www.oooforum.org/forum/index.phtml?sid=35c6c7016083cf942d467c12175c15d8

Есть еще пара книг в электронном виде, не сильно хороших, но все же. (завтра кину)
давай спрашивай здесь конкретные вопросы - будем вместе решать.
У мужика на работе есть книга
http://www.softkey.ru/catalog/program.php?ID=45019&site=9206
Но я ее еще не смотрел даже... OOO мне сейчас вроде не нужен.

  Ответить  
 
 автор: ДрЮня   (16.02.2011 в 21:18)   личное сообщение
 
 

Спасибо, Олег !
я и сам пытаюсь что-то нарыть, но тяжело :(
Книги в основном о работе в самом опен-офисе, а так чтобы из VBA работать с документом, что-то мало.
Сейчас проблема такая:
есть calc-документ ООО, в нем два листа.
нужно всю инфу скопировать с первого листа на второй, чтобы там ее править.

  Ответить  
 
 автор: час   (16.02.2011 в 22:28)   личное сообщение
 
 

Можно перезалить в таблицу аксес, а потом вылить в нужное место.
Можно сразу открыть документ и работать с двумя листами.
Чё не понятно....

  Ответить  
 
 автор: час   (16.02.2011 в 22:30)   личное сообщение
 
 

переменные

Public OpenOffice As Object    ' сервис менеджер
Public OOO_Desktop As Object   ' рабочий стол
Public OOO_Document As Object  ' документ, книга
Public OOO_Sheet As Object     ' лист
Public OOO_Index_Sheet As Long ' индекс  листа
Public OOO_Range As Object     ' диапазон ячеек

  Ответить  
 
 автор: час   (16.02.2011 в 22:30)   личное сообщение
 
 



Public Function FUN_Connect_OOO() As Boolean
' подключение
FUN_Connect_OOO = True
On Error GoTo FUN_Connect_OOO_Error
'----------------------------------------------------------------------------------------------------------------------------------------------------------------
'If IsOpenOfficeConnected() Then Exit Function

Set OpenOffice = CreateObject("com.sun.star.ServiceManager")
Set OOO_Desktop = OpenOffice.createInstance("com.sun.star.frame.Desktop") '      
      Set OOoIntrospection = CreateUnoService("com.sun.star.beans.Introspection")
       
'----------------------------------------------------------------------------------------------------------------------------------------------------------------
On Error GoTo 0
Exit Function
FUN_Connect_OOO_Error:
FUN_Connect_OOO = False
Set OpenOffice = Nothing

Error_String = Err.Description
Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Error.txt"), Now() & " _модуль " & "OOO_MOD" & " _
процедура " & "FUN_Connect_OOO" & " ..ошибка." & Error_String)

  
End Function


  Ответить  
 
 автор: час   (16.02.2011 в 22:32)   личное сообщение
 
 



Public Function FUN_OOO_OPEN_BOOCK(STR_PATCH_DOCS As String)
'Функция открытия книги ' Спасибо Osmor_у, иначе ничего не вышло бы
   On Error GoTo FUN_OOO_OPEN_BOOCK_Error
'----------------------------------------------------------------------------------
On Error GoTo BLANK
Dim OpenParams()
Call FUN_Connect_OOO
' загрузить открыть документ        ("file:///c:/dev/ooo/test.doc", "_blank", 0, arg())
Set OOO_Document = OOO_Desktop.loadComponentFromURL(STR_PATCH_DOCS, "_default", 0, OpenParams)
Exit Function
BLANK:
FUN_Connect_OOO
Set OOO_Document = OOO_Desktop.loadComponentFromURL(STR_PATCH_DOCS, "_blank", 0, OpenParams)
'----------------------------------------------------------------------------------
   On Error GoTo 0
   Exit Function
FUN_OOO_OPEN_BOOCK_Error:
Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Error.txt"), "Error " & Err.Number & " (" & Err.Description & ") in procedure FUN_OOO_OPEN_BOOCK of Module OOO_MOD")

End Function

  Ответить  
 
 автор: час   (16.02.2011 в 22:35)   личное сообщение
 
 




Public Function FUN_CREATE_COMMODITY_CHECK() As Boolean
' создание документа "Товарный_Чек" Улучшенное
Dim OpenParams()
Dim rst As ADODB.Recordset
Dim PP As Long
' Спасибо Osmor_у, иначе ничео не вышло бы
 
   On Error GoTo FUN_CREATE_COMMODITY_CHECK_Error
'----------------------------------------------------------------------------------
 FUN_CREATE_COMMODITY_CHECK = False
 ' если такого листа нет
If OOO_findSheetIndex(OOO_Document, "Товарный_Чек") = -1 Then
Call MsgBox("В документах не обнаружен лист <<Товарный_Чек>>", vbCritical)
Exit Function
End If
' если такого листа нет
OOO_Index_Sheet = OOO_findSheetIndex(OOO_Document, "Товарный_Чек")       ' получим индекс листа
Set OOO_Sheet = OOO_Document.getSheets().getByIndex(OOO_Index_Sheet)
OOO_Sheet.CharWeight = 75
OOO_Sheet.CharHeight = 10
OOO_Sheet.CharFontName = "TimesNewRoman" ' Наименование шрифта


 ' очистить диапазон под новые данные
Call FUN_CLEAR_Range("A" & PP + 1 & ":J" & 41)
' очистить бордюры диапазона
Call FUN_BORDER_CLEAR("A" & PP + 1 & ":J" & 41)

PP = 0
Call FUN_IN_DOCS("0", PP, "Организация: " & GLB_FIRMA, 2)
PP = PP + 1
Call FUN_Unite("A" & PP & ":I" & PP, 2, True)        'слияние PP на единицу болше (чёт с 1)
PP = PP + 1
Set OOO_Range = OOO_Sheet.getCellRangeByPosition(0, PP, 6, PP)
OOO_Range.CharHeight = 18                                 ' size Размер шрифта

Call FUN_IN_DOCS("0", PP, "Товарный чек № " & GLB_DOC_NUMBER & " от " & GLB_DOC_DATE, 3)
PP = PP + 1
Call FUN_Unite("A" & PP & ":I" & PP, 3, True)          'слияние PP на единицу больше (чёт с 1)
'' задаём ширину колонокSet OOO_Colonka =
OOO_Sheet.getColumns().getByIndex(0).Width = 700
OOO_Sheet.getColumns().getByIndex(5).Width = 1700
OOO_Sheet.getColumns().getByIndex(6).Width = 1700
OOO_Sheet.getColumns().getByIndex(8).Width = 2800

Set rst = New ADODB.Recordset   ' набор записей

' открываем всю группу в rst.Open транзакции
rst.Open "SELECT USERS_TRANSACTIONS_TBL.* From USERS_TRANSACTIONS_TBL Where (((USERS_TRANSACTIONS_TBL.ID_GROUP_TRANSACTION) = '" & GLB_ID_GROUP_DOC & "'))   ", GLB_CONNECTION, adOpenKeyset, adLockOptimistic

If rst.RecordCount = 0 Then Exit Function
If Not rst.BOF Then rst.MoveFirst

PP = PP + 1

    Do While Not rst.EOF ' заполняем наименованиями
Call FUN_IN_DOCS("0", PP, PP - 3, 3) ' № по порядку
Call FUN_IN_DOCS("1", PP, NZVB(rst("COMMODITY_NAME")), 2)
Call FUN_IN_DOCS("5", PP, NZVB(rst("METAGE")), 3)
Call FUN_IN_DOCS("6", PP, NZVAL(rst("AMOUNT_TRANZACTION")), 3)
Call FUN_IN_DOCS("7", PP, FUN_Currency_IN_String_DOCS(NZVB(rst("PRICE"))), 3)
Call FUN_IN_DOCS("8", PP, FUN_Currency_IN_String_DOCS(NZVB(rst("PRICE")) * NZVAL(rst("AMOUNT_TRANZACTION"))), 3)

PP = PP + 1
Call FUN_Unite("B" & PP & ":E" & PP, 2, True)        'слияние
    rst.MoveNext

    Loop


Call FUN_Unite("A" & PP + 1 & ":F" & PP + 1, 3, True) ' слияние
Call FUN_IN_DOCS("0", PP, "Всего: ", 3)
'Заполняем PP строку  суммы по колонкам
Call FUN_IN_DOCS("6", PP, FUN_AMOUNT_DOC, 3)
Call FUN_IN_DOCS("8", PP, FUN_Currency_IN_String_DOCS(FUN_PODITOG_DOC), 3)
Set OOO_Range = OOO_Sheet.getCellRangeByPosition(0, PP, 8, PP)
OOO_Range.CharWeight = 150
Call FUN_BORDER_POINT("A5:I" & PP + 1, 5)    ' рисуем бордюрs на все строки

PP = PP + 2
Call FUN_Unite("A" & PP & ":I" & PP, 3, True)          ' слияние
Set OOO_Range = OOO_Sheet.getCellRangeByPosition(0, PP, 8, PP)
OOO_Range.IsTextWrapped = True                         ' Переносить по словам
Call FUN_IN_DOCS("0", PP - 1, "Сумма прописью: " & NumStr(FUN_PODITOG_DOC, True) & " Без налога НДС. ", 2)

PP = PP + 3
Call FUN_Unite("A" & PP & ":I" & PP, 3, True)          'слияние
Call FUN_IN_DOCS("0", PP - 1, "Отпустил ________________________  " & GLB_USER_NAME, 2)

rst.Close
Set rst = Nothing

'Set OOO_Sheet = Nothing
'Set OOO_Document = Nothing

FUN_CREATE_COMMODITY_CHECK = True
'----------------------------------------------------------------------------------
   On Error GoTo 0
   Exit Function
FUN_CREATE_COMMODITY_CHECK_Error:
Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Error.txt"), "Error " & Err.Number & " (" & Err.Description & ") in procedure FUN_CREATE_COMMODITY_CHECK of Module DOCS_MOD")
End Function


  Ответить  
 
 автор: час   (16.02.2011 в 22:37)   личное сообщение
 
 




Public Function FUN_LOAD_DIRECTORY_COMMODITY(STR_PATH As String) As Boolean
' Загрузка справочника товаров
Dim OpenParams()
Dim RST_GROUP As ADODB.Recordset
Dim RST_COMMODITY As ADODB.Recordset
Dim PP As Long           ' номер строки
Dim GROUP_NUMBER As Long ' присвоим номер загружаемой группе
Dim GROUP_NAME As String     ' имя группы
Dim STR_IN As String                  ' загружаемое значение из ячейки
Dim PUSTO As Long                     ' количество пустых строк

' Спасибо Osmor_у, иначе ничео не вышло бы

   On Error GoTo FUN_LOAD_DIRECTORY_COMMODITY_Error
'----------------------------------------------------------------------------------
FUN_LOAD_DIRECTORY_COMMODITY = False

' если таковой не имеется сообщаем
If FUN_FILE_YES_NO(STR_PATH) = False Then
MsgBox "Файл  " & STR_PATH & " не найден!!!"
Exit Function
End If
STR_PATH = ConvertToUrl(STR_PATH)
MsgBox "Пожалуйста нажмите ок и ждите дальнейшего сообщения..."
OOO_Index_Sheet = -1
' открываем книгу OpenOffice.org Calc
Call FUN_OOO_OPEN_BOOCK(STR_PATH)
If OOO_findSheetIndex(OOO_Document, "Остатки") <> -1 Then
' получим индекс листа
OOO_Index_Sheet = OOO_findSheetIndex(OOO_Document, "Остатки")
GoTo Dalee_Dalee
End If

        ' попытка найти лист NOMENKLATURA
        If OOO_findSheetIndex(OOO_Document, "NOMENKLATURA") = -1 Then
                    ' лист номенклатура "NOMENKLATURA" - не найден.
                    Call MESS("Листы (Остатки или NOMENKLATURA) - не найдены.")
                    ' &" ' красный
                    '
                    '
                    Exit Function
            Else
                    ' получим индекс листа
                    OOO_Index_Sheet = OOO_findSheetIndex(OOO_Document, "NOMENKLATURA")
                    
            End If
Dalee_Dalee:

' получим ссылку на лист
Set OOO_Sheet = OOO_Document.getSheets().getByIndex(OOO_Index_Sheet)

 ' набор групп
Set RST_GROUP = New ADODB.Recordset
    ' очистка таблицы COMMODITY_GROUP_TB
    Call FUN_CLEAR_TABLE("COMMODITY_GROUP_TBL", GLB_CONNECTION)
' открываем  таблицу  групп
RST_GROUP.Open "SELECT COMMODITY_GROUP_TBL.* From COMMODITY_GROUP_TBL ", GLB_CONNECTION, adOpenKeyset, adLockOptimistic

If RST_GROUP.RecordCount <> 0 Then
    ' очистка таблицы COMMODITY_GROUP_TB
    Call FUN_CLEAR_TABLE("COMMODITY_GROUP_TBL", GLB_CONNECTION)
End If

' набор товаров
Set RST_COMMODITY = New ADODB.Recordset
    ' очистка таблицы  COMMODITY_TBL
   Call FUN_CLEAR_TABLE("COMMODITY_TBL", GLB_CONNECTION)
' открываем таблицу товаров
RST_COMMODITY.Open "SELECT COMMODITY_TBL.* From COMMODITY_TBL ", GLB_CONNECTION, adOpenKeyset, adLockOptimistic

If RST_COMMODITY.RecordCount <> 0 Then
    ' очистка таблицы  COMMODITY_TBL
    Call FUN_CLEAR_TABLE("COMMODITY_TBL", GLB_CONNECTION)
End If

If RST_COMMODITY.RecordCount = 0 Then


GROUP_NUMBER = 0

  For PP = 1 To 10
  STR_IN = ""
  Set OOO_Range = OOO_Sheet.getCellByPosition(0, PP)
  STR_IN = OOO_Range.GetString
  If InStr(1, STR_IN, "Группа", vbTextCompare) <> 0 Then Exit For
  Next PP
  
  For PP = PP To 100000
     STR_IN = ""
    Set OOO_Range = OOO_Sheet.getCellByPosition(0, PP)
    If OOO_Range.Value = 0 Then
      STR_IN = OOO_Range.GetString
    Else
      STR_IN = OOO_Range.Value
    End If
    
    ' пошли пустые строки, если пустых будет более чем ,  тогда конец загрузке
    If STR_IN = "" Then
        PUSTO = PUSTO + 1
        GoTo Dalee
    End If
'сделать первую букву каждого слова заглавной
'  If IsNull(STR_IN) = False Then
'   STR_IN = StrConv(STR_IN, vbProperCase)
'  End If
    
    
    ' пошли пустые строки

If InStr(1, STR_IN, "Группа", vbTextCompare) <> 0 Then ' это группа
If InStr(1, STR_IN, "7Группа", vbTextCompare) <> 0 Then ' это группа
STR_IN = Mid(STR_IN, 2)
End If
    RST_GROUP.AddNew
    GROUP_NAME = STR_IN
    RST_GROUP("GROUP_NAME") = STR_IN
    RST_GROUP("USER_NAME") = GLB_USER_NAME
    RST_GROUP("DATE_RECORDS") = Date
    RST_GROUP.Update
    GROUP_NUMBER = RST_GROUP("GROUP_NUMBER")
Else
      RST_COMMODITY.AddNew
      
      ' Идентификатор товара.
    Set OOO_Range = OOO_Sheet.getCellByPosition(15, PP)
    STR_IN = ""
    If OOO_Range.Value = 0 Then
      STR_IN = OOO_Range.GetString
    Else
      STR_IN = OOO_Range.Value
    End If
   
   If NZVB(STR_IN) <> "" Then
   ' товар уже с идентификатором (не новый) изменим данные
   RST_COMMODITY("ID_COMMODITY") = STR_IN
   Else
   ' товар новый
   RST_COMMODITY("ID_COMMODITY") = FUN_GENERATE
   End If
    
    ' Наименование
    Set OOO_Range = OOO_Sheet.getCellByPosition(0, PP)
    STR_IN = ""
    If OOO_Range.Value = 0 Then
      STR_IN = OOO_Range.GetString
    Else
      STR_IN = OOO_Range.Value
    End If
    'сделать первую букву каждого слова заглавной
'  If IsNull(STR_IN) = False Then
'  STR_IN = StrConv(STR_IN, vbProperCase)
'  End If
  
    RST_COMMODITY("GROUP_NUMBER") = RST_GROUP("GROUP_NUMBER")
    RST_COMMODITY("GROUP_NAME") = GROUP_NAME
    RST_COMMODITY("COMMODITY_NAME") = STR_IN
    RST_COMMODITY("COMMODITY_NAME_IN_KKM") = STR_IN
    
    ' Цена товара.
    Set OOO_Range = OOO_Sheet.getCellByPosition(8, PP)
    STR_IN = ""
    If OOO_Range.Value = 0 Then
      STR_IN = OOO_Range.GetString
    Else
      STR_IN = OOO_Range.Value
    End If
    RST_COMMODITY("PRICE_COMMODITY") = STR_IN

        
        
' Ед. изм
    Set OOO_Range = OOO_Sheet.getCellByPosition(9, PP)
    STR_IN = ""
    If OOO_Range.Value = 0 Then
      STR_IN = OOO_Range.GetString
    Else
      STR_IN = OOO_Range.Value
    End If
    RST_COMMODITY("METAGE") = STR_IN

    ' Цена закуп.
    Set OOO_Range = OOO_Sheet.getCellByPosition(10, PP)
    STR_IN = ""
    If OOO_Range.Value = 0 Then
      STR_IN = OOO_Range.GetString
    Else
      STR_IN = OOO_Range.Value
    End If
        RST_COMMODITY("OPTO_PRICE") = Val(STR_IN)
     
     ' Описание производитель
    Set OOO_Range = OOO_Sheet.getCellByPosition(11, PP)
    STR_IN = ""
    If OOO_Range.Value = 0 Then
      STR_IN = OOO_Range.GetString
    Else
      STR_IN = OOO_Range.Value
    End If
            RST_COMMODITY("DESCRIPTION") = STR_IN
  
     ' Минимальный остаток
    Set OOO_Range = OOO_Sheet.getCellByPosition(12, PP)
    STR_IN = ""
    If OOO_Range.Value = 0 Then
      STR_IN = OOO_Range.GetString
    Else
      STR_IN = OOO_Range.Value
    End If
        RST_COMMODITY("MINIMUM") = Val(STR_IN)
        
    ' Количество
    Set OOO_Range = OOO_Sheet.getCellByPosition(13, PP)
    STR_IN = ""
    If OOO_Range.Value = 0 Then
      STR_IN = OOO_Range.GetString
    Else
      STR_IN = OOO_Range.Value
    End If
        RST_COMMODITY("AMOUNT") = Val(STR_IN)
  
  
  
'  ' штрихкод
    Set OOO_Range = OOO_Sheet.getCellByPosition(16, PP)
    STR_IN = ""
    If OOO_Range.Value = 0 Then
      STR_IN = OOO_Range.GetString
    Else
      STR_IN = OOO_Range.Value
    End If
    RST_COMMODITY("SHTRIHKOD") = STR_IN

    RST_COMMODITY.Update ' обновить
    
End If
Dalee:
' пошли пустые строки
    If PUSTO >= 20 Then Exit For
    Next PP
FUN_LOAD_DIRECTORY_COMMODITY = True
End If
'
' заполняем наименованиями групп товаров

RST_GROUP.Close
Set RST_GROUP = Nothing
RST_COMMODITY.Close
Set RST_COMMODITY = Nothing

'закрываем созданную книгу
Call OOO_Document.Close(False)
Set OOO_Document = Nothing
Set OOO_Sheet = Nothing
Set OOO_Desktop = Nothing
Set OpenOffice = Nothing
'----------------------------------------------------------------------------------
   On Error GoTo 0
   Exit Function
FUN_LOAD_DIRECTORY_COMMODITY_Error:
Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Error.txt"), "Error " & Err.Number & " (" & Err.Description & ") in procedure FUN_LOAD_DIRECTORY_COMMODITY of Module DOCS_MOD")

End Function

  Ответить  
 
 автор: час   (16.02.2011 в 22:38)   личное сообщение
 
 



Public Function FUN_TABLE_IMPORT_ODS(STR_TABLE_NAME As String, STR_CONNECTION As Connection)
' переброс таблицы STR_TABLE_NAME  в  файл OpenOffice
Dim FIEL As ADODB.Field         ' поле
Dim FIEL1 As ADODB.Field        ' поле
Dim rst2 As ADODB.Recordset     ' набор записей
Dim STROKA_ods As Integer
Dim KOLONKA_ods As Integer
Dim OpenParams()

'____
On Error GoTo FUN_TABLE_IMPORT_ODS_Error
'----------------------------------------------------------------------------------------------------------------------------------------------------------------

' создаём путь к создаваемому файлу
GLB_PATCH_EXPORT_DOCS = FUN_Patch_File(GLB_PATCH_EXPORT, STR_TABLE_NAME & ".ods")
' если таковой имеется удаляем
If FUN_FILE_YES_NO(GLB_PATCH_EXPORT_DOCS) = True Then
 FUN_DELETE_FILE_NAME (GLB_PATCH_EXPORT_DOCS)
End If
GLB_PATCH_EXPORT_DOCS = ConvertToUrl(GLB_PATCH_EXPORT_DOCS)

'создаем новый ServiceManager
Call FUN_Connect_OOO
' создаем новую книгу OpenOffice.org Calc
Set OOO_Document = OOO_Desktop.loadComponentFromURL("private:factory/scalc", "_blank", 0, OpenParams)

'получаем ссылку на первый лист новой книги
Set OOO_Sheet = OOO_Document.getSheets().getByIndex(0)
' переименуем лист, в который мы выводили данные
OOO_Sheet.Name = STR_TABLE_NAME
' получим индекс листа
OOO_Index_Sheet = OOO_findSheetIndex(OOO_Document, STR_TABLE_NAME)
' получим ссылку на лист
Set OOO_Sheet = OOO_Document.getSheets().getByIndex(OOO_Index_Sheet)

Set rst2 = New ADODB.Recordset  ' набор записей
rst2.Open "SELECT " & STR_TABLE_NAME & ".* FROM " & STR_TABLE_NAME, STR_CONNECTION, adOpenKeyset, adLockOptimistic
If rst2.EOF = False Then ' если таблица (rst2) не пуста перенос
rst2.MoveFirst
STROKA_ods = 0
KOLONKA_ods = 0
For Each FIEL In rst2.Fields
 Call FUN_IN_DOCS(KOLONKA_ods, STROKA_ods, NZVB(FIEL.Properties(0)), 2)
'Debug.Print cat.GetObjectOwner(STR_TABLE_NAME, adPermObjColumn)
 KOLONKA_ods = KOLONKA_ods + 1
Next FIEL

STROKA_ods = 1
KOLONKA_ods = 0

    
    Do While Not rst2.EOF           ' заполняем
        For Each FIEL1 In rst2.Fields        'значения
        If NZVB(FIEL1) <> "" Then
        Call FUN_IN_DOCS(KOLONKA_ods, STROKA_ods, CStr(FIEL1), 2)
'        Else
'        Call FUN_IN_DOCS(KOLONKA_ods, STROKA_ods, "-----", 2)
        End If
        KOLONKA_ods = KOLONKA_ods + 1
        Next FIEL1
    STROKA_ods = STROKA_ods + 1
    KOLONKA_ods = 0
    rst2.MoveNext
    Loop
 End If
rst2.Close
Set rst2 = Nothing
'
''сохраняем созданную книгу в формате
''Электронной таблицы OpenDokument GLB_PATCH_EXPORT_DOCS
'
''сохраняем созданную книгу
'Call OOO_Document.storeToURL(GLB_PATCH_EXPORT_DOCS, OpenParams)
''сохраняем созданную книгу в формате PDF
'''в корне диска С: с именем SampleOOo.PDF
''Set prop(0) = MakePropertyValue("FilterName", "calc_pdf_Export")
''Call oBook.storeToURL(GLB_PATCH_EXPORT_DOCS, prop)
''закрываем созданную книгу
'Call OOO_Document.Close(False)
'
'Set OOO_Document = Nothing
'Set OOO_Sheet = Nothing
'Set OOO_Desktop = Nothing
'Set OpenOffice = Nothing
''Set OOO_Document = OOO_Desktop.loadComponentFromURL(GLB_PATCH_EXPORT_DOCS, "_default", 0, OpenParams)
''Открываем только что сохраненную книгу
'Call FUN_OOO_OPEN_BOOCK(GLB_PATCH_EXPORT_DOCS)


'----------------------------------------------------------------------------------------------------------------------------------------------------------------
On Error GoTo 0
Exit Function
FUN_TABLE_IMPORT_ODS_Error:
Error_String = Err.Description
Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Error.txt"), Now() & " _модуль " & "TABLE_MOD" & " _процедура " & "FUN_TABLE_IMPORT_ODS" & " ..ошибка." & Error_String)
'_______END_______END_______END_______END_______END_______END_______END

End Function



  Ответить  
 
 автор: ДрЮня   (17.02.2011 в 09:56)   личное сообщение
 
 

Таки, пока хватит,
нужно осмыслить и попробовать что-нибудь навоять.
:)

  Ответить  
 
 автор: час   (17.02.2011 в 10:34)   личное сообщение
 
 

тута не все используемые функции
FUN_IN_DOCS - например
если какая нужна - пиши..... выложу.

  Ответить  
 
 автор: ДрЮня   (19.02.2011 в 21:14)   личное сообщение
 
 

В продолжение темы (osmor, час или кто еще в теме...).
Как заставить работать в vba этот код
Никак не могу сообразить :(


Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress
Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
CellRangeAddress.Sheet = 0
CellRangeAddress.StartColumn = 1
CellRangeAddress.StartRow = 1
CellRangeAddress.EndColumn = 2
CellRangeAddress.EndRow = 2
CellAddress.Sheet = 0
CellAddress.Column = 0
CellAddress.Row = 5
Sheet.moveRange(CellAddress, CellRangeAddress)

  Ответить  
 
 автор: час   (19.02.2011 в 23:17)   личное сообщение
 
 

А че надо сделать ?
Вернее чё код должен делать?
А то пока одни указания диапазонов........ точнее даже точек тасазать........

  Ответить  
 
 автор: ДрЮня   (20.02.2011 в 00:59)   личное сообщение
 
 

Этот код вроде как должен удалить область ячеек
Не получается объявить это

Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim CellAddress As New com.sun.star.table.CellAddress

  Ответить  
 
 автор: час   (20.02.2011 в 11:41)   личное сообщение
 
 

функция:

Public Function FUN_CLEAR_Range(Str_Range As String)
' диапазон на этом листе
   On Error GoTo FUN_CLEAR_Range_Error
'----------------------------------------------------------------------------------
Set OOO_Range = OOO_Sheet.getCellRangeByName(Str_Range)
' очистка всех значений в диапазоне
OOO_Range.clearContents (1 Or 2 Or 4) 'FlagsVALUE = 1 FlagsDATETIME = 2 FlagsSTRING = 4

OOO_Range.Merge (False) ' объединить-true  разьединить - False ячейки диапазона
'----------------------------------------------------------------------------------
   On Error GoTo 0
   Exit Function
FUN_CLEAR_Range_Error:
Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Error.txt"), "Error " & Err.Number & " (" & Err.Description & ") in procedure FUN_CLEAR_Range of Module OOO_MOD")
End Function

  Ответить  
 
 автор: час   (20.02.2011 в 11:42)   личное сообщение
 
 

Вызов:


 ' очистить диапазон под новые данные
Call FUN_CLEAR_Range("A" & PP & ":J" & 41)


где PP - номер строки для ячейки А

  Ответить  
 
 автор: ДрЮня   (20.02.2011 в 13:06)   личное сообщение
5 Кб.
 
 

Не работает, будь она не ладна.
В VB выдает ошибку (см. картинку)
Чего-то не хватает....
Все объявления вроде как сделаны
Ломается на этой строке:
Set oRange = oSheet.getCellRangeByName(sRange)

  Ответить  
 
 автор: osmor   (21.02.2011 в 10:21)   личное сообщение
 
 

а на какую библиотеку ты ссылку ставишь что бы получить
New com.sun.star.table.CellRangeAddress
?

Кстати видел мой код про копирование листов? Работает?

  Ответить  
 
 автор: час   (21.02.2011 в 10:36)   личное сообщение
 
 

давай сначала
объявим переменные

Public OpenOffice As Object    ' сервис менеджер
Public OOO_Desktop As Object   ' рабочий стол
Public OOO_Document As Object  ' документ, книга
Public OOO_Sheet As Object     ' лист
Public OOO_Index_Sheet As Long ' индекс  листа
Public OOO_Range As Object     ' диапазон ячеек

  Ответить  
 
 автор: час   (21.02.2011 в 10:41)   личное сообщение
 
 


Public Function FUN_OOO_OPEN_BOOCK(STR_PATCH_DOCS As String)
'Функция открытия книги ' Спасибо Osmor_у, иначе ничего не вышло бы
   On Error GoTo FUN_OOO_OPEN_BOOCK_Error
'----------------------------------------------------------------------------------
On Error GoTo BLANK
Dim OpenParams()
     
Call FUN_Connect_OOO
   

' загрузить открыть документ        ("file:///c:/dev/ooo/test.doc", "_blank", 0, arg())
Set OOO_Document = OOO_Desktop.loadComponentFromURL(STR_PATCH_DOCS, "_default", 0, OpenParams)
Exit Function
BLANK:
FUN_Connect_OOO
Set OOO_Document = OOO_Desktop.loadComponentFromURL(STR_PATCH_DOCS, "_blank", 0, OpenParams)
'----------------------------------------------------------------------------------
   On Error GoTo 0
   Exit Function
FUN_OOO_OPEN_BOOCK_Error:
Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Error.txt"), "Error " & Err.Number & " (" & Err.Description & ") in procedure FUN_OOO_OPEN_BOOCK of Module OOO_MOD")

End Function

  Ответить  
 
 автор: час   (21.02.2011 в 10:42)   личное сообщение
 
 



Public Function FUN_Connect_OOO() As Boolean
' подключение

FUN_Connect_OOO = True
On Error GoTo FUN_Connect_OOO_Error
'--------------------------------------------------------------------------------------------------------------------------------------------------------

Set OpenOffice = CreateObject("com.sun.star.ServiceManager")
Set OOO_Desktop = OpenOffice.createInstance("com.sun.star.frame.Desktop") '            Set OOoIntrospection = CreateUnoService("com.sun.star.beans.Introspection")
       
'----------------------------------------------------------------------------------------------------------------------------------------------------------------
On Error GoTo 0
Exit Function
FUN_Connect_OOO_Error:
FUN_Connect_OOO = False
Set OpenOffice = Nothing

Error_String = Err.Description
Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Error.txt"), Now() & " _модуль " & "OOO_MOD" & " _процедура " & "FUN_Connect_OOO" & " ..ошибка." & Error_String)

  
End Function

  Ответить  
 
 автор: час   (21.02.2011 в 10:45)   личное сообщение
 
 

Конвертер пути
Иначе ООО не поймёт - где лист, какой путь..........


Public Function ConvertToUrl(strFile) As String
'конвертирует путь MS Windows в URL (RFC 1738)
   On Error GoTo ConvertToUrl_Error
'----------------------------------------------------------------------------------
    strFile = Replace(strFile, "\", "/")
'    strFile = Replace(strFile, ":", "|")
    strFile = Replace(strFile, " ", "%20")
    strFile = "file:///" + strFile
    ConvertToUrl = strFile
'"file:///C:/1.odt", "_blank", 0, NoArg)
'("file://localhost/C:\TEMP\Ostatki.xls", "_blank", 0, Массив);
'----------------------------------------------------------------------------------
   On Error GoTo 0
   Exit Function
ConvertToUrl_Error:
Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Error.txt"), "Error " & Err.Number & " (" & Err.Description & ") in procedure ConvertToUrl of Module OOO_MOD")
End Function


пример использованя
STR_PATH = ConvertToUrl(STR_PATH)

  Ответить  
 
 автор: час   (21.02.2011 в 10:48)   личное сообщение
 
 

и последняя для теста функцаЯ


Public Function FUN_IN_DOCS(MyCol, MyRow, MyText, str_Aligment)
' вставка в ячейку
   On Error GoTo FUN_IN_DOCS_Error
'----------------------------------------------------------------------------------
  Set OOO_Range = OOO_Sheet.getCellByPosition(MyCol, MyRow)
   OOO_Range.ParaAdjust = str_Aligment '3 ' слева2 справа1 центр3

   Select Case TypeName(MyText)
   Case "String"
      If Left(MyText, 1) = "=" Then
         OOO_Range.SetFormula MyText
      Else
         OOO_Range.setString MyText
      End If
   Case "Double", "Integer", "Long", "Currency", "Single"
      OOO_Range.SetValue MyText

   End Select


'----------------------------------------------------------------------------------
   On Error GoTo 0
   Exit Function
FUN_IN_DOCS_Error:
Call FUN_IN_TXT(FUN_Patch_File(App.Path, "Error.txt"), "Error " & Err.Number & " (" & Err.Description & ") in procedure FUN_IN_DOCS of Module OOO_MOD")

End Function
'

  Ответить  
 
 автор: час   (25.02.2011 в 15:36)   личное сообщение
 
 

http://am.rusimport.ru/MsAccess/topic.aspx?id=737

  Ответить  
 
 автор: kot_k_k   (25.02.2011 в 15:42)   личное сообщение
 
 

и з в р а щ е н ц ы

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList