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

如何让Power Query M的Csv.Document动态识别目标表头行的列数?

解决CSV动态适配列数的Power Query M脚本方案

要解决第一行列数不足导致数据截断的问题,核心思路是先获取第15行的列数,再以此作为参数导入CSV,具体脚本如下:

let
    // 读取文件所有内容为文本,按行拆分
    FileText = Text.FromBinary(File.Contents(Filepath)),
    RowsList = Text.Split(FileText, "#(cr)#(lf)"), // 若CSV是Unix换行格式,替换为#(lf)
    // 获取第15行(索引14,从0开始计数),拆分得到列数
    HeaderRow = List.Skip(RowsList, 14){0},
    ColumnCount = List.Count(Text.Split(HeaderRow, ",")),
    // 用动态获取的列数导入CSV
    Source = Csv.Document(File.Contents(Filepath), [Delimiter = ",", QuoteStyle = QuoteStyle.None, Columns = ColumnCount]),
    #"Removed Top Rows" = Table.Skip(Source, 14),
    #"Promoted Headers" = Table.PromoteHeaders(#"Removed Top Rows", [PromoteAllScalars=true])
in
    #"Promoted Headers"

关键说明:

  • 换行符需匹配实际文件格式:Windows系统导出的CSV常用#(cr)#(lf),Unix/Linux系统则用#(lf),需根据情况调整。
  • 分隔符要保持一致:如果你的CSV使用分号或其他分隔符,需同步修改Text.Split(HeaderRow, ",")和Csv.Document里的Delimiter参数。
  • 若处理超大文件,可优化为一次性读取文本后直接转换为表格,避免两次读取文件,但常规场景下当前方案足够高效且易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 12:55:05