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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:20:22