如何用Power Query M的Csv.Document()读取同文件内指定工作表数据?
用Power Query的Csv.Document读取同文件工作表中的CSV内容
问题描述
我想使用Power Query的Csv.Document()函数,读取同一Excel文件内指定工作表中的CSV格式数据。之前我通过以下方式读取磁盘中外部CSV文件:
= Csv.Document(File.Contents("C:\Users\foo\OneDrive\Desktop\test.csv"),[Delimiter=",", Columns=1, Encoding=65001])
但文件通过OneDrive共享,不同用户打开时路径不一致,所以更倾向于把CSV内容粘贴到当前文件的某个工作表中,再用Power Query读取并导入数据模型。本质上就是要替换掉File.Contents("C:\Users\foo\OneDrive\Desktop\test.csv"),改成读取同文件内工作表数据的方式。
待粘贴的CSV内容示例(规范格式):
"created","currency","gross","fee","net","reporting_category","customer_facing_amount","customer_facing_currency","shipping_address_country","payment_metadata[order_id]" "2024-01-01 23:56:03","sek","4262.52","65.74","4196.78","charge","390.83","eur","ES","2955" "2024-01-02 12:49:26","sek","926.66","24.97","901.69","charge","85.00","eur","GB","2958"
解决方案
实现步骤
- 准备工作表:将CSV内容粘贴到当前Excel文件的某个工作表(建议命名为
CSV_Content),确保内容从A1单元格开始,无多余空行。 - 编写Power Query M代码:通过
Excel.CurrentWorkbook()读取工作表数据,转换为完整文本后传入Csv.Document()解析。
最终M代码
let // 读取当前工作簿中指定工作表的数据 Source = Excel.CurrentWorkbook(){[Name="CSV_Content"]}[Content], // 将工作表每行内容合并为完整的CSV文本(换行符分隔) CombinedCSVText = Text.Combine(Source[Column1], "#(lf)"), // 解析CSV文本 ParsedData = Csv.Document(CombinedCSVText, [Delimiter=",", Encoding=65001]) in ParsedData
代码说明
Excel.CurrentWorkbook(){[Name="CSV_Content"]}[Content]:定位并读取当前工作簿中指定名称的工作表,返回包含每行内容的表结构,Column1对应CSV内容所在的A列。Text.Combine(Source[Column1], "#(lf)"):把工作表中每行的文本用换行符连接,模拟外部CSV文件的完整文本格式。Csv.Document(...):保持和原外部文件读取一致的参数配置,仅将数据源替换为合并后的CSV文本。
注意事项
- 如果CSV内容在工作表中不是A列(即
Column1),需根据实际列名修改Source[Column1]。 - 工作表名称需和代码中的
"CSV_Content"完全匹配(区分大小写)。
内容的提问来源于stack exchange,提问作者user1853417
相关产品推荐
相关产品推荐

