2017-12-01 44 views
0

私は数年前に書いたPowerShellスクリプトを持っています。PowerShellを使用してフォルダ内のすべてのExcelファイルを印刷する

$shell = New-Object -com Shell.Application 
$filepath = 'C:\Billing\Clients' 

$shell.Namespace($filepath).Items() | 
% { $_.InvokeVerb('Print') } 

C:\ Billing \ Clientsフォルダには、〜100個のExcelファイルがコピーされます。これらの各Excelファイルは、ファイル名のアルファベット順に印刷する必要があります。

これは今月までうまくいっていました。私は、Excelへのアップデートで変更されたものを推測します。

スクリプトは、同時にすべてのExcelファイルを開いて印刷しようとします。以前はファイルをシリアルで印刷していました。

これは素晴らしいものでした。今では私のシステムは無秩序になり、文書はランダムな順序で印刷されます。

印刷操作を呼び出して、次のファイルで印刷操作を呼び出す前に完了するまで待つ方法については、

答えて

1

私は過去にこれを使用してファイルをExcelに取り込んで印刷しました。デフォルトの印刷設​​定が最初に設定されていることを確認するか、$xl.ActivePrinter = "PRINTERNAME AS EXCEL SEES IT"を使用して最初に設定する必要があります。

#Open Excel 
$xl = new-object -comobject excel.application 
#don't show the window 
$xl.visible = $false 
#get all of your files 
get-childitem "C:\SOME\Path" "*.xlsx" | foreach-object { 
    #open file 
    $wb = $xl.Workbooks.Open($_.FullName) 
    #print with defaults 
    $wb.PrintOut() 
    #close without saving any changes 
    $wb.Close($false) 
} 
#all done so close excel 
$xl.Quit() 
+0

ありがとう、スティーブン!あなたのスクリプトは素晴らしい作品です! –

+0

私が仕事をすることができないのは、$ xl.ActivePrinterコマンドだけです。私は$ xl.visibleプロパティの直後に置いて、プリンタ名をExcelにリストされている名前に設定します。成功しません。コントロールパネルでデフォルトのプリンタを手動で設定すると効果的です。 –

+0

プリンタを稼働させました。 $ xl.ActivePrinterコマンドは$ wb.PrintOutの直前にあります。プリンタ名を取得するには、Powershellウィンドウを開き、コントロールパネルのデフォルトとして設定されているプリンタで次のコマンドを実行し、正しい名前を取得します。 $ xl = New-Object -comobject excel.application $ xl.ActivePrinter スクリプトでコピーして使用できる印刷名を印刷します。 –

関連する問題