web-dev-qa-db-ja.com

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

私の会社には、請求部門に電子メールで送信されるExcelスプレッドシートとして出力されるコンピューター生成レポートがあります。彼らは、これらのレポートが受信されたときに自動的に印刷されることを望んでいます。

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

理想的には、次のようなプログラムが必要です。

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

私は#3の世話をするためにバッチファイルを書くことができることを知っています。 #1は本当に必要ではありません。特定の時間にプログラムを実行して、表示されたファイルを自動的に印刷してから、バッチファイルを実行してファイルを別の場所に移動することができます。しかし、Excelスプレッドシートを自動的に印刷するプログラムを見つけるのは難しいことがわかっています。

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

私が直面している課題の1つは、請求部門がまだMicrosoftExcelを持っていないことです。非常に近い将来、Excel 2010を搭載したコンピューターが登場する予定ですが、今のところ、LibreOfficeだけが搭載されています。

6
Chris

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分ごとに新しい添付ファイルをチェックするように設定されています。

今朝はうまくいきました。請求部門のマネージャーは喜んで来て、彼女のレポートがプリンターで彼女を待っていることを知り、彼女はそれを自分で印刷する必要はありませんでした。

5
Chris

印刷元のシステムに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()
3