PowerShell按当日日期匹配映射表为CSV报表填充Iteration path值
PowerShell 实现CSV报表迭代路径自动匹配方案
前置准备
处理XLSX格式映射表不需要本地安装Microsoft Excel,先在PowerShell中执行以下命令安装依赖模块,执行时遇到源信任提示输入Y同意即可:Install-Module -Name ImportExcel -Scope CurrentUser -Force
核心实现逻辑
- 取当日零点的标准日期值,剔除时分秒精度干扰,避免区间判断错误
- 读取XLSX映射表全量记录,匹配日期区间覆盖当日的条目,提取对应的Iteration path值
- 全量读取目标CSV文件,保留所有原有列与业务数据,仅统一更新Iteration path列的值
- 导出处理后的数据到新文件,避免原文件被误改损坏
完整可运行代码
使用前只需修改代码开头的三个文件路径为本地实际路径即可:
# ========== 配置区:修改为你本地的实际文件路径 ========== $mappingFilePath = "D:\报表配置\迭代日期映射表.xlsx" $sourceCsvPath = "D:\业务报表\待处理业务报表.csv" $resultCsvPath = "D:\业务报表\处理完成_业务报表.csv" # ====================================================== # 加载依赖模块 Import-Module ImportExcel -ErrorAction Stop # 获取当日0点日期值 $today = (Get-Date).Date # 读取映射表匹配对应迭代路径 $mappingRecords = Import-Excel -Path $mappingFilePath $currentIteration = $mappingRecords | Where-Object { $_."start date" -le $today -and $_."end date" -ge $today } | Select-Object -First 1 -ExpandProperty "Iteration path" # 匹配失败直接终止,避免生成错误数据 if (-not $currentIteration) { throw "映射表中无 $today 对应的迭代路径配置,请检查映射表日期区间" } # 读取CSV并更新Iteration path列 $csvContent = Import-Csv -Path $sourceCsvPath -Encoding UTF8 foreach ($line in $csvContent) { $line."Iteration path" = $currentIteration } # 导出结果,UTF8编码避免中文乱码 $csvContent | Export-Csv -Path $resultCsvPath -NoTypeInformation -Encoding UTF8 Write-Host "处理完成,当前匹配迭代路径:$currentIteration,结果已保存至 $resultCsvPath"
常见注意点
- 请确认映射表的列名与代码中引用的列名完全一致,存在大小写、空格差异时直接修改代码中对应的列名字符串即可
- 首次运行建议先输出到新的结果文件,核对原有业务列无缺失、Iteration path赋值正确后,再替换正式报表文件
- 如果映射表存在重叠日期区间,代码默认取第一条匹配到的记录,可根据需要在匹配逻辑前增加排序规则调整优先级
- 运行报模块加载错误时,关闭当前PowerShell窗口重新打开后重试即可
内容的提问来源于stack exchange,提问作者nasrul799
相关产品推荐
相关产品推荐

