如何让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
相关产品推荐
相关产品推荐

