easydev documentation - media.readthedocs.org · enviar correo con copia (cc) y copia oculta ......
TRANSCRIPT
Í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
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
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
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
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
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
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
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