2017-10-12 83 views
0

我在一个文件夹中有100多个电子邮件,并且它们都有附件。我想创建一个包将所有电子邮件附件中的数据复制到一个Excel表中,并添加一个列,这些列将包含这些电子邮件的接收日期与数据的对应关系。任何人都可以指导我如何在ssis包。ssis软件包将电子邮件附件中的数据导入excel

+0

在PowerShell或vba中执行此操作会更容易。你的邮件服务器是什么? –

+0

这些邮件放在不在邮件服务器上的文件夹中。 – brit

+0

只是为了澄清,文件系统中的文件夹?包含附件的文件的内容是什么? –

回答

0

不是ssis,但它应该产生所需的结果。只需更改最后一行的路径。

function Get-Attachment 
{ 
    [CmdletBinding()] 

    Param 
    (
     [Parameter(ParameterSetName="Path", Position=0, Mandatory=$True)] 
     [String]$Path, 

     [Parameter(ParameterSetName="LiteralPath", Mandatory=$True)] 
     [String]$LiteralPath, 

     [Parameter(ParameterSetName="FileInfo", Mandatory=$True, ValueFromPipeline=$True)] 
     [System.IO.FileInfo]$Item 
    ) 

    Begin 
    { 
     remove-item $Path\attachments.xlsx 
     $outlook = New-Object -ComObject Outlook.Application 
     $excel = New-Object -ComObject Excel.Application 
     $excel.visible = $true 
     $workbook = $excel.Workbooks.add() 
     $s1 = $workbook.Sheets.add() 
     $s1.name = "Attachments" 
     $cells= $s1.Cells 
     $s1.range("A1:A1").font.bold = "true" 
     $s1.range("A1:A1").cells="RecDate" 
     $s1.range("B1:B1").cells="Data" 
     $s1.range("B1:B1").font.bold = "true" 
    } 
    Process 
    { 
     switch ($PSCmdlet.ParameterSetName) 
     { 
      "Path"  { $files = Get-ChildItem -Path $Path } 
      "LiteralPath" { $files = Get-ChildItem -LiteralPath $LiteralPath } 
      "FileInfo" { $files = $Item } 
     } 
     $row=2 
     $col=2 
     $files | % { 
      $msgFn = $_.FullName 
      if ($msgFn -notlike "*.msg") { 
       return 
      } 
      $msg = $outlook.CreateItemFromTemplate($msgFn) 
      $rdate = $msg.ReceivedTime 
      $msg.Attachments | % { 
      $attFn = $msgFn -replace '\.msg$', " - Attachment - $($_.FileName)" 
      if (Test-Path -literalPath $attFn) { 
        return 
       } 
       $_.SaveAsFile($attFn) 
       Get-ChildItem -LiteralPath $attFn 
       $d = (Get-Content -Path $attFn -Raw) 
       $cells.item($row,$col)=$d.ToString() 
       $cells.item($row,1) = $rdate 
       $row++ 
      } 
      $s1.range("A1:B1").EntireColumn.autofit() | out-Null 
      $s1.range("A1:B1").EntireColumn.WrapText = $false | out-Null 
     } 
    } 

    End 
    { 
     $workbook.SaveAs("$Path\attachments.xlsx") 
    } 
} 

Get-Attachment -Path C:\Users\Administrator\pathtodir\ 
+0

请让我知道这是否适合你。 –

+0

应使用脚本任务以执行上述 – brit

+0

否,请使用Powershell。 –