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) ?


Sujet :

Scripts/Batch

  1. #1
    Membre habitué
    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 habitué
    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


    [TD="class: xl63, width: 160, align: right"]1100,00
    [TD="class: xl63, width: 160, align: right"]14648,11
    [TD="class: xl63, width: 160, align: right"]-13548,11

  3. #3
    Membre habitué
    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 ...)

###raw>template_hook.ano_emploi###