excel - 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。
谢谢您的帮助
解决方案
这应该有效:
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
推荐阅读
- python - 将页眉和页脚添加到 Python 的 JSON 输出
- android - 我无法在 Android 10 中使用 DownloadManger 下载文件?
- html - 页面缩小时试图让导航栏消失
- c - 在这个 mutex/pthread_cond_wait 结构中,我的数据会在哪里丢失?
- swiftui - SwiftUI - @State property is not updated
- odoo - 为什么我的简单 odoo 扩展在升级时会使我的服务器崩溃?
- java - 2020 年 11 月 1 日/“帐户保留”:是否必须向“帐户保留”用户显示说明性消息?
- android - 行中图像的动态列表,带有换行符(之间没有空格),允许长按图像打开编辑选项 - Flutter
- laravel - 如何在 sql 数组 laravel 中找到项目
- reactjs - 如何在组件卸载上使用 useEffect 挂钩有条件地运行代码