這可能是一個開始的地方。取自here
然後您可以研究creating a powershell job每天運行一次並循環,直到找到指定的電子郵件主題。
另一點需要考慮的是,如果您有權限,Powershell可以執行SQL查詢並輸出可以轉換爲XLSX的CSV。
Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null
$olFolders = "Microsoft.Office.Interop.Outlook.olDefaultFolders" -as [type]
$outlook = new-object -comobject outlook.application
$namespace = $outlook.GetNameSpace("MAPI")
$folder = $namespace.getDefaultFolder($olFolders::olFolderInBox)
然後,我可以使用過濾收件箱項目,例如任何未讀項目。
$folder.items | where {$_.UnRead -eq $true}
***編輯,讓PowerShell正確關閉Excel的comobject。這是正確釋放COM對象的問題。首先(假設沒有完成)我們保存工作簿並退出Excel。
接下來,我們從一個循環中的最小(這裏是變量保存一個單元格範圍的變量)到最大(Excel ComObject變量)的COM對象應該需要多次迭代。現在我注意到的最後兩行並不是真正需要的,但是在測試腳本中,很好做,但運行垃圾收集。觀看任務管理器以確認其操作。
$xlsObj.ActiveWorkbook.SaveAs($xlsFile) | Out-Null
$xlsObj.Quit()
While ([System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsRng)) {'cleanup xlsRng'}
While ([System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsSh)) {'cleanup xlsSh'}
While ([System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsWb)) {'cleanup xlsWb'}
While ([System.Runtime.Interopservices.Marshal]::ReleaseComObject($xlsObj)) {'cleanup xlsObj'}
[gc]::collect() | Out-Null
[gc]::WaitForPendingFinalizers() | Out-Null
Powershell會工作嗎?您可以將Powershell腳本設置爲計劃任務,將CSV轉換爲XLSX。 – user4317867
Powershell非常酷。我剛剛搜索了一下「Outlook事件是否可以觸發Powershell腳本?」原因是因爲我仍然希望執行由Outlook啓動。爲什麼?我想,因爲我不確切知道電子郵件和附件何時到達。它基於一個查詢,它需要誰知道多久,並且是可變的。我只知道什麼時候查詢會被執行。 – user4913877
更新:我得到它與PS合作。真棒建議謝謝...只是幾個扭曲的工作。序列的快速解釋:1.帶附件的電子郵件在凌晨一定時間到達(這是安排一個單獨的程序,只需查詢數據庫,結果通過電子郵件到達)。 2. OutlookVBA腳本保存並重命名附件。 3. Powershell將.xlsx轉換爲.csv並放入適當的目錄。我提到的第一個程序從那裏完成了它的例程。 – user4913877