PowerQuery API请求中URL参数的日期格式转换问题
解决PowerQuery日期格式转换问题
核心问题分析
你遇到的错误是因为Date.FromText默认使用系统日期格式解析文本,而你的输入是dd-mm-yyyy格式的文本,和系统默认格式不匹配导致解析失败。解决思路是明确指定输入日期格式,再转换为API需要的输出格式。
直接修改调用代码(快速方案)
在Web.Contents的查询参数中,直接对日期值进行格式转换:
Csv.Document(Web.Contents("my.api/leave/leavecsv", [Query = [ periodStart = Date.ToText(Date.FromText(GetValue("periodStart"), [Format="dd-MM-yyyy"]), [Format="MM-dd-yyyy"]), periodEnd = Date.ToText(Date.FromText(GetValue("periodEnd"), [Format="dd-MM-yyyy"]), [Format="MM-dd-yyyy"]), department = GetValue("department") ]]),[Delimiter=";", Columns=14, Encoding=1252, QuoteStyle=QuoteStyle.None])
优化GetValue函数(通用方案)
如果需要多次处理日期,可以修改GetValue函数,增加日期处理的可选参数,让函数更通用:
let GetNamedRange=(NamedRange, optional IsDate as logical) => let name = Excel.CurrentWorkbook(){[Name=NamedRange]}[Content], value = name{0}[Column1], processedValue = if IsDate = true then Date.ToText(Date.FromText(value, [Format="dd-MM-yyyy"]), [Format="MM-dd-yyyy"]) else value in processedValue in GetNamedRange
调用时只需传入true标记日期类型:
Csv.Document(Web.Contents("my.api/leave/leavecsv", [Query = [ periodStart = GetValue("periodStart", true), periodEnd = GetValue("periodEnd", true), department = GetValue("department") ]]),[Delimiter=";", Columns=14, Encoding=1252, QuoteStyle=QuoteStyle.None])
关键说明
Date.FromText(value, [Format="dd-MM-yyyy"]):明确告知PowerQuery输入文本的日期格式,避免系统默认格式不匹配的错误。Date.ToText(..., [Format="MM-dd-yyyy"]):将解析后的日期值转换为API要求的字符串格式,确保URL参数符合接口规范。
内容的提问来源于stack exchange,提问作者Leth
相关产品推荐
相关产品推荐

