none
Outlook2016のビューのエクスポート/インポートをVBScriptではなく、PowerShellに置き換える方法について RRS feed

  • 質問

  • 【環境】Windows 10 Enterprise 2016 LTSB,Outlook 2016

    【ご教示いただきたい点】

    Outlook2016のビューをエクスポート/インポートするVBScriptですが、これをPowerShellで記述する方法についてご教示いただけますでしょうか。

     On Error Resume Next 
    
     Const VIEW_XML = "D:\OUTLOOK_BACKUP\current.view" ' エクスポート先のファイル名 
    Dim olkApp 
    Dim objFSO 
    Dim curView 
    Dim stmXml 
    Dim strXml 
    Set olkApp = CreateObject("Outlook.Application") 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    Set curView = olkApp.ActiveExplorer.CurrentFolder.CurrentView 
    strXml = curView.XML 
    Set stmXml = objFSO.CreateTextFile(VIEW_XML) 
    ' 1 行目はビューの名前と種類 
    stmXml.WriteLine curView.Name & vbTab & curView.ViewType 
    stmXml.Write strXml 
    stmXml.Close
    

     On Error Resume Next
    Const VIEW_XML = "D:\OUTLOOK_BACKUP\current.view" ' インポート先のファイル名
    Dim olkApp
    Dim objFSO
    Dim stmXml
    Dim strLine
    Dim arrLine
    Dim colViews
    Dim curView
    Set olkApp = CreateObject("Outlook.Application")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set stmXml = objFSO.OpenTextFile(VIEW_XML, 1)
    ' 1 行目はビューの名前と種類
    strLine = stmXml.ReadLine
    arrLine = Split(strLine, vbTab)
    Set colViews = olkApp.ActiveExplorer.CurrentFolder.Views
    Set curView = colViews.Add(arrLine(0), arrLine(1), 0)
    If Err.Number = 5 Then ' 同名のビューが存在した場合のエラー処理
    For Each curView In colViews
    ' 同名のビューを検索
    If curView.Name = arrLine(0) Then
    Exit For
    End If
    Next
    End If
    curView.XML = stmXml.ReadAll
    curView.Save
    curView.Apply
    stmXml.Close
    

    2019年8月13日 13:22

回答

  • $VIEW_XML = 'D:\OUTLOOK_BACKUP\current.view'  #インポート元のファイル名
    $OLApp = New-Object -comobject Outlook.Application
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.XML = [string](Get-Content $VIEW_XML)
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.Apply()
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.Save()
    [System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($OLApp)
    $OLApp = $null
    

    インポート処理修正

    2019年8月20日 4:09
  • SaveとApplyの実行順序が逆になっている気がします。
    2019年8月20日 22:26
    モデレータ
  • ($OLApp.ActiveExplorer()).CurrentFolder

    のメンバー確認したところ、CurrentViewは get のみでsetがありませんでした。記載した方法では変更できないのかもしれません。

    2019年8月21日 0:30

すべての返信

  • Enginner480907さん、こんにちは。フォーラムオペレーターのFarenaです。

    TechNetフォーラムにご投稿くださいましてありがとうございます。

     

    PowerShellに置き換える中何か問題点かありましたか?

    可能であれば、もう少し詳細な状況を共有いただくことで他のユーザー様よりのご意見が集まりやすくなります。

     

    どうぞよろしくお願いいたします。


    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    2019年8月16日 5:30
    モデレータ
  • Outlook2016のビューのインポート/エクスポートを行うためのVBScriptがありますが、PowerShellで以下のような情報も取得するため、インポート/エクスポートを行うためのVBScriptをPowrShellで作成しているプログラム内に組み入れたいと考えています。PowerShellには詳しくないため、インポート/エクスポートを行うためのVBScriptをPowerShellで記述するためのアドバイスをいただきたいと考えております。

    1.Word 2016・・・・・・リボンとクイックアクセスツールバー(Word.OfficeUI)
    2.Excel 2016・・・・・・リボンとクイックアクセスツールバー(Excel.OfficeUI)  
    3.PowerPoint 2016・・・リボンとクイックアクセスツールバー(PowerPoint.OfficeUI)
    4.Outlook 2016・・・・・リボンとクイックアクセスツールバー(olkexplorer.OfficeUI) 、送受信グループの設定(拡張子:srs)、ナビゲーションウインドウの設定(拡張子:xml)、印刷設定ファイル(OutlPrnt)、署名(拡張子:txt.rtf,htm)、ビュー
    5.Access 2016・・・・・・リボンとクイックアクセスツールバー(Access.OfficeUI)
    6.OneNote 2016・・・・・・リボンとクイックアクセスツールバー(OneNote.OfficeUI) 
    7.Office2016・・・・・・辞書(CUSTOM.DIC)
    8.CLaunch・・・・・・・・設定ファイル(CLaunch.ini)、デザインファイル(Design.ini)



    2019年8月17日 2:45
  • $VIEW_XML = 'D:\OUTLOOK_BACKUP\current.view'  #インポート元のファイル名
    $OLApp = New-Object -comobject Outlook.Application
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.XML = [string](Get-Content $VIEW_XML)
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.Apply()
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.Save()
    [System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($OLApp)
    $OLApp = $null
    

    インポート処理修正

    2019年8月20日 4:09
  • ありがとうございます。

    記載いただきましたPowerShellでエクスポートは行うことができましたが、インポートが行えませんでした。

    <エクスポート/インポート手順>

    1.Outlook2016をシングルビューに設定。

    2.Outlook2016を起動した状態で、「Export_View.ps1」を実行。

    $VIEW_XML = 'C:\OUTLOOK_BACKUP\current.view' #エクスポート先のファイル名
    $OLApp = New-Object -comobject Outlook.Application
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.XML | Out-File -FilePath $VIEW_XML -Encoding oem -Force
    [System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($OLApp)
    $OLApp = $null

    3.「C:\OUTLOOK_BACKUP」に「current.view」があることを確認。

    4.「current.view」を開き、「シングル」であることを確認。

    5.Outlook2016をコンパクトビューに設定。

    6.Outlook2016を終了。

    7.「Import_View.ps1」を実行。

    $VIEW_XML = 'C:\OUTLOOK_BACKUP\current.view'  #インポート元のファイル名
    $OLApp = New-Object -comobject Outlook.Application
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.XML = [string](Get-Content $VIEW_XML)
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.Apply()
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.Save()
    [System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($OLApp)
    $OLApp = $null

    8.確認するとシングルビューではなく、コンパクトビュー。

    2019年8月20日 12:43
  • SaveとApplyの実行順序が逆になっている気がします。
    2019年8月20日 22:26
    モデレータ
  • ありがとうございます。

    以下にしてみましたが、Outlook2016のビューは、「シングル」にはならず、「コンパクト」の状態でした。

    $VIEW_XML = 'C:\OUTLOOK_BACKUP\current.view'  #インポート元のファイル名
    $OLApp = New-Object -comobject Outlook.Application
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.XML = [string](Get-Content $VIEW_XML)
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.Save()
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.Apply()
    [System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($OLApp)
    $OLApp = $null

    以下で試しても、Outlook2016のビューは、「シングル」にはならず、「コンパクト」の状態でした。

    $VIEW_XML = 'C:\OUTLOOK_BACKUP\current.view'  #インポート元のファイル名
    $OLApp = New-Object -comobject Outlook.Application
    ($OLApp.ActiveExplorer()).CurrentFolder.CurrentView.XML = [string](Get-Content $VIEW_XML)
    [System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($OLApp)
    $OLApp = $null

    そのため、VBScriptで試してみましたが、Outlook2016のビューは、「シングル」にはならず、「コンパクト」の状態でした。以前は、「シングル」になっていたので、Outlook2016のバージョンアップが原因ではと思っております。

    On Error Resume Next
    Const VIEW_XML = "C:\OUTLOOK_BACKUP\current.view" ' インポート先のファイル名
    Dim olkApp
    Dim objFSO
    Dim stmXml
    Dim strLine
    Dim arrLine
    Dim colViews
    Dim curView
    Set olkApp = CreateObject("Outlook.Application")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set stmXml = objFSO.OpenTextFile(VIEW_XML, 1)
    ' 1 行目はビューの名前と種類
    strLine = stmXml.ReadLine
    arrLine = Split(strLine, vbTab)
    Set colViews = olkApp.ActiveExplorer.CurrentFolder.Views
    Set curView = colViews.Add(arrLine(0), arrLine(1), 0)
    If Err.Number = 5 Then ' 同名のビューが存在した場合のエラー処理
    For Each curView In colViews
    ' 同名のビューを検索
    If curView.Name = arrLine(0) Then
    Exit For
    End If
    Next
    End If
    curView.XML = stmXml.ReadAll
    curView.Save
    curView.Apply
    stmXml.Close

    2019年8月20日 23:45
  • ($OLApp.ActiveExplorer()).CurrentFolder

    のメンバー確認したところ、CurrentViewは get のみでsetがありませんでした。記載した方法では変更できないのかもしれません。

    2019年8月21日 0:30
  • ありがとうございます。

    VBScriptでも現在、ビューのインポートができなくなっているので、ビューのインポート/エクスポート機能は諦めることにします。

    Microsoftには、Outlook2016でビューのインポート/エクスポートが標準機能で行えるようにフィードバックしてみることにします。


    2019年8月22日 12:11
  • MicrosoftにOutlook2016でビューのインポート/エクスポートが行えるようにフィードバックを行いました。

    2019年8月24日 7:36