将.xlsx转换为.csv并保存到特定目录

时间:2015-05-18 22:05:01

标签: csv outlook outlook-vba xlsx outlook-2010

我有一个计划任务设置(在一个单独的程序中),它将通过电子邮件发送.xlsx文件。我有一个规则设置,将电子邮件保存到名为04_CFW REPORT的Outlook文件夹

我需要Outlook使用Excel打开文件并将.csv另存为网络驱动器。

这将发生在晚上,当我离开电脑时

我发现的最接近的功能是: http://www.devhut.net/2012/05/14/ms-access-vba-convert-excel-xls-to-csv/

但我不知道如何将此功能用于子。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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。

接下来,我们将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