2016-11-24 2 views
0

Ich versuche, einen Bericht aus einer Excel-Datei automatisch zu erstellen. Ich habe bereits eine bestimmte Datei analysiert und den Bericht lokal gespeichert.So verwenden Sie Powershell, um persönliches Makro mit verschiedenen Pfaden auszuführen

Jetzt möchte ich dieses Makro verwenden, um es auf anderen Dateien auszuführen. Daher muss ich den Pfad in der Powershell ändern.

Jetzt möchte ich das Makro automatisch (sagen wir um 1 Uhr) mit Powershell ausführen.

$excel = New-Object -comobject Excel.Application 
$wbPersonalXLSB = $excel.workbooks.open("C:\Users\fami\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB") 
$FilePath = "C:\Users\fami\Desktop\example.xls" 
$workbook = $excel.Workbooks.Open($FilePath) 
$excel.Visible = $false 
$worksheet = $workbook.worksheets.item(1) 
$excel.Run("PERSONAL.XLSB!run") 
$wbPersonalXLSB.Close() 
$workbook.save() 
$workbook.close() 
$excel.quit() 

Nur die $FilePath muss variabel sein.

Antwort

0

Sie müssen nur eine Parameter für die Variable $ FilePath anstelle von hart codieren. Wie folgt aus:

param([string]$FilePath) 

$excel = New-Object -comobject Excel.Application 
$wbPersonalXLSB = $excel.workbooks.open("C:\Users\fami\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB") 
$workbook = $excel.Workbooks.Open($FilePath) 
$excel.Visible = $false 
$worksheet = $workbook.worksheets.item(1) 
$excel.Run("PERSONAL.XLSB!run") 
$wbPersonalXLSB.Close() 
$workbook.save() 
$workbook.close() 
$excel.quit() 

Dann würden Sie das Skript planen und geben Sie die -FilePath Paramater wie so:

powershell.exe -file C:\folder\yourscript.ps1 -FilePath "C:\Users\fami\Desktop\example.xls" 

EDIT: Um eine Liste von Dateien aus einer Textdatei zu lesen (mit eine Datei in jeder Zeile) wäre das.

param(
    [string]$FileList, 
    [string]$PersonalXLSB="C:\Users\fami\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB", 
    [string]$RunMacro="PERSONAL.XLSB!run" 
) 

$Files = Get-Content $FileList 

foreach ($FilePath in $Files) { 
    $excel = New-Object -comobject Excel.Application 
    $wbPersonalXLSB = $excel.workbooks.open($PersonalXLSB) 
    $workbook = $excel.Workbooks.Open($FilePath) 
    $excel.Visible = $false 
    $worksheet = $workbook.worksheets.item(1) 
    $excel.Run($RunMacro) 
    $wbPersonalXLSB.Close() 
    $workbook.save() 
    $workbook.close() 
    $excel.quit() 
} 

Ich habe bewegt auch die PersonalXLSB und Makro zu Params, da sie einen Wert diese haben wird als Standard verwendet werden, wenn Sie nichts anderes angeben. Es ist grundlegendsten Form ist wie folgt:

powershell.exe -file C:\folder\yourscript.ps1 -FileList "C:\folder\name.text" 

Sie können die anderen params wie folgt ändern:

powershell.exe -file C:\folder\yourscript.ps1 -FileList "C:\folder\name.text" -RunMacro="PERSONAL.XLSB!macroname" 
+0

Ja das ist, wie ich dachte. Kann das Skript immer noch nicht planen, habe es nur mit dem Taskplaner versucht, aber es funktioniert nicht. Ist es besser, ein Skript zum Planen zu schreiben? –

+0

Kann sein, weil Sie den vollständigen Pfad Ihres Skripts im Taskplaner benötigen: 'powershell.exe -file C: \ Ordner \ yenscript.ps1 -FilePath" C: \ Benutzer \ fami \ Desktop \ example.xls "' –

+0

Funktioniert perfekt ... habe ich die Möglichkeit, im Filepath variabler zu sein ... wie die Pfade aus einer Textdatei zu lesen ... zum Beispiel in einer Schleife. –

Verwandte Themen