您只需将Parameter用于$ FilePath变量而不是对其进行硬编码。就像这样:
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()
,那么你会安排脚本并指定-FilePath
paramater像这样:
powershell.exe -file C:\folder\yourscript.ps1 -FilePath "C:\Users\fami\Desktop\example.xls"
编辑:要读取的文本文件的文件列表(每行一个文件)就是这样。
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()
}
我也感动了PersonalXLSB和宏PARAMS,因为他们有这个设置的值将作为默认值,如果不指定任何东西。这是最基本的形式是这样的:
powershell.exe -file C:\folder\yourscript.ps1 -FileList "C:\folder\name.text"
可以改变其他PARAMS这样的:
powershell.exe -file C:\folder\yourscript.ps1 -FileList "C:\folder\name.text" -RunMacro="PERSONAL.XLSB!macroname"
是,这是我所想象。仍然无法安排脚本,只是尝试与任务计划程序,但它不工作。写一个脚本来安排时间会更好吗? –
可能是因为你需要脚本在任务调度器中的完整路径:'powershell.exe -file C:\ folder \ yourscript.ps1 -FilePath“C:\ Users \ fami \ Desktop \ example.xls”' –
完美...我是否有可能在-FilePath中变得更加可变......就像从文本文件中读取路径......例如在循环中。 –