loader

Autor: admin

Macro de Outlook 2019 – Saludo automático

Las aplicaciones de Office 365 aceptan código Visual Basic para ejecutar acciones personalizadas. Buscando automatizar el saludo de inicio de los correos presento esta solución que nos proporciona automáticamente el siguiente resultado al inicio de un correo de respuesta:

Estimado/a Nombre Apellido,
Buenos días,

El apellido en algunos casos es reemplazado por el segundo nombre para evitar cortar nombres compuestos, que son muy comunes en el español. Nombres como Juan Diego, Juan Javier, María Paula, María Belén, etc.

Dependiendo de la hora del día el mensaje de la segunda línea cambia de «Buenos días», «Buenas tardes» y «Buenas noches».

Este código se guardó en un macro, y se lo colocó en entre las herramientas de Outlook para un rápido acceso vía teclado.

Al momento de recibir un correo podemos responder automáticamente.
Un nuevo icono en el ‘ribbon’ representa la acción macro nueva.
El mensaje automático auto calcula los valores para poder automatizar la cabecera del mensaje.

A continuación el código fuente de este macro:

Sub AutoGreeting()

Dim oMItem As Outlook.MailItem
Dim oMItemReply As Outlook.MailItem
Dim sGreetName As String
Dim sGreetTime As String


On Error Resume Next

Select Case TypeName(Application.ActiveWindow)
Case "Explorer"
Set oMItem = ActiveExplorer.Selection.Item(1)
Case "Inspector"
Set oMItem = ActiveInspector.CurrentItem
Case Else
End Select
On Error GoTo 0

If oMItem Is Nothing Then GoTo ExitProc
On Error Resume Next

sGreetName = oMItem.SenderName
Set oMItemReply = oMItem.Reply
Select Case Time
Case Is < 0.5
sGreetTime = "Buenos días,"
Case 0.5 To 0.75
sGreetTime = "Buenas tardes,"
Case Else
sGreetTime = "Buenas noches"
End Select
With oMItemReply
.HTMLBody = "<span style=""font-size : 10pt""><p>Estimado/a " & Split(sGreetName)(0) & " " & Split(sGreetName)(1) & ",<br>" & sGreetTime & "</p></span>" & .HTMLBody
.Display


End With
ExitProc:

Set oMItem = Nothing
Set oMItemReply = Nothing
End Sub

REgex y aplicaciones

REgex es una abreviación para Regular Expression (expresiones regulares). El REgex es un patrón de caracteres que se utilizan para buscar un texto específico o una porción de texto.

El fin del regex generalmente es buscar coincidencias de texto y/o realizar reemplazos sobre este texto. Cuando se trabaja con un documento de texto grande o un archivo de log extenso. El REgex permite realizar rapidamente una búsqueda del patrón que necesitemos.

Lo primero que necesitamos entender es que cada letra, número y símbolo es un carácter. Un string se compone de varios caracteres para formar palabras o claves.

En REgex se utilizan diferentes símbolos para identificar el patrón que buscamos.

Por ejemplo:

 \d  nos permite buscar cualquier número de 0 a 9.
 \D hará Match con cualquier carácter que no sea un número.

Una de las mejores herramientas con las que me he encontrado para probar códigos REgex es: https://regexr.com/

Probando el ejemplo de arriba:

En la imagen de la izquierda el Regex hizo Match con el primer número que encontró. En la del centro, con 3 números seguidos. Y en la derecha, con el primer carácter que no era numérico.

La herramienta permite hacer pruebas en tiempo real, seleccionando el texto que coincida con la expresión regex que pongamos como input.

Regex posee varias herramientas de identificación de texto. Lo importante es comprender su sintaxis. Existen varias maneras de buscar un mismo conjuntos de caracteres. Y depende de cada uno buscar la manera más fácil de conseguirlo.

Ya que en Regex los símbolos del teclado tienen u propio significado, es imperativo utilizar un ‘carácter de escape’ para poder buscar un símbolo.
Si nuestra expresión busca un punto (.) necesitamos utilizar la siguiente sintaxis: \.
De lo contrario el punto (.) por si solo se utiliza en regex para buscar ‘cualquier carácter’.

Otro ejemplo importante son los grupos inclusivos y exclusivos. Para esto se hace el uso de llaves rectas [ ].

En este ejemplo notamos que solo los caracteres abcfjusz son seleccionados sin importar el orden en el que se encuentren entre las llaves rectas.

De igual manera el símbolo (^) para negar un set de datos. Tomando en consideración el ejemplo anterior:

Negar el conjuntos anterior nos permite seleccionar todos las caracteres excepto por el conjunto entre llaves rectas.

A continuación adjunto una lista de la sintaxis junto con un link a una página que provee ejercicios de REgex para practicar.

Alteryx Designer Curso 100% en español

Les comparto mi primer curso en Udemy.com el cual cubre las bases iniciales necesarias para poder manejar la herramienta Alteryx Designer.

https://www.udemy.com/course/alteryx-desinger-curso-basico-para-principiantes-espanol/

Este curso fue creado con el fin de instruir a las perosnas hispano hablantes en el uso de esta útil herramienta de manejo de big data. Muchos cursos de diferentes niveles estan disponibles al público, pero al menos en la plataforma Udemy este es el primero que esta dictado nativamente en español. De esta manera busco romper barreras para todas aquellas personas que tiene como limitación el idioma.

Por experiencia personal este software es bastante útil, y se puede llegar a automatizar procesos muy complejos de manera visual. Esto es un valor agregado para cualquier proyecto que involucre una cantidad exorbitante de datos, que tenga diversas fuentes de información, que requiera de prueba y error para poder ejecutar las acciones necesarias y muchos escenarios más en los que los métodos comunes requieren de procesos complejos.

Cada día, más personas se inscriben en él, y me da mucho gusto que tengan una buena experiencia. Seguiré actualizando este curso conforme sea necesario y espero sea el primero de muchos.

Problemas con delimitadores dentro de archivos planos

Cuando se trabaja con información histórica de uno o varios sistemas antiguos, a los cuales llamaré como Legacys, existe una gran posibilidad de que la información almacenada en estos sistemas tenga algún tipo de error.

En ocasiones, el usuario puede guardar información con errores ya sean de formato, caracteres especiales o cualquier valor que el sistema debería validar antes de guardar pero se deja pasar. Por otro lado, puede ocurrir que la información almacenada quiera ser extraída para utilizarla a manera de reportes, pero, al momento de extraerla se puede notar como la existencia de ciertos caracteres dentro de la información provocan errores de lectura, carga y reportería.

Cuando se exporta un rango determinado de columnas de un Legacy para su utilización, puede darse el caso en el que, la cantidad de columnas en el archivo no coincide con el número de elementos en la cabecera del archivo. Por ejemplo:

FechaMontoDescripciónFacturaID
2019/09/23$933.02Venta de insumos4253423531
2019/09/24$375.84Servicio de Cableado2342432
2019/09/26$-583.73Pago de: Agua, Luz, Teléfono3225253
2019/09/28$739.98, Auto consumo2352344

En esta tabla podemos observar como la línea número 3 y 4 presentan el símbolo de coma ( ,) dentro de su información. Si se exportara este archivo por temas de reportería o auditoria a un formato .csv o un .txt se utilizaría un delimitador, esto se conoce como un archivo de texto plano

En el caso en el que el delimitador sea una coma para separar cada campo. El archivo original se leería.

 Fecha , Monto , Descripción, Factura  ,ID
2019/09/23 , $933.02 , Venta de insumos , 425342353 , 1
2019/09/24 , $375.84 , Servicio de Cableado , 234243 , 2
2019/09/26 , $-583.73 , Pago de: Agua, Luz, Teléfono , 322525 , 3
2019/09/28 , $739.98 , , Auto consumo , 235234 , 4

Tomemos principal atención en la siguiente línea de información:
2019/09/26 , $-583.73 , Pago de: Agua, Luz, Teléfono , 322525 , 3

Como podemos observar, La coma se encuentra dentro del campo de descripción, este campo puede ser digitado por un usuario manualmente y la coma está presente para separar elementos. El problema dentro de este escenario se presenta al momento de querer leer esta información.

Los programas que leen y utilizan este tipo de archivos piden definir el delimitador con el cual deben separar esta larga lista de caracteres. Si se configura con coma, se leería de la siguiente manera:

FechaMontoDescripciónFacturaID
2019/09/23$933.02Venta de insumos4253423531
2019/09/24$375.84Servicio de Cableado2342432
2019/09/26$-583.73Pago de: Agua Luz Teléfono 322525 3
2019/09/28$739.98 Auto consumo 235234 4

La coma encontrada dentro de la información se lee como delimitador, ,provocando que la columna descripción se corra hacia la derecha y causando lo que se conoce como una Inconsistencia de columnas esto provoca que los lectores muestren errores o al momento de cargar la información, su integridad se vea afectada.

Para solucionar este tipo de problemas 2 posibles soluciones pueden aplicar. En primera instancia se puede utilizar un delimitador que sea muy poco probable encontrar en la información. Por ejemplo una barra vertical ( | ). La data se leería:

Fecha | Monto | Descripción| Factura  |ID
2019/09/23 | $933.02 | Venta de insumos | 425342353 | 1 
2019/09/24 | $375.84 | Servicio de Cableado | 234243 | 2 
2019/09/26 | $-583.73 | Pago de: Agua, Luz, Teléfono | 322525 | 3 
2019/09/28 | $739.98 | ,Auto consumo | 235234 | 4 

De esta manera evitaríamos la separación dentro de la descripción. La segunda recomendación se basa en encerrar cada columna entre comillas simples (‘ ‘) o comillas dobles.

"Fecha" | "Monto" | "Descripción"| "Factura" |"ID"
"2019/09/23" | "$933.02" | "Venta de insumos" | "425342353" | "1" 
 "2019/09/24" | "$375.84" | "Servicio de Cableado" | "234243" | "2" 
 "2019/09/26" | "$-583.73" | "Pago de: Agua, Luz, Teléfono" | "322525" | "3" 
 "2019/09/28" | "$739.98" | ",Auto consumo" | "235234" | "4" 

De esta manera los delimitadores dentro de las comillas se omiten para guardar consistencia de la información y que pueda ser leída correctamente.

En la última línea:
2019/09/28′ | ‘$739.98’ | ‘,Auto consumo’| ‘235234’ | ‘4’
Notamos que existe una coma dentro de ‘,Auto consumo’. Para estos casos es necesario aplicar un limpieza de información para que estos caracteres que no tienen razón de ser, desaparezcan.

es_ES
en_US es_ES