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

如何通过SharePoint API用Python自动填充文件夹文件的自定义列

解决方案:通过Python更新SharePoint文件夹中文件的自定义列

SharePoint中的文件本质是文档库的列表项(List Item),每个文件都关联一个ListItem对象,你可以通过listItemAllFields属性访问和修改自定义字段。以下是实现自动填充Number和Version列的完整方案:

核心思路

  1. 获取目标文件夹下的所有文件,同时加载文件关联的列表项属性
  2. 从文件名中提取Number和Version的值(适配你提供的文件名格式)
  3. 更新每个文件对应的自定义列字段
  4. 批量提交更新到SharePoint

完整代码示例

import re
from office365.sharepoint.client_context import ClientContext
from office365.runtime.auth.user_credential import UserCredential

def update_file_custom_columns(ctx, folder_relative_path):
    # 获取目标文件夹
    folder = ctx.web.get_folder_by_server_relative_url(folder_relative_path)
    # 加载文件的Name和关联的列表项属性
    files = folder.files
    ctx.load(files, 'Include(Name, listItemAllFields)')
    ctx.execute_query()

    # 批量收集更新操作,提升处理效率
    update_operations = []
    for file in files:
        file_name = file.properties['Name']
        # 解析文件名:提取Number和Version
        try:
            # 去掉文件后缀
            name_without_ext = file_name.rsplit('.', 1)[0]
            # 拆分名称与版本部分
            name_part, version_part = name_without_ext.split('-')
            
            # 从名称片段提取连续数字作为Number
            number_match = re.search(r'\d+', name_part)
            # 从版本片段提取数字作为Version
            version_match = re.search(r'\d+', version_part)
            
            if number_match and version_match:
                number_val = number_match.group()
                version_val = version_match.group()

                # 获取文件对应的列表项
                list_item = file.listItemAllFields
                # 更新自定义列(注意:使用列的**内部名称**,而非显示名称)
                list_item.set_property('Number', number_val)
                list_item.set_property('Version', version_val)
                list_item.update()
                update_operations.append(list_item)
                print(f"待更新:{file_name} -> Number={number_val}, Version={version_val}")
            else:
                print(f"跳过:无法从{file_name}提取有效数字/版本")
        except ValueError:
            print(f"跳过:{file_name}格式不符合预期(未找到'-'分隔符)")

    # 批量提交更新请求
    if update_operations:
        ctx.execute_query()
        print("所有自定义列更新完成")

# 初始化上下文(替换为你的SharePoint站点URL和凭据)
ctx = ClientContext("https://your-sharepoint-site-url").with_credentials(UserCredential("your-username", "your-password"))
# 调用函数更新自定义列(替换为你的文件夹相对路径)
update_file_custom_columns(ctx, "/sites/YourSite/Shared Documents/TargetFolder")

关键注意事项

  • 自定义列的内部名称:必须使用SharePoint列的内部名称(而非显示名称)。获取方式:进入列的设置页面,查看URL中Field=后面的字符串(比如显示名称为Number,内部名称可能是Number或_x004e_umber)
  • 文件名解析逻辑:代码中的正则匹配基于abc123-1.pdf格式编写,若你的文件名格式有变化,需调整正则表达式适配
  • 权限要求:确保账号拥有文档库的编辑权限,否则会触发权限错误
  • 批量更新优化:采用批量收集操作后一次性提交的方式,减少对SharePoint的请求次数,提升大量文件的处理效率

内容的提问来源于stack exchange,提问作者Ugo Labbé

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:52:50