如何自動列印 Excel 電子表格檔案?

如何自動列印 Excel 電子表格檔案?

我的公司有電腦產生的報告,這些報告以 Excel 電子表格的形式透過電子郵件發送給計費部門。他們希望在收到這些報告時自動列印這些報告。

我已經找到了一個可以自動下載電子郵件附件的程序,名為郵件附件下載器

現在理想情況下,我想要一個程序,該程序將:

  1. 掃描所選資料夾以尋找下載的新 XLS 電子表格。
  2. 將它們列印出來。
  3. 刪除它們(最好將它們移動到不同的資料夾)。

我知道我可以編寫一個批次檔來處理#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()

相關內容