トップ回答者
Excel の BuiltinDocumentPropertiesコレクションの内容を取得する方法

質問
-
質問は標題のとおりです。
VBScript であれば、下のようにすれば、取得/表示できます。
set objExcel = CreateObject("Excel.Application")
set objBook = objExcel.Workbooks.Add()
msgbox objBook.BuiltinDocumentProperties.Count ' 34
msgbox objBook.BuiltinDocumentProperties("Creation Date") ' 2010/12/04 18:38:55
これと同じことを PowerShell で行おうとしていますが取得できません。取得する方法を教えてください。$objExcel=(New-Object -com Excel.Application)
$objBook=$objExcel.Workbooks.Add()
$objBook.BuiltinDocumentProperties.Count # 何も表示されない
$objBook.BuiltinDocumentProperties("Creation Date") # エラー表示
$objBook.BuiltinDocumentProperties.item("Creation Date") # エラー表示
$objBook.BuiltinDocumentProperties.(1) # エラー表示
$objBook.BuiltinDocumentProperties.item(1) # エラー表示環境 : Powershell 2.0 / WinXP Professional SP3 / Excel Professional 2010
回答
-
タイプライブラリがないCOMオブジェクトはInvokeMemberメソッドを使ってメンバを実行させることができます。
$objExcel=New-Object -com Excel.Application
$objBook=$objExcel.Workbooks.Add()
$properties= $objBook.BuiltinDocumentProperties
[System.__ComObject].InvokeMember("Count",[System.Reflection.BindingFlags]::GetProperty,$null,$properties,$null) #34
$date=[System.__ComObject].InvokeMember("Item",[System.Reflection.BindingFlags]::GetProperty,$null,$properties,"Creation Date")
[System.__ComObject].InvokeMember("Value",[System.Reflection.BindingFlags]::GetProperty,$null,$date,$null) #2010/12/04 18:38:55
- 回答としてマーク 眠たい詩人 2010年12月7日 16:27
すべての返信
-
タイプライブラリがないCOMオブジェクトはInvokeMemberメソッドを使ってメンバを実行させることができます。
$objExcel=New-Object -com Excel.Application
$objBook=$objExcel.Workbooks.Add()
$properties= $objBook.BuiltinDocumentProperties
[System.__ComObject].InvokeMember("Count",[System.Reflection.BindingFlags]::GetProperty,$null,$properties,$null) #34
$date=[System.__ComObject].InvokeMember("Item",[System.Reflection.BindingFlags]::GetProperty,$null,$properties,"Creation Date")
[System.__ComObject].InvokeMember("Value",[System.Reflection.BindingFlags]::GetProperty,$null,$date,$null) #2010/12/04 18:38:55
- 回答としてマーク 眠たい詩人 2010年12月7日 16:27
-
# ありがとうございます。期待する結果が得られました。
# InvokeMemberメソッドの引数を理解できてはいませんが、まねして使わせていただきます。
# コレクションすべてを取得するコードを書いてみました。#####
# EnumProperties.ps1 : BuiltinDocumentProperties コレクションの列挙
#####
$objExcel=New-Object -com Excel.Application
$objBook=$objExcel.Workbooks.Open("D:\1\test.xlsx")
foreach ($objItm in $objBook.BuiltinDocumentProperties) {
$strNam=[System.__ComObject].InvokeMember("Name",[System.Reflection.BindingFlags]::GetProperty,$null,$objItm,$null)
try{
$strVal=[System.__ComObject].InvokeMember("Value",[System.Reflection.BindingFlags]::GetProperty,$null,$objItm,$null)
}
catch{
$strVal=""
}
finally{
$strNam+" : "+$strVal
}
}