我使用this PowerShell script来演示如何获取Excel文件元数据:
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$workbook = $excel.Workbooks.Open("C:\test\excel.xls")
$binding = "System.Reflection.BindingFlags" -as [type]
foreach ($property in $workbook.BuiltInDocumentProperties) {
$pn = [System.__ComObject].InvokeMember("name", $binding::GetProperty, $null, $property, $null)
trap [System.Exception] {
Write-Host -Foreground blue "Value not found for $pn"
continue
}
"$pn`: " + [System.__ComObject].InvokeMember("value", $binding::GetProperty, $null, $property, $null)
}
$excel.Quit()
有人可以协助:
对于脚本行:
[System.__ComObject].InvokeMember("name", $binding::GetProperty, $null, $property, $null)
我理解这个[System.__ComObject]
的方式代表"类型"在foreach
循环中返回的对象。
你能解释一下为什么
[System.__ComObject]$property.InvokeMember("name", $binding::GetProperty, $null, $property, $null)
导致"陷阱"被触发?不是"对象"是在foreach
循环中返回的,$property
?
此外,我发现this Excel VBA code可以获得"上次保存时间":
Function LastModified() as Date
LastModified = ActiveWorkbook.BuiltinDocumentProperties("Last Save Time")
End Function
此代码适用于Excel VBA。那么为什么这个等效的PowerShell代码不起作用:
$lst = $workbook.BuiltinDocumentProperties("Last Save Time")
[System.__ComObject]$lst.InvokeMember("value", $binding::GetProperty, $null, $property, $null)
答案 0 :(得分:0)
当发生未以其他方式处理的终止错误时 Windows PowerShell检查脚本或命令是否检查Trap语句 处理错误。如果存在Trap语句,则为Windows PowerShell继续在陷阱中运行脚本或命令 言。
$lst = $excel.ActiveWorkbook.BuiltinDocumentProperties("Last save time") # like in VBA
$lst = $workbook.BuiltinDocumentProperties("Last Save Time") # also fine
[System.__ComObject].InvokeMember("value", $binding::GetProperty, $null, $lst, $null)
循环内的代码逻辑不同。第一行也与VBA示例不同,但该部分应该正常工作。 $(document).ready(function() {
$("#fullpage").fullpage({
scrollOverflow: true
});
});