
我的公司有電腦產生的報告,這些報告以 Excel 電子表格的形式透過電子郵件發送給計費部門。他們希望在收到這些報告時自動列印這些報告。
我已經找到了一個可以自動下載電子郵件附件的程序,名為郵件附件下載器。
現在理想情況下,我想要一個程序,該程序將:
- 掃描所選資料夾以尋找下載的新 XLS 電子表格。
- 將它們列印出來。
- 刪除它們(最好將它們移動到不同的資料夾)。
我知道我可以編寫一個批次檔來處理#3;而#1 並不是真正必要的。我可以在某個時間運行一個程式來自動列印它看到的任何文件,然後使用批次文件將文件移動到其他地方。但事實證明,要找到一個能夠自動列印 Excel 電子表格的程式是很困難的。
我看過一些自動列印電子表格的Excel宏,但我希望它能自動開啟它們並自行列印它們。
我面臨的挑戰之一是計費部門還沒有 Microsoft Excel。在不久的將來,他們將擁有一台裝有 Excel 2010 的計算機,但目前只有 LibreOffice。
答案1
我使用 AutoIt 製作了一個腳本,該腳本打開 Excel,打開指定資料夾(以“viat”開頭)中的唯一文件(以“elec”開頭),列印它,關閉 Excel,然後運行批次文件以存檔將剛剛列印的文件歸檔。
這是 AutoIt 腳本檔案的程式碼。我為此苦苦思索了一段時間,直到我發現我需要睡眠命令才能使其正常工作。
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"")
這是 archiver.bat 的程式碼:
move "C:\ViaTrack Reports\*.*" "C:\Users\Chris\Documents\ViaTrack Archives"
這是極其簡單的編碼,但它可以完成工作。該腳本的主要缺點是,如果資料夾中不存在該文件,它將導致 Excel 拋出錯誤。但是,它計劃在文件通常通過電子郵件發送給我後大約一個小時運行,以允許任何意外的延遲。
該文件通常在每個工作日的凌晨 5:40 透過電子郵件發送。從歷史上看,它從來不會晚於 5 點 45 分到達。郵件附件下載程式設定為每 15 分鐘檢查一次新附件。
今天早上效果很好。計費部門經理很高興地進來,發現她的報告已經在印表機上等著她了,而她不必自己列印出來。
答案2
如果 Excel 安裝在您要從中列印它們的系統上,則您可以透過腳本使用 Excel 自動化(您可以從批次檔啟動,或取代批次檔啟動)。
以下是 VBScript 和 PowerShell 中的幾個範例:
VBscript .VBS(發現這裡):
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 等價項:
$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()