如何用Python脚本将日期存入SharePoint仅日期类型DateTime列
核心要点
SharePoint的仅日期类型列对输入格式有严格要求,常见踩坑点是误用显示名称而非字段内部名称、传入带时间/时区的无效格式。以下是两种可行实现方案:
方案一:使用Office365-REST-Python-Client(推荐)
这是微软官方支持的Python库,能自动处理字段格式和认证,避免手动拼接格式的错误。
- 先安装依赖:
pip install office365-rest-python-client
- 示例代码:
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
相关产品推荐
相关产品推荐

