IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Extract d'un tableau excel et l'envoyer par mail [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Par défaut Extract d'un tableau excel et l'envoyer par mail
    Bonjour Tout le monde,

    J'essaye de créer un script qui permet de faire un extract d'un tableau Excel et me l'envoyer par mail.

    L'envoi des mails me semble facile à faire, mais je suis bloqué à l'extract du tableau.

    Avez-vous des pistes ?

    Merci par avance

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par yassine145 Voir le message
    Avez-vous des pistes ?
    Deux :
    Transformer avec Ole Automation.
    Ou lire avec OleDB.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 3
    Par défaut Résolu !!
    Citation Envoyé par Laurent Dardenne Voir le message
    Salut,

    Deux :
    Transformer avec Ole Automation.
    Ou lire avec OleDB.

    Merci @Laurent Dardenne, en se basant sur Ole Automation. j'ai réussi à convertir le fichier excel en csv puis l'envoyer par mail.
    Voici le script adapter. n'hésite pas si tu as des suggestions d'optimisation... car je débute en programmation powershell..

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    # Déclaration des variables 
    $NomFichierXL=$("Le chemin et le nom du fichier XLSX")
    $SheetName = "Nom de la feuille 1 "
     
    $objExcel = New-Object -ComObject Excel.Application
     
    # Disable the 'visible' property so the document won't open in excel
    $objExcel.Visible = $false
     
    # Open the Excel file and save it in $WorkBook
    $WorkBook = $objExcel.Workbooks.Open($FilePath)
    #$workbook = $NomFichierXL
     
    # Load the WorkSheet 'BuildSpecs'
    $WorkSheet = $WorkBook.sheets.item($SheetName)
     
    					function Convert-ExcelToCsv([string]$NomFichierXL,[switch]$NotConvertSeparator)
    					{
    					 if (!(test-path $NomFichierXL))
    					  { Write-Warning "Le fichier $NomFichierXL n'existe pas."; return}   
     
    					  #On crée un fichier temporaire afin d'obtenir un nom de fichier unique puis
    					  #on le supprime sinon la méthode SaveAs d'Excel demandera une confirmation de suppression
    					  #Ce fichier contient les données au format texte séparées par un point-virgule
    					 $NomFichierTmp = [System.IO.Path]::GetTempFileName() 
    					 if (test-path $NomFichierTmp)  {remove-item $NomFichierTmp} 
     
    					  #Construit le nom de fichier CSV
    					  #Ce fichier contiendra les données au format texte séparées par une virgule sauf si $NotConvertSeparator est présent
    					  #dans ce cas il contiendra les données au format texte séparées par un point-virgule
    					 $NomFichierCsv=[System.IO.Path]::ChangeExtension($NomFichierXL,".csv")
     
    					  #Supprime l'ancien fichier csv 
    					 if (test-path $NomFichierCsv) { remove-item $NomFichierCsv }
     
     
    					  #Exécute Excel, en mode invisible par défaut. Ses fenêtres d'erreurs ou de confirmation peuvent toutefois s'afficher. 
    					 $Excel = new-object -com Excel.Application
     
    					  #Ouvre le fichier source
    					 $Classeur=$Excel.Workbooks.Open($NomFichierXL)
    					  #En cas de pb d'accés la variable $Classeur n'est pas initialisée
    					 if ($Classeur -eq $Null) { Write-Warning "Traitement interrompu."; return}
     
    					#<-- Paramétres de la méthode SaveAS  
    					  #Récupére le format de sauvegarde de l'énumération xlFileFormat Ã* partir de l'assembly interop Excel 
    					 $FileFormat=[Microsoft.Office.Interop.Excel.xlFileFormat]::xlCsv 
    					  #Missing indique pour un objet COM un paramètre absent. [System.Type]::Missing] n'est pas égal Ã* 
    					$Null
    					 $Password=[System.Type]::Missing 
    					 $WriteResPassword=[System.Type]::Missing
    					 $ReadOnlyRecommended=$False
    					 $CreateBackup=$False
    					 $AddToMru=$False
    					 $TextCodepage=[System.Type]::Missing
    					 $TextVisualLayout=[System.Type]::Missing
    					 $LangueLocal=$False 
    					#--> 
    					  #On choisi d'enregistrer la feuille sélectionnée
    					  # Version simplifiée : $Classeur.SaveAs($NomFichierTmp,$FileFormat)   
    					 $Classeur.SaveAs($NomFichierTmp, 
    									  $FileFormat, 
    									  $Password, 
    									  $WriteResPassword, 
    									  $ReadOnlyRecommended, 
    									  $CreateBackup, 
    									  $AddToMru, 
    									  $TextCodepage, 
    									  $TextVisualLayout, 
    									  $LangueLocal)
     
    					  #Le changement de format de fichier provoque une alerte
    					 $Excel.DisplayAlerts=$False  
    					  #Quitte et force la libération de l'instance d'Excel
    					 $Excel.Quit()
    					 $Excel=$Null
    					 [GC]::Collect()
     
    					 if ($NotConvertSeparator.isPresent)
    						  #Le fichier tmp est crée dans le répertoire %TEMP%/%TMP% 
    					  { Copy-Item $NomFichierTmp $NomFichierCsv }
    					 else
    						  #Modifie le séparateur pour un usage avec Import-Csv
    					  { get-content $NomFichierTmp|% {$_ -replace ';',','}| out-file $NomFichierCsv }
     
    					  #Supprime le fichier transitoire créé par Excel
    					 if (test-path $NomFichierTmp) { remove-item $NomFichierTmp} 
    					}
     
    $Error.clear()
    Convert-ExcelToCsv $NomFichierXL
    if ($Error.count -ne 0) {return}
     
            ## Extrait du nombre de tache restante dans l'onglet Data 
            $SheetName1 = "Nom de la feuille 2"
            # Open the Excel file and save it in $WorkBook
            $WorkBook1 = $objExcel.Workbooks.Open($FilePath)
            # Load the WorkSheet 'BuildSpecs'
            $WorkSheet1 = $WorkBook1.sheets.item($SheetName1)
            $nbTache = $WorkSheet1.range("b2").Text 
     
    # Déclaration des variables pour l'envoi du mail 
    $expediteur = 'Adresse expéditeur'
    $destinataire = 'Adresse destinataire'
    $smtp = 'smtp'
    $objet = 'Tache a faire '
    $LeTableau = import-csv "Le chemin et le nom du fichier csv"  | ConvertTo-Html
    $UTF8=[System.Text.Encoding]::UTF8 
     
    ## L'envoi du mail 
    send-mailmessage -to $destinataire  -from $expediteur -Subject $objet  -Encoding $UTF8 -SmtpServer $smtp -bodyashtml "$LeTableau <th>Il vous reste : $nbTache Tâches</th>"
    Stop-Process -processname excel
    rm "Le chemin et le nom du fichier cs"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Créer un fichier Excel et l'envoyer par mail (vba)
    Par sasa202 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/09/2013, 14h44
  2. Extraction de données tableau excel vers programme VB
    Par spindooz dans le forum VB.NET
    Réponses: 1
    Dernier message: 15/07/2010, 18h03
  3. Réponses: 1
    Dernier message: 09/10/2007, 21h53
  4. tableau a plusieurs dimensions envoyé par xhr.send
    Par kapfab dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/03/2007, 16h24
  5. [VBA] Insérer Tableau Excel dans Corps d'un Mail (Outlook)
    Par savior dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/10/2006, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo