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

如何用Power Query导入CSV并按需映射列(特殊行适配)

问题

导入CSV文件到Excel时,90%的行包含5个字段,但部分行是6个字段。当前Power Query代码按固定5列映射,导致这些6字段行的列数据错位。需要实现:当第2字段为AK Interactive且第4字段为3rd Generation 17ml时,调整列映射逻辑,让最终所有行都匹配指定的目标列格式。

解决方案

修改Power Query代码,先动态保留每行的原始字段数量,再根据条件调整字段结构,具体代码如下:

let
    // 替换为你的CSV文件路径
    Source = Csv.Document(File.Contents("C:\你的文件路径.csv"), [Delimiter=",", Encoding=1252, QuoteStyle=QuoteStyle.Csv]),
    // 将每行转换为列表,保留原始字段数
    RowsAsLists = Table.TransformColumns(Source, {{Column1, each Text.Split(_, ",")}}),
    // 自定义调整逻辑函数
    AdjustFieldStructure = (rowList as list) as list =>
        let
            RowLength = List.Count(rowList),
            // 判断是否为需要调整的特殊行
            IsSpecialRow = RowLength = 6 
                and rowList{1} = "AK Interactive" 
                and rowList{3} = "3rd Generation 17ml",
            // 按目标格式调整字段:示例将第5个字段合并到第4列,可根据需求修改
            AdjustedRow = if IsSpecialRow then
                {
                    rowList{0},    // 第1列(原第1字段)
                    rowList{1},    // 第2列(原第2字段)
                    rowList{2},    // 第3列(原第3字段)
                    rowList{3} & " - " & rowList{4},  // 第4列(合并原第4、5字段)
                    rowList{5}     // 第5列(原第6字段)
                }
            else if RowLength = 5 then
                rowList  // 正常5字段行直接保留
            else
                rowList  // 其他异常行可自定义处理(如标记错误)
        in
            AdjustedRow,
    // 应用调整逻辑到所有行
    ApplyAdjustments = Table.TransformColumns(RowsAsLists, {{Column1, AdjustFieldStructure}}),
    // 转换为表格并设置目标列名
    FinalTable = Table.FromList(
        ApplyAdjustments[Column1], 
        Splitter.SplitByNothing(), 
        {"目标列1", "目标列2", "目标列3", "目标列4", "目标列5"}
    ),
    // 按需设置各列数据类型
    SetDataTypes = Table.TransformColumnTypes(
        FinalTable, 
        {
            {"目标列1", type text},
            {"目标列2", type text},
            {"目标列3", type text},
            {"目标列4", type text},
            {"目标列5", Currency.Type}
        }
    )
in
    SetDataTypes
关键逻辑说明
  1. RowsAsLists:将每行CSV文本拆分为列表,避免固定列数提前截断或错位
  2. AdjustFieldStructure函数:核心判断与调整逻辑
    • 先判断行是否为6字段且符合指定的品牌、产品类型条件
    • 按照目标格式调整字段:示例中把额外的第5字段合并到第4字段,你可以根据实际需求修改(比如调整字段顺序、单独拆分到新列等)
  3. FinalTable:将调整后的列表转换为表格,设置目标列名
  4. SetDataTypes:根据业务需求设置各列的数据类型(如价格设为货币型)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:17:27