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

如何让Microsoft Graph Table API返回Excel表格的原始日期格式值?

问题描述

我正在从Microsoft工作簿/Excel文件的表格中获取数据,表格包含格式为日期的出生日期(DOB)列。使用Microsoft Graph的Table API调用获取数据时,日期值被返回为整数形式。

调用的API地址:

https://graph.microsoft.com/v1.0/me/drive/root:/book.xlsx:/workbook/tables/table4/columns

API返回示例:

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('<user_id>')/drive/root/workbook/tables('table4')/columns",
"value": [
    {
        "@odata.id": "/users('<user_id>')/drive/root/workbook/tables(%27%7BF44C7573-9BBE-46F3-B0BE-C5607762D2AB%7D%27)/columns(%271%27)",
        "values": [
            [
                "Name"
            ],
            [
                "Student 1"
            ],
            [
                "Student 2"
            ]
        ],
        "id": "1",
        "index": 0,
        "name": "Name"
    },
    {
        "@odata.id": "/users('<user_id>')/drive/root/workbook/tables(%27%7BF44C7573-9BBE-46F3-B0BE-C5607762D2AB%7D%27)/columns(%273%27)",
        "values": [
            [
                "DOB"
            ],
            [
                35339
            ],
            [
                34249
            ]
        ],
        "id": "3",
        "index": 1,
        "name": "DOB"
    }
 ]
}

原始日期为常规日期格式(对应返回的整数35339、34249),请问是否有方法让API返回原始格式的日期值?

解决方案

方法1:通过API参数指定日期格式

在Graph API请求中添加$format参数,让API直接返回格式化后的日期。推荐调用表格行的接口而非列接口,这样能更精准地处理日期值:

https://graph.microsoft.com/v1.0/me/drive/root:/book.xlsx:/workbook/tables/table4/rows?$select=values&$format=date-time

该参数会将Excel的日期序列值转换为ISO 8601标准的日期时间格式返回。

方法2:客户端手动转换日期序列值

如果无法修改API请求,可以在客户端将返回的整数转换为日期。Excel日期序列以1900年1月1日为起始点(值为1),需注意1900年闰年的bug,转换时要修正:

  • JavaScript示例:
function excelDateToDate(excelDate) {
    // 修正1900年闰年bug,减去2天
    const date = new Date((excelDate - 25569) * 86400000);
    return date.toLocaleDateString();
}
// 转换示例
console.log(excelDateToDate(35339)); // 输出对应日期
  • Python示例:
from datetime import datetime, timedelta

def excel_date_to_date(excel_date):
    return datetime(1900, 1, 1) + timedelta(days=excel_date - 2)

# 转换示例
print(excel_date_to_date(35339).strftime('%Y-%m-%d'))

方法3:Excel中预先处理日期

在Excel表格添加辅助列,使用TEXT函数将日期转为文本格式:

=TEXT(A2, "yyyy-mm-dd")

(A2为DOB列的单元格)之后调用API获取该辅助列数据,即可直接得到格式化后的日期字符串。

内容的提问来源于stack exchange,提问作者Harshad Panmand

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:40:42