Это может быть место для начала. Взято из here
Затем вы можете исследовать creating a powershell job для запуска один раз в день и цикла до тех пор, пока не будет указан указанный объект электронной почты.
Еще один момент, который следует учитывать, если у вас есть разрешение, Powershell может выполнять SQL-запрос и выводить CSV, который может быть преобразован в XLSX.
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}
*** EDIT, получив PowerShell, чтобы закрыть comobject Excel правильно. Это вопрос правильного выпуска COM-объекта. Сначала (если этого не сделать), мы сохраним книгу и закройте Excel.
Далее мы выпускаем COM-объекты из самых маленьких (здесь переменная, содержащая диапазон ячеек), в самую большую (переменную Excel ComObject) в цикле, если требуется более, чем одна итерация. Теперь последние две строки, которые я заметил, на самом деле не нужны, но в тестовых сценариях приятно делать, но запускать сборку мусора. Посмотрите диспетчер задач, чтобы подтвердить его работу.
$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 очень крутой. Я просто googled "могут ли события Outlook запускать сценарии Powershell?" Причина в том, что мне все же хотелось бы, чтобы запуск запускался Outlook. Зачем? Полагаю, потому что я точно не знаю, когда придет электронное письмо с приложением. Он основан на запросе, который принимает, который знает, как долго, и является переменным. Я знаю только, когда запрос будет выполнен. – user4913877
Обновление: я получил его с PS. удивительный совет спасибо ... всего лишь несколько перегибов, чтобы разобраться. Краткое объяснение последовательности: 1. Электронная почта с вложениями поступает в определенное время ранним утром (это запланировано отдельной программой, просто запрашивает базу данных и результаты поступают по электронной почте). 2. Сценарий OutlookVBA сохраняет и переименовывает вложение. 3. Powershell преобразует .xlsx в .csv и помещает в соответствующий каталог. 4. Первая программа, о которой я упоминал, заканчивает свою рутину оттуда. – user4913877