5

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

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

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

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

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

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

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

2 ответа2

4

Я использовал 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 минут.

Это работало очень хорошо этим утром. Менеджер отдела выставления счетов был рад войти и обнаружить, что ее отчет ждет ее на принтере, и ей не нужно было распечатывать ее самостоятельно.

3

Если 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()

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .