none
Excel の BuiltinDocumentPropertiesコレクションの内容を取得する方法 RRS feed

  • 質問

  • 質問は標題のとおりです。

    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

    2010年12月4日 10:21

回答

  • タイプライブラリがない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月5日 17:02
    モデレータ

すべての返信

  • タイプライブラリがない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月5日 17:02
    モデレータ
  • # ありがとうございます。期待する結果が得られました。
    # 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
     }
    }

    2010年12月7日 16:26