EasyDev Documentation Publicación 2.0.0
Mauricio Baeza
25 de November de 2015
Índice general
1. Introducción 1.1. Instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Probando la herramienta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3 3 4
2. Herramientas para depuración 2.1. Mostrar información en shell . . . . 2.2. Guardar información en un archivo 2.3. msgbox Especial . . . . . . . . . . 2.4. Llamar a MRI . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
5 5 7 7 8
3. Herramientas 3.1. Mostrar información del PC 3.2. Hacer una pregunta . . . . . 3.3. Reemplazar cadenas . . . . 3.4. Formato . . . . . . . . . . . 3.5. Archivos y directorios . . . 3.6. Ejecutar . . . . . . . . . . . 3.7. Configuración . . . . . . . 3.8. Portapapeles . . . . . . . . 3.9. Tiempo Unix . . . . . . . . 3.10. Llamar macros . . . . . . . 3.11. Timer . . . . . . . . . . . . 3.12. Exportar a CSV . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
11 11 11 12 12 13 15 15 15 16 16 17 17
4. Enviando correo 4.1. Enviar un correo y esperar la respuesta . . . . . . 4.2. Enviar correo y no esperar respuesta . . . . . . . . 4.3. Enviar correo con copia (CC) y copia oculta (BCC) 4.4. Enviar correo con archivos anexos . . . . . . . . . 4.5. Enviar correo y guardar mensaje . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
19 19 19 20 21 21
5. Matrices 5.1. Agregar . . . . 5.2. Borrar . . . . . 5.3. Extender . . . 5.4. Multiplicar . . 5.5. Valores únicos 5.6. Reversa . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
23 23 23 23 23 23 24
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
I
5.7. 5.8. 5.9. 5.10. 5.11. 5.12. 5.13. 5.14. 5.15. 5.16. 5.17. 5.18.
Insertar . . . . . . . . . . . . Remover . . . . . . . . . . . Largo . . . . . . . . . . . . . Contar . . . . . . . . . . . . Índice . . . . . . . . . . . . . Máximo, Mínimo y Promedio Suma . . . . . . . . . . . . . Existe . . . . . . . . . . . . . Igual . . . . . . . . . . . . . Rebanadas . . . . . . . . . . Ordenar . . . . . . . . . . . . Operaciones . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
24 24 24 24 25 25 25 25 25 25 26 27
6. Documentos 6.1. Nuevo . . . . . . . . 6.2. Obtener documento 6.3. Tipo de documento . 6.4. Obtener documentos 6.5. Abrir . . . . . . . . 6.6. Activar . . . . . . . 6.7. Barra de estado . . . 6.8. Exportar a PDF . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
29 29 29 30 30 30 30 31 31
7. Calc 7.1. 7.2. 7.3. 7.4. 7.5. 7.6. 7.7.
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
33 33 34 35 35 36 36 37
8. Writer 8.1. Parrafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39 39
9. Bases de datos 9.1. ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41 41
10. Cuadros de diálogo 10.1. Crear diálogo . . . . . . . 10.2. Etiqueta con hipervínculo 10.3. Mapa de ruta . . . . . . . 10.4. Rejilla . . . . . . . . . .
43 43 43 44 45
Celdas . . . . . . . Rangos . . . . . . . Seleccionar un rango Región actual . . . . Ultima fila . . . . . Siguiente valor . . . Valor de celda . . .
11. Indíces y tablas
II
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
49
EasyDev Documentation, Publicación 2.0.0
Contenido:
Índice general
1
EasyDev Documentation, Publicación 2.0.0
2
Índice general
CAPÍTULO 1
Introducción
EasyDev puede ayudarte a desarrollar macros en LibreOffice.
1.1 Instalación Decarga la ultima versión desde GitHub. Abre LibreOffice Menú: Herramientas -> Administración de extensiones... Agregar...
3
EasyDev Documentation, Publicación 2.0.0
1.2 Probando la herramienta Sub Prueba() 'Creando el servicio util = createUnoService("org.universolibre.EasyDev") MsgBox util.VERSION End Sub
4
Capítulo 1. Introducción
CAPÍTULO 2
Herramientas para depuración
2.1 Mostrar información en shell Solo Linux Sub Debug() 'Crear servicio util = createUnoService("org.universolibre.EasyDev") util.debug("Prueba de depuración") End Sub
5
EasyDev Documentation, Publicación 2.0.0
En Windows, puedes abrir y guardar un nuevo documento con el nombre debug.odt y mostrar la información de depuración en este documento.
6
Capítulo 2. Herramientas para depuración
EasyDev Documentation, Publicación 2.0.0
2.2 Guardar información en un archivo Sub LogFile() util = createUnoService("org.universolibre.EasyDev") util.log("/home/USER/log.txt", util) End Sub
Automáticamente se agrega la fecha y hora. 2015-10-28 20:56:35 - EasyDev - 2015-10-28 20:56:41 - EasyDev -
2.3 msgbox Especial Mostrar cualquier información en un cuadro de mensaje como objectos y matrices. 2.2. Guardar información en un archivo
7
EasyDev Documentation, Publicación 2.0.0
Sub MessageBox() util = createUnoService("org.universolibre.EasyDev") util.msgbox("Información de depuración") 'Mostrar cualquier dato data = "Como texto" util.msgbox(data) 'Números' data = 12345 util.msgbox(data) 'Matrices' data = Array("Uno", 2) util.msgbox(data) util.msgbox(util) End Sub
2.4 Llamar a MRI MRI es la mejor extensión para instrospección de objetos para Apache OpenOffice y LibreOffice. Descargala e instalala. Llamala desde EasyDev. Sub CallMRI() util = createUnoService("org.universolibre.EasyDev") 'MRI es una gran extensión. util.mri(util) End Sub
8
Capítulo 2. Herramientas para depuración
EasyDev Documentation, Publicación 2.0.0
2.4. Llamar a MRI
9
EasyDev Documentation, Publicación 2.0.0
10
Capítulo 2. Herramientas para depuración
CAPÍTULO 3
Herramientas
3.1 Mostrar información del PC Sub ShowInfoPC() util = createUnoService("org.universolibre.EasyDev") 'Sistema operativo util.msgbox(util.OS) 'Nombre de la aplicación util.msgbox(util.APP_NAME) 'Versión de la aplicación util.msgbox(util.APP_VERSION) 'Lenguaje util.msgbox(util.LANGUAGE) 'Tamaño de la pantalla util.msgbox(util.getSizeScreen()) ' https://docs.python.org/3.3/library/platform.html ' nombre de usuario, ' nombre del pc ' nombre del SO, ' tipo de maquina, ' nombre del procesador ' Cadena de indentificación de la plataforma con la mayor cantidad de información posible util.msgbox(util.getInfoPC()) End Sub
3.2 Hacer una pregunta Sub Pregunta() util = createUnoService("org.universolibre.EasyDev") titulo = "Mi programa" mensage = "¿Es fácil Python?" res = util.question(titulo, mensaje)
11
EasyDev Documentation, Publicación 2.0.0
'Si pulsa SI, devuelve verdadero (True) util.msgbox(res) End Sub
3.3 Reemplazar cadenas Reemplazar una cadena con argumentos Sub RenderString() util = createUnoService("org.universolibre.EasyDev") 'Puedes usar una estructura NamedValue message = "Hola $data con $idioma, desde Basic 1!!" Dim data1(1) As New com.sun.star.beans.NamedValue data1(0).Name = "data" data1(0).Value = "Mundo" data1(1).Name = "idioma" data1(1).Value = "Python" message = util.render(message, data1) util.msgbox(message) 'Usando estructura PropertyValue message = "Hola $data con $idioma, desde Basic 2!!" Dim data2(1) As New com.sun.star.beans.PropertyValue data2(0).Name = "data" data2(0).Value = "Mundo" data2(1).Name = "idioma" data2(1).Value = "Python" message = util.render(message, data2) util.msgbox(message) 'Usando matrices message = "Hola $data con $idioma, desde Basic 3!!" data = Array( _ Array("data", "Mundo"), _ Array("idioma", "Python") _ ) message = util.render(message, data2) util.msgbox(message) End Sub
3.4 Formato Más información y ejemplos aquí. Sub FormatData() util = createUnoService("org.universolibre.EasyDev") MsgBox util.format("Hello {}", "World")
12
Capítulo 3. Herramientas
EasyDev Documentation, Publicación 2.0.0
MsgBox util.format("Hello {} from {}", Array("World", "PyUNO")) MsgBox util.format("Hello {1} from {0}", Array("World", "PyUNO")) MsgBox util.format("{:20}", Array("Left", "Center", "Rigth")) MsgBox util.format("{:_20}", Array("Left", "Center", "Rigth")) MsgBox util.format("{:d} {:f}", Array(100, 3.1416)) MsgBox util.format("{0:,.2f}", 123456789.2468) MsgBox util.format("Number {n1} y {n2}", Array(Array("n1", "one"), Array("n2", "two"))) MsgBox util.format("Number {n2} y {n1}", Array(Array("n1", "one"), Array("n2", "two"))) my_date = createUnoStruct("com.sun.star.util.Date") my_date.Day = 15 my_date.Month = 1 my_date.Year = 1974 MsgBox util.format("{:%d-%B-%Y}", my_date) my_date = createUnoStruct("com.sun.star.util.DateTime") my_date.Day = 15 my_date.Month = 1 my_date.Year = 1974 my_date.Hours = 13 my_date.Minutes = 30 MsgBox util.format("{:%Y-%b-%d %H:%M}", my_date) End Sub
3.5 Archivos y directorios Obtener una ruta desde configuración. Más información: XPathSettings. path = util.getPath("Temp") util.msgbox(path) path = util.getPath("Work") util.msgbox(path)
Obtener información de una ruta: 1. ruta base, 2. nombre del archivo, 3. nombre del archivo sin extensión, 4. extensión del archivo. data = util.getPathInfo("/home/USER/log.txt") util.msgbox(data)
Unir rutas
3.5. Archivos y directorios
13
EasyDev Documentation, Publicación 2.0.0
path = util.pathJoin(Array("/home", "USER", "Documents")) util.msgbox(path) path = util.pathJoin(Array("/home/USER/Documents", "..", "Picture")) util.msgbox(path)
Seleccionar directorio, de forma predeterminada, muestra la ruta de documentos del usuario folder = util.getFolder("") util.msgbox(folder) 'Se puede establecer otra ruta de inicio folder = util.getFolder("/home/USER") util.msgbox(folder)
Seleccionar un solo archivo sin filtros. file = util.getSelectedFiles("", False, Array()) util.msgbox(file)
Seleccionar multiples archivos sin filtros. files = util.getSelectedFiles("", True, Array()) util.msgbox(files)
Seleccionar multiples archivos con un filtro. filters = Array( _ Array("TXT", "*.txt"), _ Array("LOG", "*.log"), _ Array("CER | KEY", "*.cer;*.key") _ ) files = util.getSelectedFiles("", True, filters) util.msgbox(files)
Obtener todos los archivos de un directorio de forma recursiva. files = util.getFiles("/home/USER/Pictures", "") util.msgbox(files)
Obtener todos los archivos de un directorio de forma recursiva con un filtro. files = util.getFiles("/home/USER/Pictures", "jpg") util.msgbox(files) files = util.getFiles("/home/USER/Pictures", "png") util.msgbox(files)
Abrir un archivo y leer su contenido. data = util.fileOpen("/home/USER/log.txt", "r", False) util.msgbox(data)
Abrir un archivo regresando cada línea en una matriz. data = util.fileOpen("/home/USER/log.txt", "r", True) util.msgbox(data)
Guardar información en un nuevo archivo. data = "Hello World Python" util.fileSave("/home/USER/test.txt", "w", data) 'Verify
14
Capítulo 3. Herramientas
EasyDev Documentation, Publicación 2.0.0
data = util.fileOpen("/home/mau/test.txt", "r") util.msgbox(data)
Agregar información a un archivo data = "Hello World Python" & CHR(10) util.fileSave("/home/USER/test2.txt", "a", data) 'Verify data = util.fileOpen("/home/USER/test2.txt", "r") util.msgbox(data)
3.6 Ejecutar Ejecutar un comando y esperar la respuesta. res = util.execute(Array("ls","-la"), True) util.msgbox(res)
Ejecutar un comando y no esperar respuesta. util.execute(Array("gnome-calculator"), False)
3.7 Configuración Guadar un valor en el registro de configuración de LibreOffice, el valor se guarda de forma persistente. util.setConfig("DefaultMail", "
[email protected]") 'Get value from config value = util.getConfig("DefaultMail") util.msgbox(value)
Es posible guardar matrices. util.setConfig("Matriz", Array(1,2,3)) value = util.getConfig("Matriz") util.msgbox(value)
3.8 Portapapeles Obtener texto del portapapeles. value = util.getClipboard() util.msgbox(value)
Enviar texto al portapapeles. util.setClipboard("Hello World PyUNO!!") 'Verify value = util.getClipboard() util.msgbox(value)
3.6. Ejecutar
15
EasyDev Documentation, Publicación 2.0.0
3.9 Tiempo Unix Más información: https://en.wikipedia.org/wiki/Unix_time epoch = util.getEpoch() util.msgbox(epoch)
3.10 Llamar macros Más información: Scripting Framework Guarda la siguiente macro en: /home/USER/.config/libreoffice/4/user/Scripts/python/mymacros.py import uno import time def show_time(cell): cell.setString(time.strftime('%c')) time.sleep(3) return
Llamar a una macro Python (predeterminado) y esperar la respuesta. macro = createUnoStruct("org.universolibre.EasyDev.Macro") macro.Library = "mymacros" macro.Name = "show_time" cell = ThisComponent.CurrentSelection util.callMacro(macro, Array(cell))
Llamar a una macro Python y no esperar la respuesta. macro = createUnoStruct("org.universolibre.EasyDev.Macro") macro.Library = "mymacros" macro.Name = "show_time" macro.Thread = True cell = ThisComponent.CurrentSelection util.callMacro(macro, Array(cell))
Llamar a una macro en Basic macro = createUnoStruct("org.universolibre.EasyDev.Macro") macro.Library = "EasyDevLib" macro.Module = "Examples"
16
Capítulo 3. Herramientas
EasyDev Documentation, Publicación 2.0.0
macro.Name = "HelloWorld" macro.Language = "Basic" macro.Thread = False util.callMacro(macro, Array())
3.11 Timer Guarda la siguiente macro en: /home/USER/.config/libreoffice/4/user/Scripts/python/mymacros.py import uno import time def show_time(cell): cell.setString(time.strftime('%c')) return
timer(NOMBRE_TIMER, SEGUNDOS, MACRO, ARGUMENTOS) El nombre del timer es muy importante para que lo puedas detener. El timer siempre se ejecuta en otro hilo de proceso. util = createUnoService("org.universolibre.EasyDev") 'Make data macro macro = createUnoStruct("org.universolibre.EasyDev.Macro") macro.Library = "mymacros" macro.Name = "show_time" 'Arguments cell = ThisComponent.CurrentSelection 'Timer name "time" and wait one second util.timer("time", 1, macro, Array(cell))
Detener un timer por su nombre Sub StopTimer() util = createUnoService("org.universolibre.EasyDev") util.stopTimer("time") End Sub
3.12 Exportar a CSV Establece un rango con datos y seleccionalo.
3.11. Timer
17
EasyDev Documentation, Publicación 2.0.0
y esportarlo. util = createUnoService("org.universolibre.EasyDev") range = ThisComponent.CurrentSelection path = "/home/USER/test.csv" data = range.getDataArray() options = Array() util.exportCSV(path, data, options)
Cambiar opciones de exportación, más información en: https://docs.python.org/3.3/library/csv.html#csv.writer Dim options(0) As New com.sun.star.beans.NamedValue util = createUnoService("org.universolibre.EasyDev") range = ThisComponent.CurrentSelection path = "/home/USER/test.csv" data = range.getDataArray() options(0).Name = "delimiter" options(0).Value = "|" util.exportCSV(path, data, options)
18
Capítulo 3. Herramientas
CAPÍTULO 4
Enviando correo
4.1 Enviar un correo y esperar la respuesta Sub SendMail() util = createUnoService("org.universolibre.EasyDev") server = createUnoStruct("org.universolibre.EasyDev.SmtpServer") message = createUnoStruct("org.universolibre.EasyDev.EmailMessage") server.Name = "smtp.gmail.com" server.User = "
[email protected]" server.Password = "supersecret" server.Ssl = True temp = "Dear Madame: $name\n\nBest regards from $country" data = Array( _ Array("name", "Teresa"), _ Array("country", "México"), _ ) body = util.render(temp, data) message.To = "
[email protected]" message.Subject = "Email test" message.Body = body 'Send mail and wait response result = util.sendMail(server, message) If result Then MsgBox "Correo enviado" Else MsgBox "Error al enviar el correo" End If End Sub
4.2 Enviar correo y no esperar respuesta Sub SendMailNoWait() util = createUnoService("org.universolibre.EasyDev") server = createUnoStruct("org.universolibre.EasyDev.SmtpServer")
19
EasyDev Documentation, Publicación 2.0.0
message = createUnoStruct("org.universolibre.EasyDev.EmailMessage") server.Name = "smtp.gmail.com" server.User = "
[email protected]" server.Password = "supersecret" server.Ssl = True server.Thread = True 'Send in other thread temp = "Dear Madame: $name\n\nBest regards from $country" data = Array( _ Array("name", "Teresa"), _ Array("country", "México"), _ ) body = util.render(temp, data) message.To = "
[email protected]" message.Subject = "Email test" message.Body = body 'Enviar correo y no esperar respuesta util.sendMail(server, message) MsgBox "Send mail" End Sub
4.3 Enviar correo con copia (CC) y copia oculta (BCC) Sub SendMailNoWaitAndCCBCC() util = createUnoService("org.universolibre.EasyDev") server = createUnoStruct("org.universolibre.EasyDev.SmtpServer") message = createUnoStruct("org.universolibre.EasyDev.EmailMessage") server.Name = "smtp.gmail.com" server.User = "
[email protected]" server.Password = "supersecret" server.Ssl = True server.Thread = True 'Send in other thread temp = "Dear Madame: $name\n\nBest regards from $country" data = Array( _ Array("name", "Teresa"), _ Array("country", "México"), _ ) body = util.render(temp, data) message.To = "
[email protected]" message.Subject = "Email test" message.Body = body message.Cc = "
[email protected],
[email protected]" message.Bcc = "
[email protected],
[email protected]" 'Enviar correo y no esperar respuesta util.sendMail(server, message) MsgBox "Send mail"
20
Capítulo 4. Enviando correo
EasyDev Documentation, Publicación 2.0.0
End Sub
4.4 Enviar correo con archivos anexos Sub SendMailWithAttachment() util = createUnoService("org.universolibre.EasyDev") server = createUnoStruct("org.universolibre.EasyDev.SmtpServer") message = createUnoStruct("org.universolibre.EasyDev.EmailMessage") server.Name = "smtp.gmail.com" server.User = "
[email protected]" server.Password = "supersecret" server.Ssl = True server.Thread = True 'Send in other thread temp = "Dear Madame: $name\n\nBest regards from $country" data = Array( _ Array("name", "Teresa"), _ Array("country", "México"), _ ) body = util.render(temp, data) files = Array("/home/USER/Documents/pruebas.cer", "/home/USER/Documents/pruebas.key") message.To = "
[email protected]" message.Subject = "Email test" message.Body = body message.Files = files 'Enviar correo y no esperar respuesta util.sendMail(server, message) MsgBox "Send mail" End Sub
4.5 Enviar correo y guardar mensaje Si usas una ruta de Thunderbird, puedes ver el mensaje en una carpeta dentro de Thunderbird Prudencia: Siempre usa una carpeta separada dentro del árbol de carpetas de Thunderbird! Sub SendMailAndSave() util = createUnoService("org.universolibre.EasyDev") server = createUnoStruct("org.universolibre.EasyDev.SmtpServer") message = createUnoStruct("org.universolibre.EasyDev.EmailMessage") server.Name = "smtp.gmail.com" server.User = "
[email protected]" server.Password = "supersecret" server.Ssl = True
4.4. Enviar correo con archivos anexos
21
EasyDev Documentation, Publicación 2.0.0
server.Thread = True 'Send in other thread server.PathSave = "/home/USER/.thunderbird/cwfln0bi.default/Mail/Local Folders/Sent" temp = "Dear Madame: $name\n\nBest regards from $country" data = Array( _ Array("name", "Teresa"), _ Array("country", "México"), _ ) body = util.render(temp, data) files = Array("/home/USER/Documents/pruebas.cer") message.To = "
[email protected]" message.Subject = "Email test" message.Body = body message.Files = files message.Save = True 'Enviar correo y no esperar respuesta util.sendMail(server, message) MsgBox "Send mail" End Sub
22
Capítulo 4. Enviando correo
CAPÍTULO 5
Matrices
5.1 Agregar a = Array("Nikole","Scarlett","Monica","Naomi","Marion") a = util.append(a, "Sofia") util.msgbox( a )
5.2 Borrar a = util.delete(a, "Nikole") util.msgbox( a )
5.3 Extender a = Array("Nikole","Scarlett","Monica","Naomi","Marion") a2 = Array("Sofia", "Anita") a = util.extend(a, a2) util.msgbox( a )
5.4 Multiplicar a = Array("Nikole","Scarlett","Monica","Naomi","Marion") a = util.multi(a, 2) util.msgbox( a )
5.5 Valores únicos a = Array(1,2,"Two",3,3,3,4,4,4,4,5,5,5,5,5,"Uno","Uno") a = util.unique(a) util.msgbox( a )
23
EasyDev Documentation, Publicación 2.0.0
5.6 Reversa a = Array("Nikole","Scarlett","Monica","Naomi","Marion") a = util.reverse(a) util.msgbox( a )
5.7 Insertar Insertar un elemento en una posición. a = Array("Nikole","Scarlett","Monica","Naomi","Marion") a = util.insert(a, 2, "Mary") util.msgbox( a )
5.8 Remover Remover un elemento en una posición y regresar el elemento y la matriz a = Array(1,2,"Two",3,3,3,4,4,4,4,5,5,5,5,5,"Uno","Uno") data = util.pop(a, 2) util.msgbox( data(0) ) 'Array without element in pos util.msgbox( data(1) ) 'Element removed
Remover el primer elemento encontrado. a = Array(1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,"Uno","Uno") util.msgbox( util.remove(a, 5, False) )
Remover todos los elementos encontrados. util.msgbox( util.remove(a, 5, True) )
5.9 Largo a = Array(1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,"Uno","Uno") util.msgbox( util.len(a) )
5.10 Contar a = Array(1,2,2,3,3,3,4,4,4,4,5,5,5,5,5,"Uno","Uno") util.msgbox( util.count(a, 3) ) util.msgbox( util.count(a, 5) ) util.msgbox( util.count(a, "Uno") )
24
Capítulo 5. Matrices
EasyDev Documentation, Publicación 2.0.0
5.11 Índice a = Array("Nikole","Scarlett","Monica","Naomi","Marion") util.msgbox( util.index(a, "Naomi") ) util.msgbox( util.index(a, "Monica") )
5.12 Máximo, Mínimo y Promedio a = Array(1,2,3,4,5,6,7,8,9,10) util.msgbox( util.max(a) ) util.msgbox( util.min(a) ) util.msgbox( util.average(a) )
5.13 Suma a = Array(1,2,3,4,5,6,7,8,9,10) util.msgbox( util.sum(a) )
Solo se suman valores, el primer elemento es una candena. a = Array("10", 1,2,3,4,5,6,7,8,9,10, "One", "Two") util.msgbox( util.sum(a) )
5.14 Existe Si un valor existe en la matriz. a = Array(1,2,3,4,5,"One","Seven",9,10) util.msgbox( util.exists(a, "One") ) util.msgbox( util.exists(a, "Two") )
5.15 Igual Si una matriz es igual a una segunda. a1 = Array(1,2,3) : a2 = Array(1,2,3) util.msgbox( util.equal(a1, a2) ) a1 = Array(1,"Dos",3) : a2 = Array(1,2,"Tres") util.msgbox( util.equal(a1, a2) )
5.16 Rebanadas Copiar
5.11. Índice
25
EasyDev Documentation, Publicación 2.0.0
a = Array("Nikole","Scarlett","Monica","Naomi","Marion","Sofia","Anita") a2 = util.slice(a, "[:]") util.msgbox( a2 )
Primeros dos (n) elementos. a2 = util.slice(a, "[:2]") util.msgbox( a2 )
Ultimos dos (n) elementos. a2 = util.slice(a, "[-2:]") util.msgbox( a2 )
Rango a2 = util.slice(a, "[2:-2]") util.msgbox( a2 ) a2 = util.slice(a, "[::2]") util.msgbox( a2 ) a2 = util.slice(a, "[1::2]") util.msgbox( a2 )
Reversa a2 = util.slice(a, "[::-1]") util.msgbox( a2 )
5.17 Ordenar Ordenar una matriz unidimensional. a = Array("Nikole","Scarlett","Monica","Naomi","Marion","Sofia","Anita") a = util.sorted(a, 0) util.msgbox( a )
Ordenar una matriz multidimensional. a = Array( _ Array(1, 1, 3, Array(1, 2, 3, Array(1, 3, 3, Array(1, 4, 3, Array(1, 5, 3, ) a = util.sorted(a, util.msgbox( a ) a = util.sorted(a, util.msgbox( a ) a = util.sorted(a, util.msgbox( a ) a = util.sorted(a, util.msgbox( a ) a = util.sorted(a, util.msgbox( a )
26
"a", "z", "g", "e", "M",
56), _ 43), _ 78), _ 32), _ 89) _
0) 1) 2) 3) 4)
Capítulo 5. Matrices
EasyDev Documentation, Publicación 2.0.0
Regresar una columna de una matriz multidimensional util.msgbox(util.getColumn(a, 1))
5.18 Operaciones Sub ArraysOperations() util = createUnoService("org.universolibre.EasyDev") a1 = Array(1,2,3,4,5) : a2 = Array(3,4,5,6,7,8) a = util.union(a1, a2) util.msgbox( a ) a = util.intersection(a1, a2) util.msgbox( a ) a = util.difference(a1, a2) util.msgbox( a ) a = util.symmetricDifference(a1, a2) util.msgbox( a ) End Sub
5.18. Operaciones
27
EasyDev Documentation, Publicación 2.0.0
28
Capítulo 5. Matrices
CAPÍTULO 6
Documentos
6.1 Nuevo Más información: Component Loader Sub NewDoc() 'Create new doc util = createUnoService("org.universolibre.EasyDev") 'Default Calc doc = util.newDoc("") End Sub
Otros posibles valores: swriter, simpress, sdraw, smath doc = util.newDoc("sdraw")
Para documentos de Base. path_db = "/home/USER/dbtest.odb" db = util.newDB(path_db)
6.2 Obtener documento Actual Importante: El documento actual puede ser el IDE Basic doc1 = util.getDoc("") MsgBox doc1.Title
Obtener documento por título, si no se encuentra, regresa Vacio doc2 = util.getDoc("Name_doc.odt") util.msgbox(doc2)
29
EasyDev Documentation, Publicación 2.0.0
6.3 Tipo de documento Valores de retorno: calc, writer, impress, draw, math, base, ide doc1 = util.newDoc("sdraw") MsgBox util.getTypeDoc(doc1) doc2 = util.newDoc("swriter") MsgBox util.getTypeDoc(doc2)
6.4 Obtener documentos Obtener todos los documentos abiertos. docs = util.getDocs() MsgBox util.format("{} Open documents", util.len(docs))
6.5 Abrir Más información y opciones: Component Loader Media Descriptor Abrir documento por ruta Dim options1(0) As New com.sun.star.beans.NamedValue util = createUnoService("org.universolibre.EasyDev") path = "/home/USER/Plantilla.ods" options = Array() doc = util.openDoc(path, options)
Abrir como una plantilla. options1(0).Name = "AsTemplate" options1(0).Value = True path = "/home/USER/Plantilla.ods" doc = util.openDoc(path, options1)
Abrir oculto. options1(0).Name = "Hidden" options1(0).Value = True path = "/home/USER/Plantilla.ods" doc = util.openDoc(path, options1) MsgBox "Close doc" doc.dispose()
6.6 Activar Enviar el foco a un documento. 30
Capítulo 6. Documentos
EasyDev Documentation, Publicación 2.0.0
doc1 = util.newDoc("") doc2 = util.newDoc("swriter") wait(1000) util.setFocus(doc1)
6.7 Barra de estado Establecer el texto y mostrar una barra de progreso. 'Get current doc doc = util.getDoc("") 'Get status bar sb = util.getStatusBar(doc) 'Init text and up limit sb.start( "Row ", 10 ) For co1 = 1 To 10 'Set value sb.setValue( co1 ) Wait 1000 Next 'Is import free status bar sb.end()
6.8 Exportar a PDF Todas las opciones en: PDF Export in wiki. Si la exportación es correcta, regresa la ruta del PDF Exportar el documento actual en el mismo directorio y mismo nombre del documento. doc = util.getDoc("") path = util.exportPDF(doc, "", Array()) MsgBox util.format("PDF export in: {}", path)
Exportar en otro directorio con el mismo nombre del documento. path_save = "/home/USER/OTHER_FOLDER" path_pdf = util.exportPDF(doc, path_save, Array())
Exportar en otro directorio y otro nombre de archivo. path_save = "/home/USER/OTHER_FOLDER/NAME.pdf" path_pdf = util.exportPDF(doc, path_save, Array())
Exportar con opciones. Dim options(0) As New com.sun.star.beans.NamedValue doc = util.getDoc("") options(0).Name = "PageRange" options(0).Value = "2" path = util.exportPDF(doc, "", options) MsgBox util.format("PDF export in: {}", path)
6.7. Barra de estado
31
EasyDev Documentation, Publicación 2.0.0
32
Capítulo 6. Documentos
CAPÍTULO 7
Calc
7.1 Celdas Regresar la celda activa, siempre se deuelve una sola celda. Sub getCellDoc() util = createUnoService("org.universolibre.EasyDev") address = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress") address.Current = True cell = util.getCell(address) msg = util.format("{} {}", Array(cell.ImplementationName, cell.AbsoluteName)) util.msgbox(msg) End Sub
Regresar la celda activa, buscando el documento por título, el documento debe estar previamente abierto. address.Doc = "test.ods" 'Title doc address.Current = True cell = util.getCell(address) msg = util.format("{} {}", Array(cell.ImplementationName, cell.AbsoluteName)) util.msgbox(msg)
Regresar la celda activa de un documento doc = util.getDoc("") address.Doc = doc address.Current = True cell = util.getCell(address) msg = util.format("{} {}", Array(cell.ImplementationName, cell.AbsoluteName)) util.msgbox(msg)
Regresar una celda de un documento, de una hoja y celda por nombre. doc = util.getDoc("") address.Doc = doc address.Sheet = "Sheet2" address.Name = "B5" cell = util.getCell(address) msg = util.format("{} {}", Array(cell.ImplementationName, cell.AbsoluteName)) util.msgbox(msg)
Regresar una celda de un documento, de una hoja por nombre y la celda por posición de columna y fila.
33
EasyDev Documentation, Publicación 2.0.0
doc = util.getDoc("") address.Doc = doc address.Sheet = "Sheet2" address.Name = "" address.Col = 1 address.Row = 4 cell = util.getCell(address) msg = util.format("{} {}", Array(cell.ImplementationName, cell.AbsoluteName)) util.msgbox(msg)
Regresa una celda de una instancua de una hoja, el parametro documento es omitido. sheet = doc.getCurrentController().getActiveSheet() address.Sheet = sheet address.Name = "D5" cell = util.getCell(address) msg = util.format("{} {}", Array(cell.ImplementationName, cell.AbsoluteName)) util.msgbox(msg)
7.2 Rangos Regresar el rango activo. Sub getRangeDoc() util = createUnoService("org.universolibre.EasyDev") address = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress") address.Current = True range = util.getRange(address) msg = util.format("{} {}", Array(range.ImplementationName, range.AbsoluteName)) util.msgbox(msg) End Sub
Regresar el rango activo de un documento buscado por título, el documento debe estar previamente abierto. address.Doc = "test.ods" 'Title doc address.Current = True range = util.getRange(address) msg = util.format("{} {}", Array(range.ImplementationName, range.AbsoluteName)) util.msgbox(msg)
Regresar el rango activo de uns instancia de un documento. doc = util.getDoc("") address.Doc = doc address.Current = True range = util.getRange(address) msg = util.format("{} {}", Array(range.ImplementationName, range.AbsoluteName)) util.msgbox(msg)
Regresar el rango de una instancia de un documento, de una hoja y rango por nombre. doc = util.getDoc("") address.Doc = doc address.Sheet = "Sheet2" address.Name = "B5:C10" range = util.getRange(address)
34
Capítulo 7. Calc
EasyDev Documentation, Publicación 2.0.0
msg = util.format("{} {}", Array(range.ImplementationName, range.AbsoluteName)) util.msgbox(msg)
Regresar el rango de una instancia de un documento, de una hoja por nombre y del rango por posición. address.Sheet = "Sheet2" address.Name = "" address.Col = 1 address.Row = 4 address.EndCol = 3 address.EndRow = 9 range = util.getRange(address) msg = util.format("{} {}", Array(range.ImplementationName, range.AbsoluteName)) util.msgbox(msg)
Regresar el rango de uns instancia de una hoja, el argumento documento es omitido. sheet = doc.getCurrentController().getActiveSheet() address.Sheet = sheet address.Name = "D5:E10" range = util.getRange(address) msg = util.format("{} {}", Array(range.ImplementationName, range.AbsoluteName)) util.msgbox(msg)
7.3 Seleccionar un rango Sub SelectRange() util = createUnoService("org.universolibre.EasyDev") address = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress") doc = util.getDoc("") address.Doc = doc address.Sheet = "Sheet2" address.Name = "B5:C10" range = util.getRange(address) 'Select util.selectRange(doc, range) End Sub
7.4 Región actual Sub getCurrentRegion() util = createUnoService("org.universolibre.EasyDev") address = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress") address.Current = True cell = util.getCell(address) msg = util.format("{} {}", Array(cell.ImplementationName, cell.AbsoluteName)) util.msgbox(msg) End Sub
7.3. Seleccionar un rango
35
EasyDev Documentation, Publicación 2.0.0
Solo es necesario pasar una celda que este dentro de la región actual. Se obtiene un objeto cursor. cursor = util.getCurrentRegion(cell, True) msg = util.format("{} {}", Array(cursor.ImplementationName, cursor.AbsoluteName)) util.msgbox(msg)
Se devuelve un objeto rango (range). range = util.getCurrentRegion(cell, False) msg = util.format("{} {}", Array(range.ImplementationName, range.AbsoluteName)) util.msgbox(msg)
7.5 Ultima fila Devolver la ultima fila dentro dentro de la región actual. Sub getLastRow() util = createUnoService("org.universolibre.EasyDev") address = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress") address.Current = True cell = util.getCell(address) row = util.getLastRow(cell) util.msgbox(row) End Sub
7.6 Siguiente valor En los valores de un rango de celdas, devolver el siguiente valor en la columna pasada, por ejemplo 0 (A), 1 (B), etc. Sub getNextID() util = createUnoService("org.universolibre.EasyDev") address = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress") address.Current = True cell = util.getCell(address) value = util.getNextID(cell, 0) util.msgbox(value) End Sub
36
Capítulo 7. Calc
EasyDev Documentation, Publicación 2.0.0
7.7 Valor de celda Detección automática del tipo de contenido: cadenas (string), valores (value) o formulas. Sub CellValue() util = createUnoService("org.universolibre.EasyDev") address = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress") address.Current = True cell = util.getCell(address) value = "String" util.setValue(cell, value) value = util.getValue(cell) util.msgbox(value) value = 12345 util.setValue(cell, value) value = util.getValue(cell) util.msgbox(value) value = "=SUM(A1:C1)" util.setValue(cell, value) value = util.getValue(cell) util.msgbox(value) End Sub
7.7. Valor de celda
37
EasyDev Documentation, Publicación 2.0.0
38
Capítulo 7. Calc
CAPÍTULO 8
Writer
8.1 Parrafos Obtener todos los parrafos de un documento, incluyendo los vacíos. Sub GetParagraps() util = createUnoService("org.universolibre.EasyDev") 'Get current doc doc = util.getDoc("") 'Get all paragraphs paragraphs = util.getParagraphs(doc, True) util.msgbox(util.len(paragraphs)) End Sub
Obtener todos los parrafos de un documento, excluyendo los vacíos. paragraphs = util.getParagraphs(doc, False) util.msgbox(util.len(paragraphs))
39
EasyDev Documentation, Publicación 2.0.0
40
Capítulo 8. Writer
CAPÍTULO 9
Bases de datos
9.1 ODBC Conectar a una base de datos ODBC Sub ConexionODBC() util = createUnoService("org.universolibre.EasyDev") odbc = "ConSQL" user = "sa" passw = "letmein" con = util.conODBC(odbc, user, passw) util.msgbox(con) End Sub
41
EasyDev Documentation, Publicación 2.0.0
42
Capítulo 9. Bases de datos
CAPÍTULO 10
Cuadros de diálogo
10.1 Crear diálogo Crear cuadro de diálogo a partir de un archivo. Puedes diseñarlo en el IDE, exportarlo y crearlo desde el archivo exportardo.
Sub CreateDialog util = createUnoService("org.universolibre.EasyDev") path = "/home/USER/dlg_test.xdl" dlg = util.createDialog(path) dlg.execute() dlg.dispose() End Sub
10.2 Etiqueta con hipervínculo Automáticamente se agregar el evento ratón encima.
43
EasyDev Documentation, Publicación 2.0.0
path = "/home/USER/dlg_test.xdl" dlg = util.createDialog(path) properties = Array( _ Array("Name", "link_home"), _ Array("PositionX", 100), _ Array("PositionY", 10), _ Array("URL", "http://universolibre.org"), _ Array("Label", "http://universolibre.org"), _ ) util.createControl(dlg, "FixedHyperlink", properties) dlg.execute() dlg.dispose()
10.3 Mapa de ruta Agregar un menú de opciones, automáticamente se agregar el evento item cambiado que actualiza la propiedad Paso(Step) del cuadro de diálogo.
44
Capítulo 10. Cuadros de diálogo
EasyDev Documentation, Publicación 2.0.0
path = "/home/USER/dlg_test.xdl" dlg = util.createDialog(path) options = Array("Init", "Values", "Config", "Other") properties = Array( _ Array("Name", "roadmap"), _ Array("Width", 50), _ Array("Height", 150), _ Array("Options", options), _ ) util.createControl(dlg, "Roadmap", properties) dlg.execute() dlg.dispose()
10.4 Rejilla Crear una rejilla y establecer su contenido desde un array. Automáticamente se detectan las columnas con valores y se formatean.
10.4. Rejilla
45
EasyDev Documentation, Publicación 2.0.0
c1 = Array( _ Array("Title", "State"), _ Array("HorizontalAlign", 0), _ ) c2 = Array( _ Array("Title", "People"), _ Array("HorizontalAlign", 2), _ Array("Identifier", True), _ ) columns = Array(c1, c2) properties = Array( _ Array("Name", "grid"), _ Array("PositionX", 100), _ Array("PositionY", 50), _ Array("Step", 4), _ Array("Columns", columns), _ ) grid = util.createControl(dlg, "Grid", properties) data = Array( _ Array("Uno", 2222), _ Array("Tres", 44444), _ Array("Cinco", 666666), _ Array("Siete", 666666), _ ) col_format = Array() util.setGridData(grid, data, col_format) dlg.execute() dlg.dispose()
Agregar datos de un rango de celdas. data = ThisComponent.getCurrentSelection().getDataarray() col_format = Array() util.setGridData(grid, data, col_format)
46
Capítulo 10. Cuadros de diálogo
EasyDev Documentation, Publicación 2.0.0
Cambiar el formato predeterminado de las columnas con valores. data = ThisComponent.getCurrentSelection().getDataarray() 'Default format util.numfmt = "$ {0:,.2f}" col_format = Array() util.setGridData(grid, data, col_format)
O puedes establecer el formato para cada columna. data = ThisComponent.getCurrentSelection().getDataarray() col_format = Array("{}", "$ {0:,.2f}") util.setGridData(grid, data, col_format)
Y devolver los datos de la rejilla. data = util.getGridData(grid, Array()) util.msgbox(data)
10.4. Rejilla
47
EasyDev Documentation, Publicación 2.0.0
48
Capítulo 10. Cuadros de diálogo
CAPÍTULO 11
Indíces y tablas
genindex modindex search
49