You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:编写PowerShell脚本拆分表格多值列

PowerShell 拆分表格多值列解决方案

以下是实现你需求的完整PowerShell脚本,附带步骤说明:

完整脚本

# 读取原始CSV数据(请替换为你的文件路径)
$originalData = Import-Csv -Path "input.csv"

# 定义需要识别的分隔符
$delimiters = ';', '/'

# 筛选出包含多值的列(值含指定分隔符)
$columnsToSplit = $originalData[0].PSObject.Properties.Name | Where-Object {
    $originalData | ForEach-Object { $_.$_ } | Where-Object { $_ -match ($delimiters -join '|') }
}

# 统计每个待拆分列的最大拆分数量,确定新列总数
$columnMaxSplits = @{}
foreach ($col in $columnsToSplit) {
    $maxCount = $originalData | ForEach-Object {
        ($_.$col -split ($delimiters -join '|') | Where-Object { $_ -ne '' }).Count
    } | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum
    $columnMaxSplits[$col] = $maxCount
}

# 逐行处理数据,拆分多值列并生成新结构
$processedData = $originalData | ForEach-Object {
    $row = $_
    $newRow = [ordered]@{}
    # 保留无需拆分的原始列
    foreach ($col in $originalData[0].PSObject.Properties.Name) {
        if ($col -notin $columnsToSplit) {
            $newRow[$col] = $row.$col
        }
    }
    # 拆分多值列,填充到对应序号列
    foreach ($col in $columnsToSplit) {
        $splitValues = ($row.$col -split ($delimiters -join '|') | Where-Object { $_ -ne '' })
        for ($i = 1; $i -le $columnMaxSplits[$col]; $i++) {
            $newColumnName = "$col$i"
            $newRow[$newColumnName] = if ($i -le $splitValues.Count) { $splitValues[$i-1] } else { '' }
        }
    }
    [PSCustomObject]$newRow
}

# 导出结果到新CSV,同时在控制台显示
$processedData | Export-Csv -Path "output.csv" -NoTypeInformation
$processedData | Format-Table -AutoSize

关键步骤说明

  1. 读取数据:使用Import-Csv加载原始表格数据;若你的数据是Excel文件,可先安装ImportExcel模块(执行Install-Module -Name ImportExcel),再将Import-Csv替换为Import-Excel、Export-Csv替换为Export-Excel。
  2. 识别待拆分列:自动遍历所有列,检查是否存在包含;或/的行,标记这些列为需要拆分的目标列。
  3. 确定新列数量:统计每个待拆分列的最大非空拆分值数量,确保生成足够的序号列(比如Attribute列最多拆出5个值,就生成Attribute1到Attribute5)。
  4. 逐行拆分填充:对每一行先保留非拆分列,再将多值列拆分后按顺序填充到对应序号列,不足的位置填空字符串。
  5. 输出结果:将处理后的数据导出为新的CSV文件,同时在控制台格式化显示。

注意事项

  • 脚本会自动过滤拆分后产生的空值(比如原数据中g;h;拆分后仅保留g和h)。
  • 新列顺序保持原非拆分列在前,拆分生成的序号列按原列顺序在后。

内容的提问来源于stack exchange,提问作者Kiba97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:13:18