Comment puis-je imprimer des feuilles de calcul Excel automatiquement?

Ma société a des rapports générés par ordinateur qui apparaissent sous forme de feuilles de calcul Excel qui sont envoyées par courrier électronique au service de facturation. Ils souhaitent que ces rapports soient automatiquement imprimés lorsqu'ils sont reçus.

J'ai déjà trouvé un programme qui téléchargera automatiquement les pièces jointes de courrier électronique, appelé Mail Attachment Downloader .

Maintenant, idéalement, je voudrais un programme qui:

  1. Numérisez un dossier choisi pour les nouvelles feuilles de calcul XLS qui sont téléchargées.
  2. Imprimez-les.
  3. Débarrassez-vous d'eux (de préférence en les déplaçant dans un autre dossier).

Je sais que je peux simplement écrire un fichier batch pour prendre soin de # 3; Et le n ° 1 n'est pas vraiment nécessaire. Je pourrais simplement avoir un programme exécuté à un certain moment pour imprimer automatiquement tous les fichiers qu'il voit, puis le suivre avec un fichier batch pour déplacer les fichiers ailleurs. Mais trouver un programme qui va imprimer automatiquement des feuilles de calcul Excel s'est révélé difficile.

J'ai vu des macros Excel qui impriment automatiquement une feuille de calcul, mais je veux qu'elles les ouvrent automatiquement et qu'elles les impriment toutes par elles-mêmes.

L'un des défis auxquels je suis confronté est que le service de facturation n'a pas encore Microsoft Excel. Dans un avenir très proche, ils auront un ordinateur avec Excel 2010, mais pour l'instant, il a simplement LibreOffice.

J'ai utilisé AutoIt pour créer un script qui ouvre Excel, ouvre le seul fichier (qui commence par "elec") dans un dossier spécifié (qui commence par "viat"), l'imprime, ferme Excel, exécute un fichier batch pour archiver le Déposez-le juste imprimé.

Voici le code du fichier de script AutoIt. J'étais en train de taper ma tête pendant un moment jusqu'à ce que j'ai découvert que j'avais besoin des commandes Sleep pour que cela fonctionne correctement.

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"") 

Et voici le code de archiver.bat:

 move "C:\ViaTrack Reports\*.*" "C:\Users\Chris\Documents\ViaTrack Archives" 

C'est un codage extrêmement simpliste, mais ça fait le travail. Le principal inconvénient de ce script est qu'il entraînera que Excel lance une erreur si le fichier n'existe pas dans le dossier. Cependant, il est prévu d'exécuter environ une heure après que le fichier me soit normalement envoyé, pour permettre tout retard inattendu.

Le fichier est normalement envoyé à 17h40 tous les jours de la semaine. Historiquement, il n'est jamais arrivé plus tard que 5:45. Mail Attachment Downloader est configuré pour vérifier les pièces jointes toutes les 15 minutes.

Cela a bien fonctionné ce matin. Le directeur du département de facturation était heureux de venir et de constater que son rapport l'attendait sur l'imprimante, et elle n'avait pas à l'imprimer elle-même.

Si Excel est installé sur le système dont vous souhaitez les imprimer, vous pouvez utiliser l'automatisation Excel à partir des scripts (dont vous pouvez lancer ou au lieu de votre fichier batch).

Voici quelques exemples dans VBScript et PowerShell:

VBscript .VBS (trouvé ici ):

 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()