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

Power Query导入CSV报错:无法将Record类型转换为Table类型

问题:Power Query导入CSV报错“无法将Record转换为Table”

问题详情

尝试使用以下Power Query代码从指定共享路径导入以hedge_factors_config_开头的最新CSV文件:

let
Source = Folder.Files("\\alignefsxprd.aws.edfenergy.net\share\ETRMHUB\Lookup\Config"),
FilteredFiles = Table.SelectRows(Source, each Text.StartsWith([Name], "hedge_factors_config_")),
MaxDateModified = List.Max(FilteredFiles[Date modified]),
FilteredFilesMaxDate = Table.SelectRows(FilteredFiles, each [Date modified] =  MaxDateModified),
 ImportData = Table.Combine(
        List.Transform(FilteredFilesMaxDate[Content], each Csv.Document(_, [Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.None]){0})
    )
in
    ImportData

运行时报错:

Expression.Error: We cannot convert a value of type Record to type Table.
Details:
    Value=
        Column1=TEAM_FILE
        Column2=EFFECTIVE_FROM_DATETIME
        Column3=EFFECTIVE_TO_DATETIME
        Column4=BOOK_ATTRIBUTE_3
        Column5=BOOK_ATTRIBUTE_6
        Column6=BOOK_ATTRIBUTE_8
        Column7=FORECAST_BOOk

目标CSV文件的前几行内容如下:

TEAM_FILE,EFFECTIVE_FROM_DATETIME,EFFECTIVE_TO_DATETIME,BOOK_ATTRIBUTE_3,BOOK_ATTRIBUTE_6,BOOK_ATTRIBUTE_8,FORECAST_BOOK,HEDGE_BOOK,TARGET_BOOK,TRADE_GROUP_1,FACTOR_START,FACTOR_END,STRATEGY_TYPE,CARBON_TRADES,AVERAGED,MATRIX_FILE,ALIGNE_DATE,TARGET_DATE,TARGET_FACTOR,VOLUME_HEDGE
B2C,27/04/2022,31/12/2022,POWER,B2C,RES,PREF,PREH,PRET,PROGRESSIVE 6_2_6,01/06/2023,30/06/2023,Passthrough,,,,,,1,
B2C,27/04/2022,31/12/2022,POWER,B2C,RES,PREF,PREH,PRET,PROGRESSIVE 6_2_6,01/07/2023,31/07/2023,Passthrough,,,,,,1,
B2C,27/04/2022,31/12/2022,POWER,B2C,RES,PREF,PREH,PRET,PROGRESSIVE 6_2_6,01/08/2023,31/08/2023,Passthrough,,,,,,0.9,
B2C,27/04/2022,31/12/2022,POWER,B2C,RES,PREF,PREH,PRET,PROGRESSIVE 6_2_6,01/09/2023,30/09/2023,Passthrough,,,,,,0.9,

疑问:该错误是否是由于CSV中“PROGRESSIVE 6_2_6”值包含空格所导致?


错误原因

不是空格导致的。错误根源在代码的ImportData步骤:

  • Csv.Document()返回的是完整的表结构,你在后面加了{0},这会提取表的第一行,也就是一个**Record(记录)**对象。
  • Table.Combine()要求输入参数是表的列表,但你传入的是记录的列表,所以触发了“无法将Record转换为Table”的错误。

修正后的代码

移除Csv.Document()后的{0},同时添加提升表头的步骤,让CSV的第一行作为列名:

let
    Source = Folder.Files("\\alignefsxprd.aws.edfenergy.net\share\ETRMHUB\Lookup\Config"),
    FilteredFiles = Table.SelectRows(Source, each Text.StartsWith([Name], "hedge_factors_config_")),
    MaxDateModified = List.Max(FilteredFiles[Date modified]),
    FilteredFilesMaxDate = Table.SelectRows(FilteredFiles, each [Date modified] = MaxDateModified),
    ImportData = Table.Combine(
        List.Transform(FilteredFilesMaxDate[Content], each 
            Table.PromoteHeaders(
                Csv.Document(_, [Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.None]),
                [PromoteAllScalars=true]
            )
        )
    )
in
    ImportData

关键修改点

  1. 去掉Csv.Document()后的{0},保留完整的表返回值,确保List.Transform生成的是表的列表。
  2. 添加Table.PromoteHeaders(),将CSV的第一行(表头行)转换为表的列名,避免默认的Column1/Column2这类命名。

内容的提问来源于stack exchange,提问作者r.baton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:05:40