Boa noite.
Tenho uma planilha no libreoffice que insiro alguns dados e inclusive faz alguns calculos.
Tenho uma macro que é chamada através de um botão, que abre um documento modelo de texto chamado “modelo.ott”, e pega campos da planilha e substitui por expressoes de mesmo nome no arquivo de texto, as quais estão entre os simbolos “<<” e “>>”.
Essa macro tem funcionado no LIBREOFFICE WINDOWS muito bem, e tem me ajudado a gerar automaticamente documentos por mais de 4 anos.
Ao que parece a API “com.sun.star.ServiceManager” só roda no windows.
Tenho tentado encontrar uma solução para converter a macro para que ela rode em linux, ou até mac.
Só falta isso para que eu fique livre.
Alguém usa uma solução parecida que roda no linux, ou pode me dar uma referência para reescrever a macro?
Obrigado.
Luiz Carlos de Arruda Jr.
A macro resumida é essa:
Sub completaDocumento(enderecoWeb as String)
'Variaveis do Calc
Dim oDocCalc
Dim oSheets
Dim oSheet
Dim oCell
Dim val
DocCalc = ThisComponent
oSheets = oDocCalc.Sheets
'Variaveis do Write
Dim oSM 'Root object for accessing OpenOffice from VB
Dim oDesk, oDoc As Object 'First objects from the API
Dim arg() 'Ignore it for the moment !
Dim mmerge As Object
'Instanciate OOo : this line is mandatory with VB for OOo API
Set oSM = CreateObject("com.sun.star.ServiceManager")
'Create the first and most important service
Set oDesk = oSM.createInstance("com.sun.star.frame.Desktop")
'Create a new doc
Set oDoc = oDesk.LoadComponentFromUrl("file:///C:/modelo.ott", "_blank", 0, arg())
' jon code
Dim objText As Object, objCursor As Object
Set objText = oDoc.GetText
Set objCursor = objText.createTextCursor
if oSheets.hasbyName("Folha de Rosto") then
oSheet = oSheets.getbyName("Folha de Rosto")
'define objetos de find/replace
Dim oSrch As Object
Set oSrch = oDoc.createReplaceDescriptor
' colocar aqui as substituicoes
oCell = oSheet.getCellRangeByName("fr_datacalculo") 'FR_DATACALCULO
oSrch.setSearchString ("<<FR_DATACALCULO>>")
oSrch.setReplaceString (oCell.getString())
oDoc.replaceAll(oSrch)
oCell = oSheet.getCellRangeByName("fr_contratante") 'FR_CONTRATANTE
oSrch.setSearchString ("<<FR_CONTRATANTE>>")
oSrch.setReplaceString (oCell.getString())
oDoc.replaceAll(oSrch)
oCell = oSheet.getCellRangeByName("fr_contratantequalificado") 'FR_CONTRATANTEQUALIFICADO
oSrch.setSearchString ("<<FR_CONTRATANTEQUALIFICADO>>")
oSrch.setReplaceString (oCell.getString())
oDoc.replaceAll(oSrch)
oCell = oSheet.getCellRangeByName("fr_emailcontratante") 'FR_EMAILCONTRATANTE
oSrch.setSearchString ("<<FR_EMAILCONTRATANTE>>")
oSrch.setReplaceString (oCell.getString())
oDoc.replaceAll(oSrch)
oCell = oSheet.getCellRangeByName("fr_contratado") 'FR_CONTRATADO
oSrch.setSearchString ("<<FR_CONTRATADO>>")
oSrch.setReplaceString (oCell.getString())
oDoc.replaceAll(oSrch)
oCell = oSheet.getCellRangeByName("fr_contratadoqualificado") 'FR_CONTRATADOQUALIFICADO
oSrch.setSearchString ("<<FR_CONTRATADOQUALIFICADO>>")
oSrch.setReplaceString (oCell.getString())
oDoc.replaceAll(oSrch)
end if
Set oDoc = Nothing
End Sub
.