Macro para pasar datos de calc a writer

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Augusto_1977
Mensajes: 2
Registrado: Mar Abr 30, 2019 11:46 am

Macro para pasar datos de calc a writer

Mensaje por Augusto_1977 »

Buenos días.

Mi nombre es Augusto y escribo desde Galicia, España.

Antes de nada agradecer el esfuerzo de todos los que participan en este foro por compartir sus conocimientos, que me han servido de ayuda en mis proyectos.
Hago esta consulta ya que después de buscar en el foro no conseguí dar con la forma de resolver mi problema que es el siguiente:

En mi trabajo realizo unos informes en el que se repiten una serie de datos varias veces a lo largo del informe. Para resolver esto tengo una plantilla de writer en la que esos valores (como el nombre del cliente, la fecha, provincia, ayuntamiento, etc) los tengo escritos con campos genericos como D.Peticionario y después con la herramienta buscar y reemplazar cambiaba el campo por el valor correspondiente.
Buscando en vuestro foro di con la forma de agilizar el proceso y creé una macro que me va pidiendo los valores de todos los campos a reemplazar.

El caso es que todos esos valores los tengo que introducir también en calc ya que los utilizo para realizar una serie de cálculos y quería aprovechar que ya los tengo en calc para que tome los datos de las celdas correspondientes y las utilice en writer modificando un poco la macro que ya tengo:

Código: Seleccionar todo

sub reemplazar
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object


Dim nombrecliente As String

	nombrecliente = InputBox("Introducir nombre del peticionario")


rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(21) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.SearchFiltered"
args1(4).Value = false
args1(5).Name = "SearchItem.Backward"
args1(5).Value = false
args1(6).Name = "SearchItem.Pattern"
args1(6).Value = false
args1(7).Name = "SearchItem.Content"
args1(7).Value = false
args1(8).Name = "SearchItem.AsianOptions"
args1(8).Value = false
args1(9).Name = "SearchItem.AlgorithmType"
args1(9).Value = 0
args1(10).Name = "SearchItem.SearchFlags"
args1(10).Value = 65536
args1(11).Name = "SearchItem.SearchString"
args1(11).Value = "D. Peticionario"
args1(12).Name = "SearchItem.ReplaceString"
args1(12).Value = nombrecliente
args1(13).Name = "SearchItem.Locale"
args1(13).Value = 255
args1(14).Name = "SearchItem.ChangedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.DeletedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.InsertedChars"
args1(16).Value = 2
args1(17).Name = "SearchItem.TransliterateFlags"
args1(17).Value = 1280
args1(18).Name = "SearchItem.Command"
args1(18).Value = 3
args1(19).Name = "SearchItem.SearchFormatted"
args1(19).Value = false
args1(20).Name = "SearchItem.AlgorithmType2"
args1(20).Value = 1
args1(21).Name = "Quiet"
args1(21).Value = true

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

end sub


Lo que necesitaría ahora sería que de alguna manera el valor de nombrecliente lo tomase una celda concreta de la hoja calc en la que ya tengo los datos introducidos, y no se como hacer para poder utilizar la macro a la vez con calc y writer

Muchas gracias
Última edición por Augusto_1977 el Mié May 15, 2019 6:46 pm, editado 2 veces en total.
Libreoffice 5.2.7.2 sobre windows 10 Pro de 64 bits
Augusto_1977
Mensajes: 2
Registrado: Mar Abr 30, 2019 11:46 am

Re: Macro para pasar datos de calc a excell

Mensaje por Augusto_1977 »

Hola otra vez.

Me descargué el libro de Mauricio (muchas gracias por compartirlo) y en el encontré la solución que buscaba.
Al final lo dejé así:

Código: Seleccionar todo

sub Abrir_2p_reemplazar

Dim oHojaActiva As Object
Dim oCelda As Object
Dim nombrecliente As String


oHojaActiva = ThisComponent.getCurrentController.getActiveSheet()
oCelda = oHojaActiva.getCellRangeByName( "B3" )
nombrecliente= oCelda.getString()


Dim sRuta As String
Dim mOpciones(0) As New "com.sun.star.beans.PropertyValue"
Dim oDoc As Object

mOpciones(0).Name = "MacroExecutionMode"
mOpciones(0).Value = 4

sRuta = ConvertToUrl( "G:\Escritorio\PLANILLAS\Plantilla macro.ott" )
oDoc = StarDesktop.loadComponentFromURL( sRuta, "_blank", 0, mOpciones() )
'AQUI va todo el código que quieras para manipular el archivo



dim document   as object
dim dispatcher as object




rem ----------------------------------------------------------------------
rem get access to the document

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(21) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.StyleFamily"
args1(0).Value = 2
args1(1).Name = "SearchItem.CellType"
args1(1).Value = 0
args1(2).Name = "SearchItem.RowDirection"
args1(2).Value = true
args1(3).Name = "SearchItem.AllTables"
args1(3).Value = false
args1(4).Name = "SearchItem.SearchFiltered"
args1(4).Value = false
args1(5).Name = "SearchItem.Backward"
args1(5).Value = false
args1(6).Name = "SearchItem.Pattern"
args1(6).Value = false
args1(7).Name = "SearchItem.Content"
args1(7).Value = false
args1(8).Name = "SearchItem.AsianOptions"
args1(8).Value = false
args1(9).Name = "SearchItem.AlgorithmType"
args1(9).Value = 0
args1(10).Name = "SearchItem.SearchFlags"
args1(10).Value = 65536
args1(11).Name = "SearchItem.SearchString"
args1(11).Value = "D. Peticionario"
args1(12).Name = "SearchItem.ReplaceString"
args1(12).Value = nombrecliente
args1(13).Name = "SearchItem.Locale"
args1(13).Value = 255
args1(14).Name = "SearchItem.ChangedChars"
args1(14).Value = 2
args1(15).Name = "SearchItem.DeletedChars"
args1(15).Value = 2
args1(16).Name = "SearchItem.InsertedChars"
args1(16).Value = 2
args1(17).Name = "SearchItem.TransliterateFlags"
args1(17).Value = 1280
args1(18).Name = "SearchItem.Command"
args1(18).Value = 3
args1(19).Name = "SearchItem.SearchFormatted"
args1(19).Value = false
args1(20).Name = "SearchItem.AlgorithmType2"
args1(20).Value = 1
args1(21).Name = "Quiet"
args1(21).Value = true

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())





End Sub


Ya la probé y funciona correctamente, pero al terminar me salta el siguiente mensaje de error que no se a que se debe ya que en realidad ejecuta la macro por completo.
Tampoco me resulta demasiado problematico porque simplemente le doy a aceptar y cierro el editor de macros pero a ser posible me gustaría dejarla bien rematada
¿Me falta algo en el código que se me escapa?
Adjuntos
error macro.JPG
error macro.JPG (82.26 KiB) Visto 2866 veces
Libreoffice 5.2.7.2 sobre windows 10 Pro de 64 bits
Responder