如何自动打印 Excel 电子表格文件?

如何自动打印 Excel 电子表格文件?

我公司有计算机生成的报告,这些报告以 Excel 电子表格的形式通过电子邮件发送给结算部门。他们希望这些报告在收到后自动打印。

我已经找到了一个可以自动下载电子邮件附件的程序,叫做邮件附件下载器

现在理想情况下,我想要一个可以实现以下功能的程序:

  1. 扫描选定的文件夹以查找下载的新 XLS 电子表格。
  2. 将其打印出来。
  3. 删除它们(最好将它们移动到不同的文件夹)。

我知道我可以编写一个批处理文件来处理第 3 项;第 1 项其实没有必要。我可以让一个程序在特定时间运行,自动打印出它看到的任何文件,然后使用批处理文件将文件移动到其他地方。但事实证明,找到一个可以自动打印 Excel 电子表格的程序很困难。

我见过一些可以自动打印电子表格的 Excel 宏,但我希望它能自动打开它们并自行打印。

我面临的挑战之一是结算部门还没有 Microsoft Excel。在不久的将来,他们将拥有一台装有 Excel 2010 的计算机,但目前只有 LibreOffice。

答案1

我使用 AutoIt 编写了一个脚本,打开 Excel,打开指定文件夹(以“viat”开头)中唯一的文件(以“elec”开头),打印该文件,关闭 Excel,然后运行批处理文件来存档刚刚打印的文件。

这是 AutoIt 脚本文件的代码。我为此绞尽脑汁了一段时间,直到我发现我需要 Sleep 命令才能使其正常工作。

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

相关内容