
Meine Firma erstellt computergenerierte Berichte in Form von Excel-Tabellen, die per E-Mail an die Rechnungsabteilung gesendet werden. Sie möchten, dass diese Berichte automatisch ausgedruckt werden, sobald sie eintreffen.
Ich habe bereits ein Programm gefunden, das E-Mail-Anhänge automatisch herunterlädt, genanntDownloader für E-Mail-Anhänge.
Im Idealfall hätte ich gerne ein Programm, das:
- Durchsuchen Sie einen ausgewählten Ordner nach neuen heruntergeladenen XLS-Tabellen.
- Drucken Sie sie aus.
- Entfernen Sie sie (vorzugsweise indem Sie sie in einen anderen Ordner verschieben).
Ich weiß, dass ich einfach eine Batchdatei schreiben kann, um mich um Nr. 3 zu kümmern; und Nr. 1 ist nicht wirklich notwendig. Ich könnte einfach ein Programm zu einer bestimmten Zeit ausführen lassen, das automatisch alle Dateien ausdruckt, die es sieht, und dann eine Batchdatei folgen lassen, um die Dateien woanders hin zu verschieben. Aber es hat sich als schwierig erwiesen, ein Programm zu finden, das automatisch Excel-Tabellen druckt.
Ich habe einige Excel-Makros gesehen, die automatisch eine Tabelle drucken, aber ich möchte, dass sie automatisch geöffnet und ganz von selbst gedruckt werden.
Eine der Herausforderungen, mit denen ich konfrontiert bin, ist, dass die Rechnungsabteilung noch kein Microsoft Excel hat. In naher Zukunft werden sie einen Computer mit Excel 2010 haben, aber im Moment ist dort nur LibreOffice installiert.
Antwort1
Ich habe AutoIt verwendet, um ein Skript zu erstellen, das Excel öffnet, die einzige Datei (die mit „elec“ beginnt) in einem angegebenen Ordner (der mit „viat“ beginnt) öffnet, sie druckt, Excel schließt und dann eine Batchdatei ausführt, um die gerade gedruckte Datei zu archivieren.
Hier ist der Code der AutoIt-Skriptdatei. Ich habe mir eine Weile den Kopf darüber zerbrochen, bis ich herausfand, dass ich die Sleep-Befehle brauchte, damit es richtig funktioniert.
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"")
Und hier ist der Code von archiver.bat:
move "C:\ViaTrack Reports\*.*" "C:\Users\Chris\Documents\ViaTrack Archives"
Es ist eine extrem vereinfachte Codierung, aber sie erledigt die Aufgabe. Der Hauptnachteil dieses Skripts besteht darin, dass es dazu führt, dass Excel einen Fehler ausgibt, wenn die Datei nicht im Ordner vorhanden ist. Es ist jedoch so geplant, dass es etwa eine Stunde nach dem normalen Versand der Datei per E-Mail an mich ausgeführt wird, um unerwartete Verzögerungen zu berücksichtigen.
Die Datei wird normalerweise jeden Werktag um 5:40 Uhr per E-Mail verschickt. In der Vergangenheit kam sie nie später als 5:45 Uhr an. Mail Attachment Downloader ist so eingestellt, dass alle 15 Minuten nach neuen Anhängen gesucht wird.
Heute Morgen hat es einwandfrei funktioniert. Die Leiterin der Rechnungsabteilung war froh, als sie hereinkam und feststellte, dass ihr Bericht bereits auf dem Drucker auf sie wartete und sie ihn nicht selbst ausdrucken musste.
Antwort2
Wenn Excel auf dem System installiert ist, von dem Sie drucken möchten, können Sie die Excel-Automatisierung per Skript verwenden (das Sie von Ihrer Batchdatei aus oder anstelle dieser starten können).
Hier sind einige Beispiele in VBScript und PowerShell:
VBscript .VBS (gefundenHier):
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-Äquivalent:
$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()