如何仅使用PowerShell将指定TXT文件转换为CSV或Excel文件
使用PowerShell转换键值对文本为结构化CSV/Excel
需求说明
输入文本文件格式(每行是键=值结构):
Far=naka IntVer=10.9 RelVer=18.9 Far=paka Far=moka IntVer=10.8 RelVer=17.8 Far=sota Far=kata IntVer=10.9 RelVer=12.6
需转换为结构化的CSV(或Excel),最终格式示例:
Far,IntVer,RelVer Naka,10.9,18.9 Paka,NA,NA Moka,10.8,17.8 Sota,NA,NA Kata,10.9,12.6
PowerShell实现方案
方案1:导出为CSV文件(无需额外模块)
利用PowerShell内置命令即可完成转换,步骤如下:
# 读取输入文本文件 $inputLines = Get-Content -Path "input.txt" # 初始化变量存储当前记录状态 $currentFar = $null $currentIntVer = "NA" $currentRelVer = "NA" $resultRecords = @() foreach ($line in $inputLines) { # 跳过空行 if ([string]::IsNullOrWhiteSpace($line)) { continue } # 分割键值对,限制分割次数为2,避免值含等号时出错 $key, $value = $line -split '=', 2 | ForEach-Object { $_.Trim() } switch ($key) { "Far" { # 若已有未保存的Far记录,先存入结果集 if ($currentFar -ne $null) { $resultRecords += [PSCustomObject]@{ Far = $currentFar IntVer = $currentIntVer RelVer = $currentRelVer } } # 更新当前Far,重置版本号为NA $currentFar = $value $currentIntVer = "NA" $currentRelVer = "NA" } "IntVer" { $currentIntVer = $value } "RelVer" { $currentRelVer = $value } } } # 保存最后一条未处理的记录 if ($currentFar -ne $null) { $resultRecords += [PSCustomObject]@{ Far = $currentFar IntVer = $currentIntVer RelVer = $currentRelVer } } # 导出为CSV文件,-NoTypeInformation 去除多余类型信息行 $resultRecords | Export-Csv -Path "output.csv" -NoTypeInformation -Encoding UTF8 # 若需要生成对齐的纯文本表格(和示例格式一致),执行以下命令 $resultRecords | Format-Table -AutoSize | Out-File "output_table.txt"
方案2:导出为Excel文件(需额外模块)
如果需要直接输出Excel文件,需先安装ImportExcel模块(PowerShell官方仓库提供):
- 安装模块(需管理员权限,或指定当前用户范围):
Install-Module -Name ImportExcel -Scope CurrentUser -Force
- 转换并导出Excel:
# 复用上面的$resultRecords变量,一键导出Excel并美化格式 $resultRecords | Export-Excel -Path "output.xlsx" -AutoSize -BoldTopRow
代码说明
- 遍历文本行时,通过
-split '=',2确保值中包含等号的场景也能正确分割键值 - 维护当前记录状态:遇到新的
Far时,先保存上一条记录,再重置版本号为默认的NA - 循环结束后手动保存最后一条记录,避免遗漏
- 导出CSV时用
-NoTypeInformation移除PowerShell默认添加的类型信息行 - 导出Excel时利用
ImportExcel模块自动调整列宽、设置表头加粗,提升可读性
内容的提问来源于stack exchange,提问作者Himanshuk
相关产品推荐
相关产品推荐

