如何用PowerShell填充Quickbooks导出CSV中B列为Sales Order的A列空值
解决方案
一、PowerShell CSV格式调整脚本
以下脚本完全匹配需求,可自动填充空A列值,遇到新商品名时自动更新基准值继续匹配:
# 定义输入输出文件路径 $inputCsv = "替换为你的原始CSV文件绝对路径" $outputCsv = "替换为处理后CSV的输出路径" # 读取原始CSV,Encoding参数可根据你文件的实际编码调整为UTF8/Default $csvRows = Import-Csv -Path $inputCsv -Encoding Default # 存储最后一个非空的A列商品名称 $latestItemName = "" foreach ($row in $csvRows) { $currentColA = $row."" # 原始CSV第一列表头为空,因此用空字符串作为列名取值 # 当A列非空且不是汇总行时,更新基准商品名 if (-not [string]::IsNullOrWhiteSpace($currentColA) -and $currentColA -notmatch '^Total ') { $latestItemName = $currentColA } # 满足填充条件时写入基准商品名 if ($row.Type -eq 'Sales Order' -and [string]::IsNullOrWhiteSpace($currentColA)) { $row."" = $latestItemName } } # 导出处理后的文件 $csvRows | Export-Csv -Path $outputCsv -Encoding UTF8 -NoTypeInformation -UseCulture
说明:-UseCulture参数会沿用你系统默认的列表分隔符,避免导出后CSV列错位
二、Quickbooks桌面版直接导出规整格式的方法
你可以通过以下设置调整「open sales orders by item」报表的导出规则,无需后续手动处理:
- 调整报表显示设置:打开报表后点击顶部「修改报表」→切换到「显示」选项卡,勾选「重复项目名称到所有明细行」选项,取消分组折叠的默认设置
- 导出前全部分组展开:点击报表顶部的「全部展开」按钮,让所有商品名下的销售订单行都完整显示商品名称后再执行导出
- 优先导出Excel格式:Quickbooks对Excel格式的字段填充完整性优于CSV,可先导出为.xlsx格式,确认无空值后再另存为CSV使用
内容的提问来源于stack exchange,提问作者moore1emu
相关产品推荐
相关产品推荐

