Question Création utilisateur depuis fichier Excel (Résolu)

Plus d'informations
il y a 15 ans 9 mois #2610 par Laurent Dardenne
Dan écrit:

mais peut être une mauvaise connaissance de ma part des centaines d'objets fournis avec les objets com d'office :)

Non je ne pense pas, bien qu'il faille parfois avec PS utiliser des objets intermédiaires, c'est plus le parcourt des différentes couches , et les conversions associées, qui ralenti le traitement.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #2612 par ALCABELARD
Encore merci pour tous ces conseild mais je suis obligé de m'appuyer sur les fichiers excel, je ne vais pas demander aux RH de convertir les fichiers excel en csv ou les faire moi meme. De plus je n'aime pas rester sur un echec alors je vais continuer de me casser les dents et continuer de vous tenir au courant..:angry:

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 9 mois #2613 par Laurent Dardenne
Yoann écrit:

les faire moi meme.

Il faut je pense couper la poire en deux. Convertir automatiquement le fichier via Excel et le traiter via Import-csv.
Ensuite cela dépend de la structure du fichier, 1 seule feuille, colonnes de format \"simple\", etc.
Il faut avoir Excel sur le poste où est exécuté le script.

[edit]
Une solution :
[code:1]
# Convert-ExcelToCsv.ps1
# Export d'une feuille Excel au format csv (Excel 2003)
#
# $NomFichierXL : Nom complet du fichier Excel à enregistrer au format csv
#
# $NotConvertSeparator : Indique qu'on ne transforme pas le séparateur point-virgule par une virgule.
#
function Convert-ExcelToCsv([string]$NomFichierXL=$(throw \"Le nom de fichier doit être renseigné.\"«»),[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}
}
[/code:1]
Un exemple d'appel :
[code:1]
$Error.clear()
Convert-ExcelToCsv \"$pwd\Comptes.xls\"
if ($Error.count -ne 0} {return}
# suite, création des comptes via un .csv
[/code:1]
Il reste qq tests à ajouter : fichier ou lecteur cible en R/O, XLS verrouillé par un autre process, ...<br><br>Message édité par: Laurent Dardenne, à: 19/07/08 19:23

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 8 mois #2629 par ALCABELARD
Bon, apres des jours de prises de tête, le programme n'a plus lieu d'être car la fiche d'acceuil va etre modifiée. Donc au final, je continue de créer les comptes à la main.

Pour information, j'ai réussi à extraire les informations dont j'avais besoin via du VB.

Merci à tous pour votre aide et désolé pour ces postes tres peu util.<br><br>Message édité par: Yoann, à: 25/07/08 14:46

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.073 secondes
Propulsé par Kunena