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

如何用Python脚本将日期存入SharePoint仅日期类型DateTime列

解决Python写入SharePoint仅日期类型列的方案

核心要点

SharePoint的仅日期类型列对输入格式有严格要求,常见踩坑点是误用显示名称而非字段内部名称、传入带时间/时区的无效格式。以下是两种可行实现方案:

方案一:使用Office365-REST-Python-Client(推荐)

这是微软官方支持的Python库,能自动处理字段格式和认证,避免手动拼接格式的错误。

  1. 先安装依赖:
pip install office365-rest-python-client
  1. 示例代码:
from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.user_credential import UserCredential
import datetime

# 替换为你的配置信息
site_url = "https://your-sharepoint-site-url"
username = "your-domain\\your-username"
password = "your-password"
list_title = "目标列表名称"
date_column_internal_name = "DateColumnInternalName"  # 注意:必须用字段内部名称,不是显示名称

# 初始化SharePoint上下文
ctx = ClientContext(site_url).with_credentials(UserCredential(username, password))

# 获取目标列表
target_list = ctx.web.lists.get_by_title(list_title)

# 准备仅日期值(取当前本地日期)
current_date = datetime.date.today()

# 新增列表项(如果是更新现有项,改用target_list.get_item_by_id(item_id))
item_props = {
    date_column_internal_name: current_date.isoformat()  # 直接传YYYY-MM-DD格式字符串,或current_date对象均可
}
new_item = target_list.add_item(item_props)
ctx.execute_query()

print("日期写入成功")

方案二:手动调用SharePoint REST API

如果不想依赖第三方库,可直接通过REST API实现:

import requests
from requests_ntlm import HttpNtlmAuth
import datetime

# 替换为你的配置信息
site_url = "https://your-sharepoint-site-url"
list_title = "目标列表名称"
date_column_internal_name = "DateColumnInternalName"
username = "your-domain\\your-username"
password = "your-password"

# 构造API请求地址和头部
list_api_url = f"{site_url}/_api/web/lists/getbytitle('{list_title}')/items"
headers = {
    "Accept": "application/json;odata=verbose",
    "Content-Type": "application/json;odata=verbose"
}

# 准备仅日期值
current_date = datetime.date.today().isoformat()

# 构造请求体:注意metadata类型要匹配列表(例如列表叫TestList,类型为SP.Data.TestListListItem)
payload = {
    "__metadata": {"type": "SP.Data.YourListNameListItem"},
    date_column_internal_name: current_date
}

# 发送POST请求新增项
response = requests.post(
    list_api_url,
    auth=HttpNtlmAuth(username, password),
    headers=headers,
    json=payload
)

if response.status_code == 201:
    print("日期写入成功")
else:
    print(f"写入失败:状态码{response.status_code},响应内容:{response.text}")

关键排查点

  • 字段内部名称:不要用显示名称,查看方法是进入列表设置→点击目标字段→地址栏中Field=后的字符串即为内部名称。
  • 格式要求:仅日期列只接受YYYY-MM-DD格式字符串或datetime.date对象,带时间、时区(如T00:00:00Z)的格式会被识别为无效值,导致字段为空。
  • 权限与必填设置:确保账号有列表项的编辑权限,同时检查字段是否被设置为必填(若必填且格式错误会返回明确错误)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:13:24