首页 > 解决方案 > Powershell 文本到列

问题描述

我有一个 csv 文件,其中包含 1 列中的所有数据。

这是格式,

EPOS SKU      QTY ReferenceNr
---- ---      --- -----------
717  30735002 1   S04-457312 
700  30777125 1   S06-457360 
700  25671933 1   S06-457389 
716  25672169 1   S09-457296 
716  25440683 1   S09-457296 

我想用以下标题将这些数据分成 4 列,并通过 powershell 脚本保存/导出到 csv 或 xlsx。

谢谢您的帮助

标签: excelpowershell

解决方案


这应该有效:

Add-Type -AssemblyName Microsoft.Office.Interop.Excel

$inputFile  = $PSScriptRoot + '\rawtext.txt'
$csvFile    = $PSScriptRoot + '\rawtext.csv'
$excelFile  = $PSScriptRoot + '\rawtext.xlsx'

# Create datatable
$dt = New-Object system.Data.DataTable
[void]$dt.Columns.Add('EPOS',[string]::empty.GetType() )
[void]$dt.Columns.Add('SKU',[string]::empty.GetType() )
[void]$dt.Columns.Add('QTY',[string]::empty.GetType() )
[void]$dt.Columns.Add('ReferenceNr',[string]::empty.GetType() )

# loop file
foreach($line in [System.IO.File]::ReadLines($inputFile))
{
    if( $line -match '^\d+' ) {

        $contentArray = $line -split ' +'

        $newRow = $dt.NewRow()
        $newRow.EPOS        = $contentArray[0]
        $newRow.SKU         = $contentArray[1]
        $newRow.QTY         = $contentArray[2]
        $newRow.ReferenceNr = $contentArray[3]
        [void]$dt.Rows.Add( $newRow )
    }
}

# create csv
$dt | Export-Csv $outputFile -Encoding UTF8 -Delimiter ';' -NoTypeInformation

#create excel
$excel = New-Object -ComObject Excel.Application 
$excel.Visible = $false
$excel.DisplayAlerts = $false
[void]$excel.Workbooks.Open($csvFile).SaveAs($excelFile, [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault)
[void]$excel.Workbooks.Close()
[void]$excel.Quit()

# remove csv
Remove-Item -Path $csvFile -Force | Out-Null

推荐阅读