导入动态列数XLSX时Power Query List转Text错误的解决方法
动态列数XLSX文件导入的Power Query错误解决
问题背景
原有Power Query代码可正常导入固定列数的XLSX文件,但目标文件会被动态替换,列数持续变化。修改展开列的语句后触发错误:
Expression.Error: We cannot convert a value of type List to type Text. Details: Value=[List] Type=[Type]
错误原因
修改后的代码存在两个关键问题:
- 数据源错误:将展开操作的数据源从
#"Kept First Rows"改成了Source,但Source是Excel.Workbook返回的包含所有工作表元数据的表,并非目标工作表的行数据,导致列名获取逻辑错误。 - 列表嵌套错误:用
{Table.ColumnNames(Source)}将列名列表额外嵌套了一层,而Table.ExpandTableColumn的第三个参数要求是一维文本列表,而非列表的列表,因此触发类型转换错误。
解决方案
修改代码,动态获取目标工作表的列名并正确展开,以下是完整修正后的代码:
let FilePath = Excel.CurrentWorkbook(){[Name="fp"]}[Content]{0}[TheFilePath], Source = Excel.Workbook(File.Contents(FilePath)), #"Kept First Rows" = Table.FirstN(Source,1), // 动态提取目标工作表的所有列名 DataTableColumns = Table.ColumnNames(#"Kept First Rows"{0}[Data]), // 使用动态列名列表展开Data列 #"Expanded Data" = Table.ExpandTableColumn(#"Kept First Rows", "Data", DataTableColumns), #"Removed Columns" = Table.RemoveColumns(#"Expanded Data",{"Name", "Item", "Kind", "Hidden"}), #"Promoted Headers" = Table.PromoteHeaders(#"Removed Columns", [PromoteAllScalars=true]), #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",List.Transform(Table.ColumnNames(#"Promoted Headers"),each {_,type text})) in #"Changed Type"
简化写法(合并列名提取与展开步骤)
如果追求代码简洁,可将列名提取和展开合并为一行:
#"Expanded Data" = Table.ExpandTableColumn(#"Kept First Rows", "Data", Table.ColumnNames(#"Kept First Rows"{0}[Data]))
关键逻辑说明
#"Kept First Rows"{0}[Data]:定位到保留的第一行中,Data字段对应的目标工作表数据(一个表对象)Table.ColumnNames(...):提取该表的所有列名,返回一维文本列表,完全符合Table.ExpandTableColumn的参数要求- 保留原代码中
#"Kept First Rows"作为展开数据源,确保只处理目标工作表的行数据
内容的提问来源于stack exchange,提问作者Einarr
相关产品推荐
相关产品推荐

