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 :

Export CSV vers Excel (mettre en format numéro) ? [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut Export CSV vers Excel (mettre en format numéro) ?
    Bonjour,

    Je n'ai pas trouvé comment faire pour dire que les colonnes sont au format numérique et pas au format texte
    quand je passe la commande suivante :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $worksheet.Cells.NumberFormat = "0,00"
    ça passe bien les cellules au format number mais elles ne sont pas mises à jour et quand j'essaie de refaire un : $Query.refresh() ça me remet les anciennes valeurs et me remet les cellules en texte
    Pour mettre à jour je double clic dans une cellule Excel (où se trouve une valeur) et je fais "entrée" et la valeurs se met à jour !

    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
     $CSVs = Get-ChildItem *.csv
     
     
    $excel = New-Object -ComObject excel.application 
        $excel.visible = $true
        $excel.SheetsInNewWorkbook = $CSVs.Count  
        $workbook = $excel.Workbooks.Add()
     
     
        for ($i=0; $i -lt $CSVs.Count; $i++){
     
     
            $csv = Get-Item $CSVs[$i]
            $worksheet = $workbook.worksheets.Item($i + 1)
    #        $worksheet.Name = $csv.basename
     
     
            $TxtConnector = ("TEXT;" + $csv.fullname)
            $Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
            $query = $worksheet.QueryTables.item($Connector.name)
            $query.HasAutoFormat = $true
            $query.TextFilePlatform = 65001
            $query.TextFileTextQualifier = 1
            $query.TextFileOtherDelimiter = $Excel.Application.International(3) 
            $query.TextFileParseType  = 1
            $arrFormats = ,2 * $worksheet.Cells.Columns.Count
            $query.TextFileColumnDataTypes = $arrFormats
            $query.AdjustColumnWidth = 1
            $query.Refresh()
            $worksheet.Cells.NumberFormat = "0,00"
            $query.Delete()
     
     
        }

    La propertie $Query.HasAutoFormat ne fait pas grand chose
    Avez-vous une idée ?

  2. #2
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    J'ai trouvé une petite chose par hasard

    Cette ligne dit que c'est tout le tableau est au format numérique avec deux décimal
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $query.ResultRange.NumberFormat = "0,00"

    et cette ligne permet de forcer la validation au format numérique (équivalent a un double clic dans une cellule et une validation avec "entrée" sans avoir changé la valeur)
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $query.ResultRange.FormulaR1C1 = $query.ResultRange.FormulaR1C1


    Exemple : J'ai des lignes comme ceci :
    +1,10000000000000E+003
    +1,46481100000000E+004
    -1,35481100000000E+004
    Le fait d'avoir fait un changement de format avec $query.ResultRange.NumberFormat = "0,00" les cellules ne sont pas automatiquement updater, obligation de faire une manip manuellement pour que la valeur change en numérique, avec $query.ResultRange.FormulaR1C1 = $query.ResultRange.FormulaR1C1 j’obtiens le résultat ci dessous

    1100,00 14648,11 -13548,11

  3. #3
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Je rajoute en me disant que ça pourrais service a d'autre

    Si vous avez des cellules différentes
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $query.ResultRange | % {if($_.FormulaR1C1 -match "\+\d"){$_.FormulaR1C1 = $_.FormulaR1C1}}
    (attention c'est très lent)

    Si vous avez des cellules avec le même type de valeur (exemple)
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $query.ResultRange.Range("E:E").FormulaR1C1 = $query.ResultRange.Range("E:E").FormulaR1C1
    (beaucoup plus rapide)

    Je pense qu'il n'est pas nécessaire de donner un type numérique a toute la feuille mais uniquement au valeur nécessaire après avoir un test
    donc ne faite pas :
    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    $query.ResultRange.NumberFormat = "0,00"
    mais faire un test de valeur numérique et appliquer uniquement si cette valeur est numérique (dur a comprendre ?)

    je sais je répond a mes propres questions (au moins je continu a chercher et je n'attends pas une réponse toute pondu par d'autre ...)

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

Discussions similaires

  1. Export SAS vers excel dans le format des données
    Par adri786 dans le forum SAS Base
    Réponses: 0
    Dernier message: 18/04/2019, 11h57
  2. [Vxi3] Format Nombres lors Export BO vers Excel en planification
    Par thibaultspreux dans le forum Webi
    Réponses: 1
    Dernier message: 29/01/2019, 11h23
  3. format date heure export SQL vers Excel
    Par Pedrito95 dans le forum VBScript
    Réponses: 2
    Dernier message: 23/07/2011, 17h29
  4. Réponses: 5
    Dernier message: 23/02/2009, 22h11

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