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

使用Python向SharePoint列表写入含空值日期列报错问题

报错根因

触发Cannot convert a primitive value to the expected type 'Edm.DateTime'和400 Client Error: Bad Request的核心原因有两点:

  • 日期字段传值逻辑错误:原代码中"Date":str(x["Date"])是将整列日期序列整体转为字符串,而非读取当前遍历行的对应日期值,本身存在传值错误
  • 空值未做兼容处理:pandas读取Excel时,空白日期单元格会被解析为NaT(时间类型专属空值),该类型无法被SharePoint接口识别为合法的Edm.DateTime类型值,传入后直接触发类型校验失败。当日期列无空值时,整列转字符串的写法恰好能被接口兼容,因此可以偶然运行成功。
修复方案

需要对代码做三处调整:

  • 逐行读取当前行的日期字段值,禁止直接传入整列对象
  • 增加空值判断:如果当前行日期为NaT/空值,给日期字段传None,SharePoint会自动将对应字段留空
  • 非空日期值统一转为ISO 8601标准格式字符串,匹配Edm.DateTime的类型要求,避免格式不兼容问题
修复后可运行代码
import pandas as pd
from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.client_credential import ClientCredential

# 替换为实际的认证配置
site_url = "你的SharePoint站点地址"
client_id = "你的Azure应用Client ID"
client_secret = "你的Azure应用Client Secret"
ctx = ClientContext(site_url).with_credentials(ClientCredential(client_id, client_secret))

sp_list = "Samplelist"       
target_list = ctx.web.lists.get_by_title(sp_list)
df = pd.read_excel('ExcelBook.xlsx')

for _, row in df.iterrows():
    field_values = {"Title": row["Name"]}
    date_value = row["Date"]
    # 处理日期字段
    if pd.isna(date_value):
        field_values["Date"] = None
    else:
        # 转为ISO标准日期格式,适配SharePoint接口要求
        field_values["Date"] = date_value.isoformat()
    # 提交创建列表项
    target_list.add_item(field_values).execute_query()
注意事项
  • 禁止直接用str()转换pandas的时间类型对象,不同运行环境下转换出的字符串格式不统一,极易触发接口类型校验失败
  • 如果日期列包含时区信息,转ISO格式时请对齐SharePoint站点的时区配置,避免出现时间偏差
  • 批量写入数据量较大时,可以攒够100条条目后再批量执行execute_query(),减少接口请求次数,提升写入效率

内容的提问来源于stack exchange,提问作者ganesh kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:18:27