【问题标题】:Cannot access properties of Sheet object in Powershell OpenXML无法在 Powershell OpenXML 中访问 Sheet 对象的属性
【发布时间】:2022-10-04 16:05:45
【问题描述】:

我有这个 powershell 脚本,它从xlsm 文档中写入最后一个工作表的类型:

Add-Type -Path "C:\Program Files (x86)\Open XML SDK\V2.5\lib\DocumentFormat.OpenXml.dll"
$Document = $null
$Document = [DocumentFormat.OpenXml.Packaging.SpreadsheetDocument]::Open("C:\Users\200207121\Documents\Sandbox\FastPrep_S7_Modified_AVELIA_LZB.xlsm", $false)
$Sheets = $Document.WorkbookPart.Workbook.Sheets
$LastSheet = $Sheets.LastChild
Write-Host $LastSheet.GetType()
$Document.Close()

这输出

DocumentFormat.OpenXml.Spreadsheet.Sheet

我需要确定$LastSheet 是Sheet 类型的对象,它必须具有文档中列出的所有属性。

但是,我无法访问官方文档中指定的大部分属性

Write-Host "Type is $($LastSheet.GetType())"
Write-Host "State is $($LastSheet.State)"
Write-Host "state is $($LastSheet.state)"

这输出

Type is DocumentFormat.OpenXml.Spreadsheet.Sheet
State is
state is

为什么我无法访问这些属性?我使用了错误的库吗?文档过时了吗?我的语法错了吗?

编辑:我尝试下载包的latest version,然后将其导入。这会产生完全相同的行为

【问题讨论】:

    标签: powershell openxml-sdk


    【解决方案1】:

    两件事情:

    1. 您似乎有一个实例,您可以使用 Get-Member 探索该实例的属性、方法和事件:

      尝试:

      $lastSheet | Get-Member # to see what the object can do
      
      1. 您可以通过使用出色的模块ImportExcel 完全避开这个问题

    【讨论】:

    • 我已经想到了,但出于某种原因,$LastSheet | Get-Member throwsGet-Member :您必须为 Get-Member cmdlet 指定一个对象。.我不得不使用-InputObject 而不是管道。这使我了解了我在下面作为答案发布的 SDK。
    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多