Como posso imprimir arquivos de planilha do Excel automaticamente?

5

Minha empresa possui relatórios gerados por computador que saem como planilhas do Excel que são enviadas por e-mail para o Departamento de faturamento. Eles gostariam que esses relatórios fossem automaticamente impressos à medida que fossem recebidos.

Já encontrei um programa que faz o download automático de anexos de e-mail, chamado Mail Attachment Downloader .

Agora, idealmente, eu gostaria de um programa que:

  1. Digitalize uma pasta escolhida para novas planilhas XLS que são baixadas.
  2. Imprima-os.
  3. Livre-se deles (de preferência, movendo-os para uma pasta diferente).

Eu sei que posso apenas escrever um arquivo de lote para cuidar do # 3; e # 1 não é realmente necessário. Eu poderia ter apenas um programa executado em um determinado momento para imprimir automaticamente todos os arquivos que ele vê, em seguida, segui-lo com um arquivo em lotes para mover os arquivos em outro lugar. Mas encontrar um programa que imprima automaticamente planilhas do Excel provou ser difícil.

Tenho visto algumas macros do Excel que imprimem automaticamente uma planilha, mas quero que ela seja aberta automaticamente e todas sejam impressas automaticamente.

Um dos desafios que enfrento é que o Departamento de Cobrança ainda não tem o Microsoft Excel. Num futuro muito próximo, eles terão um computador com o Excel 2010, mas por enquanto só tem o LibreOffice.

    
por Chris 07.09.2011 / 18:50

2 respostas

4

Eu usei AutoIt para criar 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 lotes para arquivar o arquivo que acabou de ser impresso.

Aqui está o código do arquivo de script AutoIt. Eu estava batendo com a cabeça nisso por um tempo até que descobri que precisava dos comandos Sleep para que funcionasse 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 faz o trabalho. A principal desvantagem deste script é que ele fará com que o Excel lance um erro se o arquivo não existir na pasta. No entanto, ele está programado para ser executado cerca de uma hora após o envio do arquivo para mim por e-mail, para permitir atrasos inesperados.

Normalmente, o arquivo é enviado por e-mail às 5h40 todos os dias da semana. Historicamente, nunca chegou depois das 5:45. 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 o relatório dela estava esperando por ela na impressora, e ela não precisou imprimi-lo sozinha.

    
por 08.09.2011 / 16:05
3

Se o Excel estiver instalado no sistema do qual você deseja imprimi-los, você poderá usar a automação do Excel a partir do script (que pode ser iniciado a partir de ou em vez de seu arquivo em lotes).

Veja alguns exemplos no VBScript e no PowerShell:

VBscript .VBS (encontrado aqui ):

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

PowerShell .PS1 equivalente:

$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()
    
por 07.09.2011 / 19:47