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

Desarrollo de Macros y programación en UNO, usar las API, llamar programas externos...
Responder
Joseph_Cordon
Mensajes: 6
Registrado: Mar Abr 17, 2018 3:56 pm

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

Mensaje 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
Adjuntos
Reporte_Detallado.xls
(19.5 KiB) Descargado 162 veces
Última edición por Joseph_Cordon el Jue Nov 04, 2021 7:12 am, editado 1 vez en total.
Versi??n OpenOffice 4.1.1 en Windows 7 Professional
Neftali R
Mensajes: 169
Registrado: Mar Jun 15, 2021 12:48 pm
Ubicación: Venezuela

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

Mensaje 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?
LibreOffice 7.2.6.2 | Windows 7 Ultimate
FJCC-ES
Mensajes: 873
Registrado: Mié Mar 25, 2009 1:19 am
Ubicación: Colorado, USA

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

Mensaje 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")
Joseph_Cordon
Mensajes: 6
Registrado: Mar Abr 17, 2018 3:56 pm

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

Mensaje 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
Versi??n OpenOffice 4.1.1 en Windows 7 Professional
Responder