AutoIt es una herramienta tan potente que dispone de ciertas UDFs (Funciones definidas por el usuario) que nos permiten manipular archivos de Microsoft de una manera más simple.
Las funciones definidas por el usuario básicamente son código que, ya sea por su complejidad o por ser repetitivo, pueden ser encapsuladas y reusadas en varios procesos.
Actualmente AutoIt sólo tienen UDFs para los programas informáticos Microsoft Word y Microsoft Excel.
A continuación, se verán algunas funciones con las que cuenta AutoIt para el manejo de archivos de Word. Si desea encontrar la lista completa puede ingresar al siguiente enlace: Funciones Definidas Por El Usuario (UDFs).
Nota: Para utilizar las funciones de Word, usted debe incluir el archivo “Word.au3” en su script, usando la línea #include <Word.au3>.
1 |
_Word_Create([$bVisible=True[,$bForceNew=False]]) |
Ejemplo: Abramos un archivo de Word, luego, creemos un script con nombre WordCreate y colocamos el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <Word.au3> AbrirWord() Func AbrirWord() _Word_Create() If @extended = 0 Then MsgBox(0,"Ejemplo WordCreate","Microsoft Word ya se está ejecutando.") ElseIf @extended = 1 Then MsgBox(0,"Ejemplo WordCreate","Microsoft Word no se estaba ejecutando.") EndIf EndFunc |
Al ejecutar el script se nos mostrará el primer mensaje “Microsoft Word ya se está ejecutando” debido a que ya hay una instancia de Word abierta.
Ahora cerremos el archivo de Word y volvamos a ejecutar el script, en este caso el valor de @extended será 1 por ende, mostrará el mensaje “Microsoft Word no se estaba ejecutando” y por último se abrirá un nuevo Word.
1 |
_Word_DocAdd($oAppl[,$iDocumentType=$WdNewBlankdDocument[,$sDocumentTemplate=""[,$bNewTemplate=False]]]) |
Ejemplo: Creemos un nuevo script que tendrá como nombre WordDocAdd y en ella escribimos este código.
1 2 3 4 5 6 7 8 9 10 11 |
#include <Word.au3> Local $oWord = _Word_Create() _Word_DocAdd($oWord) If @error = 0 Then MsgBox(0,"WordDocAdd","$oWord es un objeto de Word.") ElseIf @error = 1 Then MsgBox(0,"WordDocAdd","$oWord no es un objeto de Word.") EndIf |
Al ejecutar este script nos deberá abrir simplemente un nuevo documento de Word y mostrará el mensaje “$oWord es un objeto de Word.” porque como la función tuvo éxito la macro @error tendrá un valor de 0.
Si modificamos el código anterior y le asignamos a la variable $oWord un String, la función no nos debería abrir ningún documento de Word, pero sí deberá mostrar el mensaje “$oWord no es un objeto de Word.” ya que, al haber fallado la función, la macro @error tendrá el valor de 1.
1 2 3 4 5 6 7 8 9 10 11 |
#include <Word.au3> Local $oWord = "Hola Mundo" _Word_DocAdd($oWord) If @error = 0 Then MsgBox(0,"WordDocAdd","$oWord es un objeto de Word.") ElseIf @error = 1 Then MsgBox(0,"WordDocAdd","$oWord no es un objeto de Word.") EndIf |
1 2 3 |
_Word_DocOpen($oAppl,$sFilePath[,$bConfirmConversions=False [,$iFormat=WdOpenFormatAuto[,$bReadOnly=False[,$bRevert=False [,$bAddToRecentFiles=False[,$sOpenPassword=""]]]]]]) |
Nota: La información de los otros parámetros de la función, la puede encontrar ingresando a este enlace UDF WorDocOpen.
Ejemplo: Antes de realizar nuestro script de AutoIt, creemos un nuevo documento de Word con el nombre Prueba UDF WordDocOpen, lo guardamos en nuestro escritorio y cerramos el archivo. Después de haber hecho esto, escribimos el siguiente script.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <Word.au3> #include <MsgBoxConstants.au3> AbrirDocumentoWord() Func AbrirDocumentoWord() Local $oWord = _Word_Create() _Word_DocOpen($oWord,@DesktopDir&"\Prueba UDF WordDocOpen.docx") If @error = 0 Then MsgBox($MB_OK,"Ejemplo Word Doc Open","Se abrió el documento exitosamente.") ElseIf @error = 1 Then MsgBox($MB_OK,"Ejemplo Word Doc Open","$oWord no es un objeto de tipo Word.") ElseIf @error = 2 Then MsgBox($MB_OK,"Ejemplo Word Doc Open","El documento especificado no existe.") EndIf EndFunc |
Si ejecutamos el script, nos abrirá el documento que queremos y además mostrará el mensaje “Se abrió el documento exitosamente.”.
Ahora modifiquemos el código y asignemos a la variable $oWord un valor numérico en vez de un objeto de Word.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <Word.au3> #include <MsgBoxConstants.au3> AbrirDocumentoWord() Func AbrirDocumentoWord() Local $oWord = 234 _Word_DocOpen($oWord,@DesktopDir&"\Prueba UDF WordDocOpen.docx") If @error = 0 Then MsgBox($MB_OK,"Ejemplo Word Doc Open","Se abrió el documento exitosamente.") ElseIf @error = 1 Then MsgBox($MB_OK,"Ejemplo Word Doc Open","$oWord no es un objeto de tipo Word.") ElseIf @error = 2 Then MsgBox($MB_OK,"Ejemplo Word Doc Open","El documento especificado no existe.") EndIf EndFunc |
Al hacer esto, volvamos a ejecutar el script, observamos que no abre el documento y el mensaje que mostrará en pantalla será "$oWord no es un objeto de tipo Word.".
Por último, cambiemos el nombre del documento que queremos abrir por alguno que no exista en el escritorio, por ejemplo “Hola Mundo.docx”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <Word.au3> #include <MsgBoxConstants.au3> AbrirDocumentoWord() Func AbrirDocumentoWord() Local $oWord = _Word_Create() _Word_DocOpen($oWord,@DesktopDir&"\Hola Mundo.docx") If @error = 0 Then MsgBox($MB_OK,"Ejemplo Word Doc Open","Se abrió el documento exitosamente.") ElseIf @error = 1 Then MsgBox($MB_OK,"Ejemplo Word Doc Open","$oWord no es un objeto de tipo Word.") ElseIf @error = 2 Then MsgBox($MB_OK,"Ejemplo Word Doc Open","El documento especificado no existe.") EndIf EndFunc |
Ejecutamos el script nuevamente y tampoco se abrirá el documento por obvias razones, pero el mensaje que se mostrará en pantalla será “El documento especificado no existe.”.
1 |
_Word_DocSave($oDoc)
|
Ejemplo: Utilizando las UDFs para Word vamos a abrir el documento Prueba UDF WordDocOpen que tenemos en nuestro escritorio, luego simularemos el ingreso de texto en el documento y por último guardaremos los cambios.
Para lograr esto, primero crearemos un script con nombre WordDocSave y segundo, coloquemos el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
#include <Word.au3> #include <MsgBoxConstants.au3> Local $oWord Local $oDoc Local $sString = "Esto es un ejemplo de la función _Word_DocSave()." AbrirDocumento() IngresarTexto() GuardarDocumento() Func AbrirDocumento() $oWord = _Word_Create() $oDoc = _Word_DocOpen($oWord,@DesktopDir&"\Prueba UDF WordDocOpen.docx") EndFunc Func IngresarTexto() ;Activa (enfoca) una ventana especifica WinActivate("Prueba UDF WordDocOpen.docx - Word") ;Envío una cadena de caracteres a la ventana ControlSend("Prueba UDF WordDocOpen.docx - Word","","[CLASSNN:_WwG1]",$sString) EndFunc Func GuardarDocumento() MsgBox($MB_OK,"Ejemplo DocSave",_Word_DocSave($oDoc)) EndFunc |
Si corremos el script, se hará lo explicado anteriormente y para probar si en verdad guardó, hacemos que muestre un mensaje, este mensaje tendrá un valor de 1 si los cambios hechos fueron guardados y 0 en caso de no guardar nada.
1 2 |
_Word_Quit($oAppl[,$iSaveChanges=$WdDoNotSaveChanges [,$iOriginalFormat=$WdWordDocument[,$bForceClose=False]]]) |
Ejemplo: Creamos un script con nombre WordQuit y en él coloquemos el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <Word.au3> ;Decalaración de variables Local $oWord Local $sTexto = "El valor de _Word_Quit es: " Local $sTexto2 = "El valor de @error es: " ;Se crea una instancia de Word $oWord = _Word_Create() ;Añade un documento (hoja) al archivo de Word _Word_DocAdd($oWord) ;Pausa la ejecución durante 2 segundos Sleep(2000) ;Muestra el valor de la función y cierra la aplicación de Word MsgBox(0,"Ejemplo WordQuit",$sTexto&_Word_Quit($oWord)) ;Muestra el valor de @error MsgBox(0,"Ejemplo WordQuit",$sTexto2&@error) |
Después de escribir el código, lo ejecutamos y nos abrirá un nuevo documento en blanco de Word y después de 2 segundos se cerrará la aplicación. Luego, muestra un mensaje con el valor que retorna la función y como el cierre de la aplicación fue exitoso, entonces devuelve 1 y debido a esto, la macro @error queda con el valor de 0.
Ahora modifiquemos el código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <Word.au3> Local $oWord Local $sTexto = "El valor de @error es: " ;Se crea una instancia de Word $oWord = 234 ;Añade un documento (hoja) al archivo de Word _Word_DocAdd($oWord) ;Pausa la ejecución durante 2 segundos Sleep(2000) ;Cierra la aplicación de Word _Word_Quit($oWord) ;Muestra el valor de @error MsgBox(0,"Ejemplo WordQuit",$sTexto&@error) |
Cuando corramos el script, veremos que no se abre la aplicación de Word y mucho menos se cierra, esto se debe a que la variable $oWord no recibe un objeto sino un entero y, por ende, el valor de la macro @error toma el valor de 1.
A continuación, se verán algunas funciones que cuenta AutoIt para el manejo de archivos de Excel. Si desea encontrar la lista completa puede ingresar al siguiente enlace: Funciones Definidas Por El Usuario (UDFs).
Nota: Para utilizar las funciones de Excel, usted debe incluir el archivo “Excel.au3” en su script usando la línea #include <Excel.au3>.
1 2 |
_Excel_Open([$bVisible=True[,$bDislplayAlerts=False [,$bScreenUpdating=True[,$bInteractive=True[,$bForceNew=False]]]]) |
Ejemplo: Creemos un script al cual le pondremos como nombre ExcelOpen y acto seguido colocamos el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <Excel.au3> #include <MsgBoxConstants.au3> Local $sTexto1 = "Excel ya estaba en ejecución." Local $sTexto2 = "Excel no se estaba ejecutando o $bForceNew es True." _Excel_Open() If @extended = 0 Then MsgBox($MB_OK,"Ejemplo ExcelOpen",$sTexto1) ElseIf @extended = 1 Then MsgBox($MB_OK,"Ejemplo ExcelOpen",$sTexto2) EndIf |
Cuando ejecutemos el script, se nos abrirá la aplicación de Excel y como no había ninguna abierta, entonces la macro @extended tomará el valor de 1 y mostrará el siguiente mensaje.
Si abrimos un archivo de Excel y después ejecutamos el script, la UDF _Excel_Open se conectará a esta instancia haciendo que la macro @extended tome el valor de 0 y arroje el siguiente resultado.
1 |
_Excel_BookNew($oExcel[,$iSheets=Default]) |
Ejemplo: Crearemos un script con nombre ExcelBookNew y en él escribimos el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <Excel.au3> #include <MsgBoxConstants.au3> Local $oExcel Local $sEjemplo = "Ejemplo ExcelBookNew" Local $sTexto1 = "Se creó un nuevo libro de trabajo exitosamente." Local $sTexto2 = "$oExcel no es un objeto de tipo Excel." Local $sTexto3 = "El número de hojas no está dentro del rango permitido." $oExcel = _Excel_Open() _Excel_BookNew($oExcel) If @error = 0 Then MsgBox($MB_OK,$sEjemplo,$sTexto1) ElseIf @error = 1 Then MsgBox($MB_OK,$sEjemplo,$sTexto2) ElseIf @error = 4 Then MsgBox($MB_OK,$sEjemplo,$sTexto3) EndIf |
Si ejecutamos este script, se nos abre un woorkbook y, por ende, la macro @error quedara con el valor 0 mostrando el mensaje “Se creó un nuevo libro de trabajo exitosamente.”.
Ahora en la variable $oExcel le asignaremos una cadena de caracteres en vez de un objeto de Excel y lo ejecutamos. Observaremos que la aplicación no se abre y la macro @error tendrá un valor de 1 mostrando el mensaje “$oExcel no es un objeto de tipo Excel.”.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <Excel.au3> #include <MsgBoxConstants.au3> Local $oExcel Local $sEjemplo = "Ejemplo ExcelBookNew" Local $sTexto1 = "Se creó un nuevo libro de trabajo exitosamente." Local $sTexto2 = "$oExcel no es un objeto de tipo Excel." Local $sTexto3 = "El número de hojas no está dentro del rango permitido." $oExcel = "Q-Vision Technologies" _Excel_BookNew($oExcel) If @error = 0 Then MsgBox($MB_OK,$sEjemplo,$sTexto1) ElseIf @error = 1 Then MsgBox($MB_OK,$sEjemplo,$sTexto2) ElseIf @error = 4 Then MsgBox($MB_OK,$sEjemplo,$sTexto3) EndIf |
Por último, en la UDF _Excel_BookNew(), le pondremos en el parámetro $iSheets 256 para que nos cree esa cantidad de hojas en el workbook. Este valor está por fuera del rango permitido ocasionando que falle la ejecución y haciendo que la macro @error tome el valor de 4.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Local $oExcel Local $sEjemplo = "Ejemplo ExcelBookNew" Local $sTexto1 = "Se creó un nuevo libro de trabajo exitosamente." Local $sTexto2 = "$oExcel no es un objeto de tipo Excel." Local $sTexto3 = "El número de hojas no está dentro del rango permitido." $oExcel = _Excel_Open() _Excel_BookNew($oExcel,256) If @error = 0 Then MsgBox($MB_OK,$sEjemplo,$sTexto1) ElseIf @error = 1 Then MsgBox($MB_OK,$sEjemplo,$sTexto2) ElseIf @error = 4 Then MsgBox($MB_OK,$sEjemplo,$sTexto3) EndIf |
1 |
_Excel_Close($oExcel[,$bSaveChanges=True[,$bForceClose=False]]) |
Ejemplo: Creamos un script con nombre ExcelClose y en ella escribimos el siguiente código.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#include <Excel.au3> Local $oExcel Local $oWorkBook Local $sTexto1 = "La UDF _Word_Close retorna el valor de: " Local $sTextoEjemplo = "Ejemplo ExcelClose" AbrirExcel() CerrarExcel() Func AbrirExcel() $oExcel = _Excel_Open() $oWorkBook = _Excel_BookNew($oExcel,3) EndFunc Func CerrarExcel() Sleep(3000) MsgBox(0,$sTextoEjemplo,$sTexto1&_Excel_Close($oExcel)) EndFunc |
Cuando ejecutemos el script, se abre la aplicación de Excel con tres hojas y luego de 3 segundos se cerrará el archivo. Como el cierre fue exitoso, entonces la función _Excel_Close devolverá el valor de 1.
