2015-05-18 5 views
1

У меня есть запланированная задача, настроенная (в отдельной программе), которая отправит по электронной почте файл .xlsx. У меня есть правило, которое будет сохранено в папке Outlook под названием 04_CFW REPORTПреобразовать .xlsx в .csv и сохранить в конкретный каталог

Мне нужен Outlook, чтобы открыть файл с помощью Excel и сохранить его как .csv на сетевой диск.

Это будет происходить в ночное время, когда я нахожусь вдали от компьютера

Ближе всего я нашел это функция здесь: http://www.devhut.net/2012/05/14/ms-access-vba-convert-excel-xls-to-csv/

, но я понятия не имею, как поставить эту функцию использовать в под.

Любая помощь была бы принята с благодарностью.

+0

Будет ли Powershell работать? Вы можете установить сценарий Powershell в качестве запланированной задачи для преобразования CSV в XLSX. – user4317867

+0

Powershell очень крутой. Я просто googled "могут ли события Outlook запускать сценарии Powershell?" Причина в том, что мне все же хотелось бы, чтобы запуск запускался Outlook. Зачем? Полагаю, потому что я точно не знаю, когда придет электронное письмо с приложением. Он основан на запросе, который принимает, который знает, как долго, и является переменным. Я знаю только, когда запрос будет выполнен. – user4913877

+0

Обновление: я получил его с PS. удивительный совет спасибо ... всего лишь несколько перегибов, чтобы разобраться. Краткое объяснение последовательности: 1. Электронная почта с вложениями поступает в определенное время ранним утром (это запланировано отдельной программой, просто запрашивает базу данных и результаты поступают по электронной почте). 2. Сценарий OutlookVBA сохраняет и переименовывает вложение. 3. Powershell преобразует .xlsx в .csv и помещает в соответствующий каталог. 4. Первая программа, о которой я упоминал, заканчивает свою рутину оттуда. – user4913877

ответ

0

Это может быть место для начала. Взято из 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 
+0

Это может пригодиться в ближайшем будущем. У меня есть все, что работает достаточно, как я упоминал выше, но теперь я работаю над двумя вещами: 1. найти соответствующий триггер события для Планировщика Windows. Выполнение расписания работает, но я предпочел бы использовать событие Outlook (проблемы с определением правильного) или, возможно, просто контролировать каталог, в котором сохраняется вложение? 2. Если Powershell закрывает Excel правильно ... попробовал этот http: // powershell.com/cs/blogs/tips/archive/2011/11/15/closed-excel-gracefully.aspx, но не уйти. stop-process -processname EXCEL работает, но уродливо – user4913877

+0

P.S. Я пытаюсь понять, как отформатировать мои комментарии на этом сайте, чтобы выделить, как они это делают в NP ++ или PS ISE и т. Д. ... new guy .. – user4913877

+0

Для фрагментов кода используйте обратную линию ', чтобы получить' this' Далее, для блоков кода добавьте 4 пробела к каждой строке. Вы можете добавить 5-е пространство, чтобы разрешить отступы. – user4317867

Смежные вопросы