53
EasyDev Documentation Versión 2.0.0 Mauricio Baeza 02 de mayo de 2017

EasyDev Documentation - media.readthedocs.org · Enviar correo con copia (CC) y copia oculta ... Abrir un archivo y leer su contenido. 12 Capítulo 3. ... server.Name="smtp.gmail.com"

Embed Size (px)

Citation preview

EasyDev DocumentationVersión 2.0.0

Mauricio Baeza

02 de mayo de 2017

Índice general

1. Introducción 31.1. Instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2. Probando la herramienta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2. Herramientas para depuración 52.1. Mostrar información en shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2. Guardar información en un archivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3. msgbox Especial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.4. Llamar a MRI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3. Herramientas 93.1. Mostrar información del PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93.2. Hacer una pregunta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.3. Reemplazar cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103.4. Formato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.5. Archivos y directorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113.6. Ejecutar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.7. Configuración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.8. Portapapeles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.9. Tiempo Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.10. Llamar macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.11. Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.12. Exportar a CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4. Enviando correo 174.1. Enviar un correo y esperar la respuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174.2. Enviar correo y no esperar respuesta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.3. Enviar correo con copia (CC) y copia oculta (BCC) . . . . . . . . . . . . . . . . . . . . . . . . . . . 184.4. Enviar correo con archivos anexos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194.5. Enviar correo y guardar mensaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

5. Matrices 235.1. Agregar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235.2. Borrar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235.3. Extender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235.4. Multiplicar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235.5. Valores únicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

I

5.6. Reversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245.7. Insertar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245.8. Remover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245.9. Largo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245.10. Contar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255.11. Índice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255.12. Máximo, Mínimo y Promedio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255.13. Suma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255.14. Existe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255.15. Igual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255.16. Rebanadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265.17. Ordenar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265.18. Operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

6. Documentos 296.1. Nuevo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296.2. Obtener documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296.3. Tipo de documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306.4. Obtener documentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306.5. Abrir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306.6. Activar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316.7. Barra de estado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316.8. Exportar a PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

7. Calc 337.1. Celdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337.2. Rangos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347.3. Seleccionar un rango . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357.4. Región actual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367.5. Ultima fila . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367.6. Siguiente valor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367.7. Valor de celda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

8. Writer 398.1. Parrafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

9. Bases de datos 419.1. ODBC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

10. Cuadros de diálogo 4310.1. Crear diálogo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4310.2. Etiqueta con hipervínculo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4410.3. Mapa de ruta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4410.4. Rejilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

11. Indíces y tablas 49

II

EasyDev Documentation, Versión 2.0.0

Contenido:

Índice general 1

EasyDev Documentation, Versión 2.0.0

2 Índice general

CAPÍTULO 1

Introducción

EasyDev puede ayudarte a desarrollar macros en LibreOffice.

Instalación

Decarga la ultima versión desde GitHub.

Abre LibreOffice

Menú: Herramientas -> Administración de extensiones...

Agregar...

3

EasyDev Documentation, Versión 2.0.0

Probando la herramienta

Sub Prueba()'Creando el servicioutil = createUnoService("org.universolibre.EasyDev")

MsgBox util.VERSIONEnd Sub

4 Capítulo 1. Introducción

CAPÍTULO 2

Herramientas para depuración

Mostrar información en shell

Solo Linux

Sub Debug()'Crear servicioutil = createUnoService("org.universolibre.EasyDev")

util.debug("Prueba de depuración")End Sub

5

EasyDev Documentation, Versión 2.0.0

En Windows, puedes abrir y guardar un nuevo documento con el nombre debug.odt y mostrar la información dedepuración en este documento.

6 Capítulo 2. Herramientas para depuración

EasyDev Documentation, Versión 2.0.0

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 - <uno_component.EasyDev object at 0x7f96caf34438>2015-10-28 20:56:41 - EasyDev - <uno_component.EasyDev object at 0x7f96caf34438>

msgbox Especial

Mostrar cualquier información en un cuadro de mensaje como objectos y matrices.

Sub MessageBox()util = createUnoService("org.universolibre.EasyDev")

util.msgbox("Información de depuración")

'Mostrar cualquier datodata = "Como texto"util.msgbox(data)

'Números'data = 12345util.msgbox(data)

'Matrices'data = Array("Uno", 2)util.msgbox(data)

util.msgbox(util)End Sub

Llamar a MRI

MRI es la mejor extensión para instrospección de objetos para Apache OpenOffice y LibreOffice. Descargala e insta-lala.

Llamala desde EasyDev.

Sub CallMRI()util = createUnoService("org.universolibre.EasyDev")

'MRI es una gran extensión.util.mri(util)

End Sub

2.2. Guardar información en un archivo 7

EasyDev Documentation, Versión 2.0.0

8 Capítulo 2. Herramientas para depuración

CAPÍTULO 3

Herramientas

Mostrar información del PC

Sub ShowInfoPC()util = createUnoService("org.universolibre.EasyDev")

'Sistema operativoutil.msgbox(util.OS)

'Nombre de la aplicaciónutil.msgbox(util.APP_NAME)

'Versión de la aplicaciónutil.msgbox(util.APP_VERSION)

'Lenguajeutil.msgbox(util.LANGUAGE)

'Tamaño de la pantallautil.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

→˓posibleutil.msgbox(util.getInfoPC())

End Sub

9

EasyDev Documentation, Versión 2.0.0

Hacer una pregunta

Sub Pregunta()util = createUnoService("org.universolibre.EasyDev")

titulo = "Mi programa"mensage = "¿Es fácil Python?"res = util.question(titulo, mensaje)

'Si pulsa SI, devuelve verdadero (True)util.msgbox(res)

End Sub

Reemplazar cadenas

Reemplazar una cadena con argumentos

Sub RenderString()util = createUnoService("org.universolibre.EasyDev")

'Puedes usar una estructura NamedValuemessage = "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 PropertyValuemessage = "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 matricesmessage = "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

10 Capítulo 3. Herramientas

EasyDev Documentation, Versión 2.0.0

Formato

Más información y ejemplos aquí.

Sub FormatData()util = createUnoService("org.universolibre.EasyDev")

MsgBox util.format("Hello {}", "World")

MsgBox util.format("Hello {} from {}", Array("World", "PyUNO"))

MsgBox util.format("Hello {1} from {0}", Array("World", "PyUNO"))

MsgBox util.format("{:<20}|{:^20}|{:>20}", Array("Left", "Center", "Rigth"))

MsgBox util.format("{:_<20}|{:-^20}|{:_>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 = 15my_date.Month = 1my_date.Year = 1974MsgBox util.format("{:%d-%B-%Y}", my_date)

my_date = createUnoStruct("com.sun.star.util.DateTime")my_date.Day = 15my_date.Month = 1my_date.Year = 1974my_date.Hours = 13my_date.Minutes = 30

MsgBox util.format("{:%Y-%b-%d %H:%M}", my_date)

End Sub

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,

3.4. Formato 11

EasyDev Documentation, Versión 2.0.0

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

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 iniciofolder = 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.

12 Capítulo 3. Herramientas

EasyDev Documentation, Versión 2.0.0

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)'Verifydata = 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)'Verifydata = util.fileOpen("/home/USER/test2.txt", "r")util.msgbox(data)

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)

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 configvalue = 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.6. Ejecutar 13

EasyDev Documentation, Versión 2.0.0

Portapapeles

Obtener texto del portapapeles.

value = util.getClipboard()util.msgbox(value)

Enviar texto al portapapeles.

util.setClipboard("Hello World PyUNO!!")'Verifyvalue = util.getClipboard()util.msgbox(value)

Tiempo Unix

Más información: https://en.wikipedia.org/wiki/Unix_time

epoch = util.getEpoch()util.msgbox(epoch)

Llamar macros

Más información: Scripting Framework

Guarda la siguiente macro en:

/home/USER/.config/libreoffice/4/user/Scripts/python/mymacros.py

import unoimport 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.CurrentSelectionutil.callMacro(macro, Array(cell))

14 Capítulo 3. Herramientas

EasyDev Documentation, Versión 2.0.0

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 = Truecell = ThisComponent.CurrentSelectionutil.callMacro(macro, Array(cell))

Llamar a una macro en Basic

macro = createUnoStruct("org.universolibre.EasyDev.Macro")macro.Library = "EasyDevLib"macro.Module = "Examples"macro.Name = "HelloWorld"macro.Language = "Basic"macro.Thread = Falseutil.callMacro(macro, Array())

Timer

Guarda la siguiente macro en:

/home/USER/.config/libreoffice/4/user/Scripts/python/mymacros.py

import unoimport 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 macromacro = createUnoStruct("org.universolibre.EasyDev.Macro")macro.Library = "mymacros"macro.Name = "show_time"'Argumentscell = ThisComponent.CurrentSelection'Timer name "time" and wait one secondutil.timer("time", 1, macro, Array(cell))

Detener un timer por su nombre

3.11. Timer 15

EasyDev Documentation, Versión 2.0.0

Sub StopTimer()util = createUnoService("org.universolibre.EasyDev")util.stopTimer("time")

End Sub

Exportar a CSV

Establece un rango con datos y seleccionalo.

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)

16 Capítulo 3. Herramientas

CAPÍTULO 4

Enviando correo

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 responseresult = util.sendMail(server, message)If result Then

MsgBox "Correo enviado"Else

MsgBox "Error al enviar el correo"End If

End Sub

17

EasyDev Documentation, Versión 2.0.0

Enviar correo y no esperar respuesta

Sub SendMailNoWait()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 = Trueserver.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 respuestautil.sendMail(server, message)MsgBox "Send mail"

End Sub

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 = Trueserver.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

18 Capítulo 4. Enviando correo

EasyDev Documentation, Versión 2.0.0

message.Cc = "[email protected],[email protected]"message.Bcc = "[email protected],[email protected]"

'Enviar correo y no esperar respuestautil.sendMail(server, message)MsgBox "Send mail"

End Sub

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 = Trueserver.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 = bodymessage.Files = files

'Enviar correo y no esperar respuestautil.sendMail(server, message)MsgBox "Send mail"

End Sub

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!

4.4. Enviar correo con archivos anexos 19

EasyDev Documentation, Versión 2.0.0

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 = Trueserver.Thread = True 'Send in other threadserver.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 = bodymessage.Files = filesmessage.Save = True

'Enviar correo y no esperar respuestautil.sendMail(server, message)MsgBox "Send mail"

End Sub

20 Capítulo 4. Enviando correo

EasyDev Documentation, Versión 2.0.0

4.5. Enviar correo y guardar mensaje 21

EasyDev Documentation, Versión 2.0.0

22 Capítulo 4. Enviando correo

CAPÍTULO 5

Matrices

Agregar

a = Array("Nikole","Scarlett","Monica","Naomi","Marion")a = util.append(a, "Sofia")util.msgbox( a )

Borrar

a = util.delete(a, "Nikole")util.msgbox( a )

Extender

a = Array("Nikole","Scarlett","Monica","Naomi","Marion")a2 = Array("Sofia", "Anita")a = util.extend(a, a2)util.msgbox( a )

Multiplicar

a = Array("Nikole","Scarlett","Monica","Naomi","Marion")a = util.multi(a, 2)util.msgbox( a )

23

EasyDev Documentation, Versión 2.0.0

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 )

Reversa

a = Array("Nikole","Scarlett","Monica","Naomi","Marion")a = util.reverse(a)util.msgbox( a )

Insertar

Insertar un elemento en una posición.

a = Array("Nikole","Scarlett","Monica","Naomi","Marion")a = util.insert(a, 2, "Mary")util.msgbox( a )

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 posutil.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) )

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) )

24 Capítulo 5. Matrices

EasyDev Documentation, Versión 2.0.0

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") )

Índice

a = Array("Nikole","Scarlett","Monica","Naomi","Marion")util.msgbox( util.index(a, "Naomi") )util.msgbox( util.index(a, "Monica") )

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) )

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) )

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") )

Igual

Si una matriz es igual a una segunda.

5.10. Contar 25

EasyDev Documentation, Versión 2.0.0

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) )

Rebanadas

Copiar

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 )

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, "a", 56), _Array(1, 2, 3, "z", 43), _

26 Capítulo 5. Matrices

EasyDev Documentation, Versión 2.0.0

Array(1, 3, 3, "g", 78), _Array(1, 4, 3, "e", 32), _Array(1, 5, 3, "M", 89) _

)a = util.sorted(a, 0)util.msgbox( a )a = util.sorted(a, 1)util.msgbox( a )a = util.sorted(a, 2)util.msgbox( a )a = util.sorted(a, 3)util.msgbox( a )a = util.sorted(a, 4)util.msgbox( a )

Regresar una columna de una matriz multidimensional

util.msgbox(util.getColumn(a, 1))

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, Versión 2.0.0

28 Capítulo 5. Matrices

CAPÍTULO 6

Documentos

Nuevo

Más información: Component Loader

Sub NewDoc()'Create new docutil = createUnoService("org.universolibre.EasyDev")

'Default Calcdoc = 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)

Obtener documento

Actual

Importante: El documento actual puede ser el IDE Basic

29

EasyDev Documentation, Versión 2.0.0

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)

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)

Obtener documentos

Obtener todos los documentos abiertos.

docs = util.getDocs()MsgBox util.format("{} Open documents", util.len(docs))

Abrir

Más información y opciones:

Component Loader

Media Descriptor

Abrir documento por ruta

Dim options1(0) As New com.sun.star.beans.NamedValueutil = 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 = Truepath = "/home/USER/Plantilla.ods"doc = util.openDoc(path, options1)

Abrir oculto.

30 Capítulo 6. Documentos

EasyDev Documentation, Versión 2.0.0

options1(0).Name = "Hidden"options1(0).Value = Truepath = "/home/USER/Plantilla.ods"doc = util.openDoc(path, options1)MsgBox "Close doc"doc.dispose()

Activar

Enviar el foco a un documento.

doc1 = util.newDoc("")doc2 = util.newDoc("swriter")wait(1000)util.setFocus(doc1)

Barra de estado

Establecer el texto y mostrar una barra de progreso.

'Get current docdoc = util.getDoc("")'Get status barsb = util.getStatusBar(doc)

'Init text and up limitsb.start( "Row ", 10 )For co1 = 1 To 10

'Set valuesb.setValue( co1 )Wait 1000

Next'Is import free status barsb.end()

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())

6.6. Activar 31

EasyDev Documentation, Versión 2.0.0

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)

32 Capítulo 6. Documentos

CAPÍTULO 7

Calc

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 = Truecell = 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 docaddress.Current = Truecell = 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 = docaddress.Current = Truecell = 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.

33

EasyDev Documentation, Versión 2.0.0

doc = util.getDoc("")address.Doc = docaddress.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.

doc = util.getDoc("")address.Doc = docaddress.Sheet = "Sheet2"address.Name = ""address.Col = 1address.Row = 4cell = 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 = sheetaddress.Name = "D5"cell = util.getCell(address)msg = util.format("{} {}", Array(cell.ImplementationName, cell.AbsoluteName))util.msgbox(msg)

Rangos

Regresar el rango activo.

Sub getRangeDoc()util = createUnoService("org.universolibre.EasyDev")address = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress")

address.Current = Truerange = 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 docaddress.Current = Truerange = 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

34 Capítulo 7. Calc

EasyDev Documentation, Versión 2.0.0

address.Current = Truerange = 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 = docaddress.Sheet = "Sheet2"address.Name = "B5:C10"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 por nombre y del rango por posición.

address.Sheet = "Sheet2"address.Name = ""address.Col = 1address.Row = 4address.EndCol = 3address.EndRow = 9range = 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 = sheetaddress.Name = "D5:E10"range = util.getRange(address)msg = util.format("{} {}", Array(range.ImplementationName, range.AbsoluteName))util.msgbox(msg)

Seleccionar un rango

Sub SelectRange()util = createUnoService("org.universolibre.EasyDev")address = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress")

doc = util.getDoc("")address.Doc = docaddress.Sheet = "Sheet2"address.Name = "B5:C10"range = util.getRange(address)

'Selectutil.selectRange(doc, range)

End Sub

7.3. Seleccionar un rango 35

EasyDev Documentation, Versión 2.0.0

Región actual

Sub getCurrentRegion()

util = createUnoService("org.universolibre.EasyDev")address = createUnoStruct("org.universolibre.EasyDev.CellRangeAddress")

address.Current = Truecell = util.getCell(address)msg = util.format("{} {}", Array(cell.ImplementationName, cell.AbsoluteName))util.msgbox(msg)

End Sub

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)

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 = Truecell = util.getCell(address)row = util.getLastRow(cell)util.msgbox(row)

End Sub

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 = Truecell = util.getCell(address)value = util.getNextID(cell, 0)

36 Capítulo 7. Calc

EasyDev Documentation, Versión 2.0.0

util.msgbox(value)End Sub

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 = Truecell = util.getCell(address)

value = "String"util.setValue(cell, value)value = util.getValue(cell)util.msgbox(value)

value = 12345util.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, Versión 2.0.0

38 Capítulo 7. Calc

CAPÍTULO 8

Writer

Parrafos

Obtener todos los parrafos de un documento, incluyendo los vacíos.

Sub GetParagraps()util = createUnoService("org.universolibre.EasyDev")

'Get current docdoc = util.getDoc("")

'Get all paragraphsparagraphs = 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, Versión 2.0.0

40 Capítulo 8. Writer

CAPÍTULO 9

Bases de datos

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, Versión 2.0.0

42 Capítulo 9. Bases de datos

CAPÍTULO 10

Cuadros de diálogo

Crear diálogo

Crear cuadro de diálogo a partir de un archivo. Puedes diseñarlo en el IDE, exportarlo y crearlo desde el archivoexportardo.

Sub CreateDialogutil = createUnoService("org.universolibre.EasyDev")

path = "/home/USER/dlg_test.xdl"dlg = util.createDialog(path)dlg.execute()dlg.dispose()

End Sub

43

EasyDev Documentation, Versión 2.0.0

Etiqueta con hipervínculo

Automáticamente se agregar el evento ratón encima.

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()

Mapa de ruta

Agregar un menú de opciones, automáticamente se agregar el evento item cambiado que actualiza la propiedadPaso(Step) del cuadro de diálogo.

44 Capítulo 10. Cuadros de diálogo

EasyDev Documentation, Versió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()

Rejilla

Crear una rejilla y establecer su contenido desde un array. Automáticamente se detectan las columnas con valores y seformatean.

10.4. Rejilla 45

EasyDev Documentation, Versió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)

Cambiar el formato predeterminado de las columnas con valores.

46 Capítulo 10. Cuadros de diálogo

EasyDev Documentation, Versión 2.0.0

data = ThisComponent.getCurrentSelection().getDataarray()

'Default formatutil.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, Versión 2.0.0

48 Capítulo 10. Cuadros de diálogo

CAPÍTULO 11

Indíces y tablas

genindex

modindex

search

49