如何使用powershell运行具有不同路径的个人宏

时间:2016-11-24 15:23:50

标签: excel vba powershell macros

我正在尝试从excel文件中自动创建报告。我已经分析了一个特定文件,报告已保存在本地。

现在我想使用此宏在其他文件上运行它。因此,我必须改变powershell中的路径。

现在我想用powershell自动运行宏(让我们说凌晨1点)。

$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()

只有$FilePath需要变量。

1 个答案:

答案 0 :(得分:0)

您只需要使用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参数,如下所示:

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和Macro移动到Params,因为它们有一个值集,如果你没有指定其他内容,这将被用作默认值。它最基本的形式是这样的:

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

你可以像这样更改其他参数:

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