如何使用office365 API签入上传的文件到Sharepoint?

问题描述 投票:0回答:2

所以我可以使用office365包在SharePoint中上传文件,但是在SharePoint中它没有签入,我必须手动执行。该包中有什么方法可以进行签入吗?

这是我的代码:

def csv_to_sp(spfile_path,output):
    ctx = Extract.connect()
    target_folder =  ctx.web.get_folder_by_server_relative_url(spfile_path)
    with open(output,'rb') as content_file:
        file_content = content_file.read()

    target_folder.upload_file(output,file_content).execute_query()
    response = 'Uploaded to sharepoint!'
    return response
python sharepoint office365 office365api
2个回答
0
投票

听起来目标库发生了以下情况之一,这会导致上传的文档在上传后被检出:

  1. 需要启用结帐。启用此设置后,默认情况下会签出您上传的新文档。您可以从“库设置/版本控制设置”页面切换此选项,如此处所述。
  2. 有一些必填字段没有默认值。当其他元数据字段添加到库并设置为必填时,可以选择指定默认值。如果未指定默认值,则上传到所述库的任何新项目都将被签出,并且仅对上传文档的用户可见。在用户手动签入之前,其他任何人(包括管理员)都看不到这些项目,此时用户将被迫为必填字段提供值。

由于您没有提到必须指定字段值,我怀疑您的库中可能有#1。 尝试关闭“需要签出”设置并重新测试。


0
投票

我刚刚让它为我工作。您需要对刚刚上传的对象进行第二次调用,并对其调用

checkin
方法。请参阅我添加到您的函数中的三行。您需要提取或提供文件名。

def csv_to_sp(spfile_path,output):
    ctx = Extract.connect()
    target_folder =  ctx.web.get_folder_by_server_relative_url(spfile_path)
    with open(output,'rb') as content_file:
        file_content = content_file.read()

    target_folder.upload_file(output,file_content).execute_query()
    response = 'Uploaded to sharepoint!'
    
    object_path = ctx.web.get_file_by_server_relative_url(spfile_path + <YOUR_FILE_NAME>)
    ctx.load(object_path).execute_query()
    object_path.checkin(comment="upload", checkin_type=2).execute_query()
    
    return response

有三个

checkin_types
,分别是次要、主要和覆盖。 https://learn.microsoft.com/en-us/previous-versions/office/sharepoint-csom/ee542953(v=office.15)

© www.soinside.com 2019 - 2024. All rights reserved.