2017-10-12 4 views
0

J'ai plus de 100 emails dans un dossier et tous ont une pièce jointe. Je veux créer un paquet qui copiera les données de toutes les pièces jointes d'email dans une feuille d'excel et ajoutera également une colonne qui aura les dates reçues de ces email contre les données. Peut-on me guider comment le faire avec l'aide de ssis paquet.Package ssis Importation de données à partir de pièces jointes d'email pour exceler

+0

Il serait plus facile de le faire avec powershell ou vba. Quel est votre serveur de messagerie? –

+0

ces mails sont placés dans le dossier pas sur le serveur de messagerie. – brit

+0

Juste pour clarifier, un dossier dans votre système de fichiers? Quelle est l'extension des documents contenant une pièce jointe? –

Répondre

0

Non ssis mais cela devrait produire le résultat souhaité. Change juste le chemin sur la dernière ligne.

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

S'il vous plaît laissez-moi savoir si cela fonctionne pour vous. –

+0

devrait utiliser la tâche de script afin d'exécuter le ci-dessus – brit

+0

Non, utilisez Powershell. –