Página 1 de 1

[RESUELTO] Como cerrar mjs de error o diálogos con OOOBasic

Publicado: Mié Nov 03, 2021 4:56 pm
por Joseph_Cordon
Buen día a todos, disculpen la molestia, tengo un pequeño problema...

He creado 2 script/código/Macro en OOO Basic: 1. EliminarHoja: Para eliminar Hoja "Info" del archivo adjunto "Reporte_Detallado.xls" y 2. Xls_to_csv: Para convertir el mismo archivo "Reporte_Detallado.xls" a formato .csv; pero tengo el problema que cuando los ejecuto, OpenOffice abre un diálogo donde, en el primer caso me consulta si en verdad deseo eliminar la hoja, como no lo logre agregar a la macro para cerrar ese diálogo de manera automática, creé el 2do. script "xls_to_csv", donde en este caso me advierte mediante otro diálogo que solo se convirtió la primera hoja a csv.

Los scripts si terminan funcionando pero hasta que le doy click de forma manual a los diálogos de "advertencia", lo cual, quiero agregar a los script/macros pero no he hallado cómo. He visto en este foro como crean un objeto como el cuadro de diálogo y luego se cierra con .dispose() o .endExecute() pero son diálogos que los mismos usuarios crean, en mi caso, son cuadros de diálogo que están por default en OpenOffice, no los cree yo. Si me pudieran apoyar, les agradecería mucho. Mi OpenOffice es versión 4.1.7 y el SO es W10 Pro

Les adjunto el código de ambos script/macros:
EliminarHoja

Código: Seleccionar todo

'URL_1 = WScript.Arguments.Item(0)
URL_1 = "C:\Users\joseph.cordon"
URL_1 = "file:///"&CStr(URL_1)&"\Downloads\Reporte_Detallado.xlsx"


'Cargar los objetos Open Office: Service Manager, Dispatcher y Desktop 
Set OOServiceManager = CreateObject("com.sun.star.ServiceManager")
Set OODispatcher = OOServiceManager.CreateInstance("com.sun.star.frame.DispatchHelper")
Set OODesktop = OOServiceManager.CreateInstance("com.sun.star.frame.Desktop")


'Cargar archivo descargado en formato .xls
Dim args()
Set OOSpreadSheet = OODesktop.loadComponentFromURL(URL_1, "_default", 0, args)


'Argumentos
dim args1(0) 
Set args1(0) = OOServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")

args1(0).Name = "Nr"
args1(0).Value = 2

'Mover a siguiente hoja y eliminar
call OODispatcher.executeDispatch(OOSpreadSheet.CurrentController.Frame, ".uno:JumpToTable", "", 0, args1)
call OODispatcher.executeDispatch(OOSpreadSheet.CurrentController.Frame, ".uno:Remove", "", 0, Array())

'Cerrar archivo
OOSpreadSheet.close(true)
'OOServiceManager.dispose()
OODesktop.terminate
xls_to_csv

Código: Seleccionar todo

URL_1 = WScript.Arguments.Item(0)
'URL_1 = "C:\Users\joseph.cordon"
URL_1 = "file:///"&CStr(URL_1)&"\Downloads\Reporte_Detallado.xlsx"


'Cargar los objetos Open Office: Service Manager, Dispatcher y Desktop 
Set OOServiceManager = CreateObject("com.sun.star.ServiceManager")
Set OODispatcher = OOServiceManager.CreateInstance("com.sun.star.frame.DispatchHelper")
Set OODesktop = OOServiceManager.CreateInstance("com.sun.star.frame.Desktop")


'Cargar archivo descargado en formato .xls
Dim args()
Set OOSpreadSheet = OODesktop.loadComponentFromURL(URL_1, "_default", 0, args)


'Argumentos de guardado csv
dim args1(2) 
Set args1(0) = OOServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Set args1(1) = OOServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Set args1(2) = OOServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")

args1(0).Name = "URL"
args1(0).Value = "file:///C:/RPA/Reportediario.csv"
args1(1).Name = "FilterName"
args1(1).Value = "Text - txt - csv (StarCalc)"
args1(2).Name = "FilterOptions"
args1(2).Value = "44,34,ANSI,1,,0,false,true,true"

'Guardar como csv
call OODispatcher.executeDispatch(OOSpreadSheet.CurrentController.Frame, ".uno:SaveAs", "", 0, args1)

'Cerrar archivo
OOSpreadSheet.close(true)
'OOServiceManager.dispose()
OODesktop.terminate

Re: Como cerrar mensajes de error o diálogos con OOO Basic

Publicado: Mié Nov 03, 2021 6:40 pm
por Neftali R
Creo que en la guía de supervivencia en algún lugar dice algo de "Una pregunta por publicación" o algo parecido, aquí tienes dos preguntas.

Puedo responderte la pregunta de cómo eliminar una hoja de Cacl sin que aparezca el mensaje de error y es súper simple, lo puedes hacer un una solo línea de código.

Código: Seleccionar todo

ThisComponent.getSheets.removeByName("Info")
Puedes hacer un par de verificaciones antes de ejecutar esa línea por seguridad.

Código: Seleccionar todo

If ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
	If ThisComponent.getSheets.hasByName("Info") Then ThisComponent.getSheets.removeByName("Info")
End If
Y con eso el código no debería saltarte ningún error.

En cuanto a la segunda pregunta, conozco un método para "escribir" un documento .csv y llenarlo con la información que esté en cierto rango de un archivo calc, y de hecho ya lo publiqué en un mensaje anterior, dejame y te lo comparto.
Escribir un documento .csv con la información de un archivo de Cacl

PD: Me parece un poco extraño tu manera de codificar OOBasic, estas escribiendo el código desde un lugar diferente al IDE de OpenOffice o algo parecido?

Re: Como cerrar mensajes de error o diálogos con OOO Basic

Publicado: Mié Nov 03, 2021 7:20 pm
por FJCC-ES
Si es necesario cargar el documento antes de eliminar la hoja:

Código: Seleccionar todo

URL_1 = "C:\Users\joseph.cordon"
URL_1 = "file:///"&CStr(URL_1)&"\Downloads\Reporte_Detallado.xlsx"
OOSpreadSheet = StarDesktop.loadComponentFromURL(URL_1, "_default", 0, Array())
oHojas = OOSpreadSheet.Sheets
oHojas.removeByName("Info")

Re: Como cerrar mensajes de error o diálogos con OOO Basic

Publicado: Jue Nov 04, 2021 7:10 am
por Joseph_Cordon
¡Hola! ¡Muchas gracias a ambos por sus respuestas! He resuelto mi problema con la solución de FJCC-ES; básicamente solo agregué la instrucción para borrar la hoja "Info" sin que me aparezca algún mensaje de advertencia, para luego, ejecutar la conversión de xls a csv.

Adjunto el script/código con la solución a mi problema:

Código: Seleccionar todo

'Script para conversión de archivos .xls a archivos .csv

URL_1 = "C:\Users\joseph.cordon"
URL_1 = "file:///"&CStr(URL_1)&"\Downloads\Reporte_Detallado.xls"


'Cargar los objetos Open Office: Service Manager, Dispatcher y Desktop 
Set OOServiceManager = CreateObject("com.sun.star.ServiceManager")
Set OODispatcher = OOServiceManager.CreateInstance("com.sun.star.frame.DispatchHelper")
Set OODesktop = OOServiceManager.CreateInstance("com.sun.star.frame.Desktop")
Set OOSpreadSheet = OODesktop.loadComponentFromURL(URL_1, "_default", 0, Array())
Set oHojas = OOSpreadSheet.Sheets

'Eliminar Hoja Info
oHojas.removeByName("Info")

'Argumentos de guardado csv
dim args1(2) 
Set args1(0) = OOServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Set args1(1) = OOServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Set args1(2) = OOServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")

args1(0).Name = "URL"
args1(0).Value = "file:///C:/RPA/G002%20CreditosTemporales/Reportediario.csv"
args1(1).Name = "FilterName"
args1(1).Value = "Text - txt - csv (StarCalc)"
args1(2).Name = "FilterOptions"
args1(2).Value = "44,34,ANSI,1,,0,false,true,true"

'Guardar como csv
call OODispatcher.executeDispatch(OOSpreadSheet.CurrentController.Frame, ".uno:SaveAs", "", 0, args1)

'Cerrar archivo
OOSpreadSheet.close(true)
OODesktop.terminate