如何通过PowerShell自动化打开Excel工作簿

11
我想打开一个 Excel 工作簿并读取数据,进行其他各种操作等。我知道我必须添加程序集引用:

我想打开一个 Excel 工作簿并读取数据,进行其他各种操作等。我知道我必须添加程序集引用:

 [Reflection.Assembly]::LoadFile("C:\Program Files\Microsoft Office\Office16\ADDINS\Microsoft Power Query for Excel Integrated\bin\Microsoft.Office.Interop.Excel.dll")

然后我需要实例化一个Application对象。

$workbook = New-Object -TypeName Microsoft.Office.Interop.Excel.Application

然而,这会返回一个错误"A constructor was not found"。

顺便提一下,Microsoft.Office.Interop.Excel.Application 实际上是一个接口吗?我想知道在这种情况下它如何被实例化。


根据您需要对文档执行的具体操作,可以查看Doug Finke的ImportExcel,或将其用作ODBC数据源。对于某些任务,这些方法比自动化Excel本身要快得多且更容易。 - alroc
4个回答

23

你需要将其作为ComObject打开。

$Excel = New-Object -ComObject Excel.Application
$Workbook = $Excel.Workbooks.Open($FilePath)
在这个例子中,您需要将$FilePath定义为您尝试打开的Excel文件的完整路径。

16

我找到了一个不错的代码片段,它也运行一个宏,链接在这里

# start Excel
$excel = New-Object -comobject Excel.Application

#open file
$FilePath = 'C:\temp\Book1.xlsm'
$workbook = $excel.Workbooks.Open($FilePath)

#make it visible (just to check what is happening)
$excel.Visible = $true

#access the Application object and run a macro
$app = $excel.Application
$app.Run("Macro1")

1
在 $app.Run("Macro1") 中,Macro1 是指什么?是文件还是变量? - Geoff Langenderfer
1
@GeoffLangenderfer 说实话,我记不太清了,因为我是一段时间前发布这个答案的。我猜这可能是宏文件中的 Sub() 的名称。请参阅 https://learn.microsoft.com/en-us/office/vba/api/excel.application.run 上的文档。 - ThomasMX
$excel.Visible = $true非常有用,可以使电子表格可见。 - Simon Elms
可能只有我需要这样指定才能使其工作。否则,由于我的语言模式,会出现有关核心类型的错误。 $excel.Application.Visible = $true - zinen

0

让Windows为您处理繁琐的部分:

explorer.exe $filename

简单易行 :)


这个方法可行且是最简单的答案。 - Dicky Moore
答案与问题最相关。 - Pulia Zlaya

0

如果你只是将路径添加到变量$FilePath中而不加引号,它将会自动打开:

$FilePath = C:\temp\tempfile.csv

唯一的问题是,如果您没有正确关闭 Excel 上的文件,则下次运行它时,它将以 只读 的方式打开,您必须在任务管理器上终止该进程。

根据需求和编码的不同,有时简单就是最好的选择。


CSV文件不是Excel文件。Excel可以打开它,但它只是带有逗号分隔值的文本(因此得名)。本地Excel XLS文件是二进制的,定义在这里。较新的XLSX文件是使用Office Open XML标准(ECMA-376ISO/IEC 29500:2008)中的数据的ZIP容器。 - Tony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接