
Mi empresa tiene informes generados por computadora que aparecen como hojas de cálculo de Excel que se envían por correo electrónico al Departamento de Facturación. Quieren que estos informes se impriman automáticamente a medida que se reciben.
Ya encontré un programa que descargará automáticamente archivos adjuntos de correo electrónico, llamadoDescargador de archivos adjuntos de correo.
Ahora, idealmente, me gustaría un programa que:
- Escanee una carpeta elegida en busca de nuevas hojas de cálculo XLS que se descarguen.
- Imprímelos.
- Deshágase de ellos (preferiblemente moviéndolos a una carpeta diferente).
Sé que puedo escribir un archivo por lotes para encargarme del n.º 3; y el número 1 no es realmente necesario. Podría ejecutar un programa en un momento determinado para imprimir automáticamente cualquier archivo que vea y luego seguirlo con un archivo por lotes para mover los archivos a otro lugar. Pero ha resultado difícil encontrar un programa que imprima automáticamente hojas de cálculo de Excel.
He visto algunas macros de Excel que imprimen automáticamente una hoja de cálculo, pero quiero que las abra e imprima automáticamente por sí solo.
Uno de los desafíos que enfrento es que el Departamento de Facturación aún no tiene Microsoft Excel. En un futuro muy cercano tendrán una computadora con Excel 2010, pero por ahora solo tiene LibreOffice.
Respuesta1
Utilicé AutoIt para crear un script que abre Excel, abre el único archivo (que comienza con "elec") en una carpeta específica (que comienza con "viat"), lo imprime, cierra Excel y luego ejecuta un archivo por lotes para archivar el archívelo recién impreso.
Aquí está el código del archivo de script de AutoIt. Estuve golpeándome la cabeza con esto por un tiempo hasta que descubrí que necesitaba los comandos de suspensión para que funcionara correctamente.
Run("C:\Program Files (x86)\Microsoft Office\Office14\Excel.exe")
WinWaitActive("Microsoft Excel")
Send("^o")
WinWaitActive("Open")
ControlClick("Open", "", 1148)
Send("c:\viat{DOWN}{ENTER}")
Sleep(1000)
Send("elec")
Sleep(1000)
Send("{DOWN}{ENTER}")
WinWaitActive("Microsoft Excel")
Send("^p")
Sleep(1000)
Send("{ENTER}")
Sleep(1000)
WinClose("Microsoft Excel")
Sleep(1000)
Run(""C:\Users\Chris\Documents\ViaTrack Archives\archiver.bat"")
Y aquí está el código de archiver.bat:
move "C:\ViaTrack Reports\*.*" "C:\Users\Chris\Documents\ViaTrack Archives"
Es una codificación extremadamente simplista, pero hace el trabajo. El principal inconveniente de este script es que hará que Excel arroje un error si el archivo no existe en la carpeta. Sin embargo, está programado para ejecutarse aproximadamente una hora después de que normalmente me envían el archivo por correo electrónico, para permitir retrasos inesperados.
Normalmente, el archivo se envía por correo electrónico a las 5:40 a. m. todos los días laborables. Históricamente, nunca llega más tarde de las 5:45. Mail Attachment Downloader está configurado para buscar nuevos archivos adjuntos cada 15 minutos.
Funcionó muy bien esta mañana. La gerente del departamento de facturación se alegró de entrar y descubrir que su informe la estaba esperando en la impresora y que no tenía que imprimirlo ella misma.
Respuesta2
Si Excel está instalado en el sistema desde el que desea imprimirlos, puede utilizar la automatización de Excel desde secuencias de comandos (que puede iniciar desde su archivo por lotes o en lugar de él).
Aquí hay un par de ejemplos en VBScript y PowerShell:
VBscript .VBS (encontradoaquí):
Dim XLApp
Dim XLWkbk
Dim ObjArgs
set ObjArgs = wscript.arguments
if ObjArgs.count <> 1 then
wscript.echo "Invalid passed arguments"
wscript.quit
end if
Set XLApp = CreateObject("Excel.Application")
XLApp.Visible = False
Set XLWkbk = XLApp.Workbooks.Open(objargs(0))
XLWkbk.PrintOut
XLWkbk.Close False
XLApp.Quit
Set XLWkbk = Nothing
Set XLApp = Nothing
Set ObjArgs = nothing
Equivalente a PowerShell .PS1:
$excelApp = New-Object -comobject Excel.Application
if ($args.Length -lt 1)
{
Write-Host "Please provide full path and filename (ie: `"c:\books\excelfile.xlsx`")"
Exit
}
$excelBook = $excelApp.Workbooks.Open($args[0])
$excelBook.PrintOut()
$excelApp.Quit()