Excel スプレッドシート ファイルを自動的に印刷するにはどうすればよいですか?

Excel スプレッドシート ファイルを自動的に印刷するにはどうすればよいですか?

私の会社では、コンピュータで生成されたレポートを Excel スプレッドシートとして作成し、請求部門に電子メールで送信しています。請求部門では、これらのレポートを受信時に自動的に印刷したいと考えています。

私はすでに、電子メールの添付ファイルを自動的にダウンロードするプログラムを見つけました。メール添付ファイルダウンローダー

理想的には、次のようなプログラムが望ましいです。

  1. 選択したフォルダーをスキャンして、ダウンロードされた新しい XLS スプレッドシートを探します。
  2. 印刷してください。
  3. それらを削除します (できれば別のフォルダーに移動します)。

3 番の処理にはバッチ ファイルを作成すればいいことはわかっています。1 番は実際には必要ありません。特定の時間にプログラムを実行して、見つかったファイルを自動的に印刷し、その後にバッチ ファイルを実行してファイルを別の場所に移動するだけで済みます。しかし、Excel スプレッドシートを自動的に印刷するプログラムを見つけるのは難しいことがわかりました。

スプレッドシートを自動的に印刷する Excel マクロをいくつか見たことがありますが、それらをすべて自動的に開いて印刷できるようにしたいです。

私が直面している課題の 1 つは、請求部門にまだ 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 がエラーをスローすることです。ただし、予期しない遅延に備えて、ファイルが通常電子メールで送信されてから約 1 時間後に実行されるようにスケジュールされています。

通常、ファイルは平日の午前 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()

関連情報