
Minha empresa possui relatórios gerados por computador que saem como planilhas Excel e são enviados por e-mail ao Departamento de Faturamento. Eles gostariam que esses relatórios fossem impressos automaticamente à medida que fossem recebidos.
Já encontrei um programa que baixa automaticamente anexos de e-mail, chamadoDownloader de anexos de e-mail.
Agora, idealmente, eu gostaria de um programa que:
- Digitalize uma pasta escolhida em busca de novas planilhas XLS baixadas.
- Imprima-os.
- Livre-se deles (de preferência movendo-os para uma pasta diferente).
Eu sei que posso simplesmente escrever um arquivo em lote para cuidar do número 3; e o número 1 não é realmente necessário. Eu poderia simplesmente executar um programa em um determinado momento para imprimir automaticamente todos os arquivos que ele vê e, em seguida, seguir com um arquivo em lote para mover os arquivos para outro lugar. Mas encontrar um programa que imprima automaticamente planilhas do Excel tem se mostrado difícil.
Já vi algumas macros do Excel que imprimem automaticamente uma planilha, mas quero que ele as abra automaticamente e as imprima sozinha.
Um dos desafios que enfrento é que o Departamento de Faturamento ainda não possui o Microsoft Excel. Num futuro muito próximo terão um computador com Excel 2010, mas por enquanto só tem o LibreOffice.
Responder1
Usei o AutoIt para fazer um script que abre o Excel, abre o único arquivo (que começa com "elec") em uma pasta especificada (que começa com "viat"), imprime, fecha o Excel e executa um arquivo em lote para arquivar o arquivo que acabou de ser impresso.
Aqui está o código do arquivo de script AutoIt. Fiquei batendo cabeça nisso por um tempo, até descobrir que precisava dos comandos Sleep para fazê-lo funcionar corretamente.
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"")
E aqui está o código do archiver.bat:
move "C:\ViaTrack Reports\*.*" "C:\Users\Chris\Documents\ViaTrack Archives"
É uma codificação extremamente simplista, mas dá conta do recado. A principal desvantagem desse script é que ele fará com que o Excel gere um erro se o arquivo não existir na pasta. No entanto, ele está programado para ser executado cerca de uma hora depois que o arquivo normalmente é enviado para mim por e-mail, para permitir atrasos inesperados.
O arquivo normalmente é enviado por e-mail às 5h40 todos os dias da semana. Historicamente, nunca chega depois das 17h45. O Mail Attachment Downloader está configurado para verificar novos anexos a cada 15 minutos.
Funcionou muito bem esta manhã. A Gerente do Departamento de Faturamento ficou feliz em entrar e descobrir que seu relatório estava esperando por ela na impressora e ela não precisava imprimi-lo sozinha.
Responder2
Se o Excel estiver instalado no sistema a partir do qual você deseja imprimi-los, você poderá usar a automação do Excel a partir de scripts (que podem ser iniciados a partir do arquivo em lote ou em vez dele).
Aqui estão alguns exemplos em VBScript e PowerShell:
VBscript .VBS (encontradoaqui):
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 ao 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()