2015-05-18 106 views
1

我有一個計劃任務(在單獨的程序中),它將通過電子郵件發送.xlsx文件。我有一個規則設置,將電子郵件保存到名爲04_CFW的Outlook文件夾中。我需要Outlook以Excel打開文件並將其保存爲.csv到網絡驅動器。將.xlsx轉換爲.csv並保存到特定目錄

這將發生在晚上,當我離開計算機

我發現的最接近的是這裏的函數: http://www.devhut.net/2012/05/14/ms-access-vba-convert-excel-xls-to-csv/

,但我不知道如何把這個功能在一個子中使用。

任何幫助將不勝感激。

+0

Powershell會工作嗎?您可以將Powershell腳本設置爲計劃任務,將CSV轉換爲XLSX。 – user4317867

+0

Powershell非常酷。我剛剛搜索了一下「Outlook事件是否可以觸發Powershell腳本?」原因是因爲我仍然希望執行由Outlook啓動。爲什麼?我想,因爲我不確切知道電子郵件和附件何時到達。它基於一個查詢,它需要誰知道多久,並且是可變的。我只知道什麼時候查詢會被執行。 – user4913877

+0

更新:我得到它與PS合作。真棒建議謝謝...只是幾個扭曲的工作。序列的快速解釋:1.帶附件的電子郵件在凌晨一定時間到達(這是安排一個單獨的程序,只需查詢數據庫,結果通過電子郵件到達)。 2. OutlookVBA腳本保存並重命名附件。 3. Powershell將.xlsx轉換爲.csv並放入適當的目錄。我提到的第一個程序從那裏完成了它的例程。 – user4913877

回答

0

這可能是一個開始的地方。取自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 
+0

這可能會在不久的將來有用。正如我上面提到的,我已經充分運行了所有東西,但現在我正在處理兩件事:1.找到Windows調度程序的適當事件觸發器。做一個時間表的工作,但我寧願使用Outlook事件(無法識別正確的)或者可能只是監視保存附件的目錄? 2.有Powershell關閉Excel正確...嘗試這一個http:// powershell。com/cs/blogs/tips/archive/2011/11/15/closing-excel-gracefully.aspx但是不行。 stop-process -processname EXCEL的工作原理很醜陋 – user4913877

+0

P.S.我想弄清楚如何格式化我在這個網站上的評論,像他們在NP ++或PS ISE等中所做的那樣突出顯示......新人.. – user4913877

+0

對於代碼片段,使用反引用「獲取'this' 接下來,對於代碼塊,每行添加4個空格。您可以添加第五個空格以允許縮進。 – user4317867