Как автоматически распечатать файлы электронных таблиц Excel?

Как автоматически распечатать файлы электронных таблиц Excel?

В моей компании есть компьютерные отчеты, которые выводятся в виде таблиц Excel и отправляются по электронной почте в отдел выставления счетов. Они хотели бы, чтобы эти отчеты автоматически распечатывались по мере их получения.

Я уже нашел программу, которая автоматически загружает вложения электронной почты, она называетсяЗагрузчик почтовых вложений.

В идеале мне бы хотелось программу, которая:

  1. Сканируйте выбранную папку на предмет новых загруженных электронных таблиц XLS.
  2. Распечатайте их.
  3. Избавьтесь от них (желательно переместив их в другую папку).

Я знаю, что могу просто написать пакетный файл, чтобы позаботиться о #3; а #1 на самом деле не нужен. Я мог бы просто запустить программу в определенное время, чтобы автоматически распечатать все файлы, которые она видит, а затем запустить пакетный файл, чтобы переместить файлы куда-то еще. Но найти программу, которая будет автоматически распечатывать таблицы Excel, оказалось непросто.

Я видел несколько макросов Excel, которые автоматически печатают электронные таблицы, но я хочу, чтобы они автоматически открывались и печатались самостоятельно.

Одна из проблем, с которой я сталкиваюсь, заключается в том, что в отделе выставления счетов пока нет Microsoft Excel. В самом ближайшем будущем у них появится компьютер с Excel 2010, но пока там есть только LibreOffice.

решение1

Я использовал AutoIt для создания скрипта, который открывает Excel, открывает единственный файл (начинающийся с «elec») в указанной папке (начинающейся с «viat»), печатает его, закрывает 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"")

А вот код архиватора.bat:

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

Это чрезвычайно упрощенный код, но он выполняет свою работу. Главный недостаток этого скрипта в том, что он заставит Excel выдать ошибку, если файл не существует в папке. Однако он запланирован на запуск примерно через час после того, как файл обычно отправляется мне по электронной почте, чтобы учесть любые непредвиденные задержки.

Файл обычно отправляется по электронной почте в 5:40 утра каждый будний день. Исторически он никогда не приходил позже 5:45. Mail Attachment Downloader настроен на проверку новых вложений каждые 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()

Связанный контент