How to export a CSV to Excel using Powershell

前端 未结 8 1664
隐瞒了意图╮
隐瞒了意图╮ 2020-11-27 05:17

I\'m trying to export a complete CSV to Excel by using Powershell. I stuck at a point where static column names are used. But this doesn\'t work if my CSV has generic unknow

8条回答
  •  星月不相逢
    2020-11-27 06:12

    Ups, I entirely forgot this question. In the meantime I got a solution.
    This Powershell script converts a CSV to XLSX in the background

    Gimmicks are

    • Preserves all CSV values as plain text like =B1+B2 or 0000001.
      You don't see #Name or anything like that. No autoformating is done.
    • Automatically chooses the right delimiter (comma or semicolon) according to your regional setting
    • Autofit columns

    PowerShell Code

    ### Set input and output path
    $inputCSV = "C:\somefolder\input.csv"
    $outputXLSX = "C:\somefolder\output.xlsx"
    
    ### Create a new Excel Workbook with one empty sheet
    $excel = New-Object -ComObject excel.application 
    $workbook = $excel.Workbooks.Add(1)
    $worksheet = $workbook.worksheets.Item(1)
    
    ### Build the QueryTables.Add command
    ### QueryTables does the same as when clicking "Data » From Text" in Excel
    $TxtConnector = ("TEXT;" + $inputCSV)
    $Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
    $query = $worksheet.QueryTables.item($Connector.name)
    
    ### Set the delimiter (, or ;) according to your regional settings
    $query.TextFileOtherDelimiter = $Excel.Application.International(5)
    
    ### Set the format to delimited and text for every column
    ### A trick to create an array of 2s is used with the preceding comma
    $query.TextFileParseType  = 1
    $query.TextFileColumnDataTypes = ,2 * $worksheet.Cells.Columns.Count
    $query.AdjustColumnWidth = 1
    
    ### Execute & delete the import query
    $query.Refresh()
    $query.Delete()
    
    ### Save & close the Workbook as XLSX. Change the output extension for Excel 2003
    $Workbook.SaveAs($outputXLSX,51)
    $excel.Quit()
    

提交回复
热议问题