【问题标题】:How to open excel workbook from powershell for automation如何从powershell打开excel工作簿进行自动化
【发布时间】:2016-06-06 19:09:42
【问题描述】:

我想打开一个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

然而,这会返回错误“未找到构造函数” 顺便说一句,Microsoft.Office.Interop.Excel.Application 实际上不是一个接口吗?我想知道如何在this 场景中实例化它。

【问题讨论】:

  • 根据您需要对文档执行的具体操作,查看 Doug Finke 的 ImportExcel,或将其用作 ODBC 数据源。对于某些任务,这些将比自动执行 Excel 本身快得多

标签: .net excel powershell automation


【解决方案1】:

您需要将其作为 ComObject 打开。

$Excel = New-Object -ComObject Excel.Application
$Workbook = $Excel.Workbooks.Open($FilePath)

在该示例中,您需要将 $FilePath 定义为您尝试打开的 Excel 文件的完整路径。

【讨论】:

    【解决方案2】:

    我找到了一个不错的 sn-p,它还运行一个宏 here

    # 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")
    

    【讨论】:

    • 在 $app.Run("Macro1") 中,Macro1 引用了什么?一份文件?变量?
    • @GeoffLangenderfer TBH 我不太记得了,因为我不久前发布了这个答案。我猜它是任一宏文件中的 Sub() 的名称。请参阅docs.microsoft.com/en-us/office/vba/api/excel.application.run的 doco@
    • $excel.Visible = $true 对使电子表格可见非常有用。
    【解决方案3】:

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

    $FilePath = C:\temp\tempfile.csv
    

    唯一的问题是,如果你没有在 Excel 上正确关闭文件,下次运行它时,它会以 READ ONLY 的形式打开,你必须在 TASK 管理器上终止该进程。

    根据需要和编码,有时简单的效果最好。

    【讨论】:

    • CSV 文件不是 Excel 文件。 Excel 可以打开它,但它只是带有逗号分隔值的文本(因此得名)。本机 Excel XLS 文件是二进制文件,定义为 here。较新的 XLSX 文件是 ZIP 容器,其数据符合 Office Open XML 标准(ECMA-376ISO/IEC 29500:2008)。
    【解决方案4】:

    让 Windows 为您处理最困难的部分:

    explorer.exe $文件名

    简单:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多