Question
Création utilisateur depuis fichier Excel (Résolu)
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 15 ans 9 mois #2610
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Création utilisateur depuis fiche excel
Dan écrit:
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.mais peut être une mauvaise connaissance de ma part des centaines d'objets fournis avec les objets com d'office
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- ALCABELARD
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 15 ans 9 mois #2612
par ALCABELARD
Réponse de ALCABELARD sur le sujet Re:Création utilisateur depuis fiche excel
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..
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 15 ans 9 mois #2613
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Création utilisateur depuis fiche excel
Yoann écrit:
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
Il faut je pense couper la poire en deux. Convertir automatiquement le fichier via Excel et le traiter via Import-csv.les faire moi meme.
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.
- ALCABELARD
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 15 ans 8 mois #2629
par ALCABELARD
Réponse de ALCABELARD sur le sujet [Résolu]Re:Création utilisateur depuis fiche excel
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
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
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les débutants
- Création utilisateur depuis fichier Excel (Résolu)