AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79118703
Accepted
Python_Learner
Python_Learner
Asked: 2024-10-23 23:50:14 +0800 CST2024-10-23 23:50:14 +0800 CST 2024-10-23 23:50:14 +0800 CST

如何格式化 Graph API 调用来更新 Excel 单元格?

  • 772

我想使用 Microsoft Graph API 更新 Excel 单元格值(托管在 SharePoint 中)。文档在此处。

我已经使用类似于下面的格式成功进行了其他 API 调用(格式更新、清除单元格),请帮助我理解我做错了什么。

在代码示例中,我想将“41373”写入工作表“Plant_3”中的单元格 B:17。代码示例返回400代码错误:

"code": "InvalidAuthenticationToken",
"message": "Access token is empty.",

此消息可能很笼统,表示 API 调用的格式错误,而不是身份验证问题。其他 Graph API 调用也使用相同的格式id,keys因此我怀疑这不是身份验证问题。

def graph_config_params():
    """
    read authentication parameters from config file, return dict with results
    :return: (dict) configuration parameters
    """
    try:
        # Read the config file
        config = configparser.ConfigParser()
        config.read('config.ini')
        # assign authorization tokens from config file to variables
        return_dict = {'client_id': config['entra_auth']['client_id'],
                       'client_secret': config['entra_auth']['client_secret'],
                       'tenant_id': config['entra_auth']['tenant_id'],
                       # Get necessary configuration data for the SharePoint file
                       'site_id': config['site']['site_id'],
                       'document_library_id': config['site']['document_library_id'],
                       'doc_id': config['site']['doc_id'],
                       'drive_id': config['site']['drive_id']}
        return return_dict
    except Exception as e:
        log.exception(e)    
def set_up_ms_graph_authentication(graph_auth_args=graph_config_params()):
    """
    Create headers with access token for Microsoft Graph API to authenticate
    :param graph_authentication_params:
    :return: (dict) headers with access token
    """
    try:
        # Set up Microsoft Graph authentication
        msal_scope = ['https://graph.microsoft.com/.default']
        msal_app = ConfidentialClientApplication(
            client_id=graph_auth_args['client_id'],
            authority=f"https://login.microsoftonline.com/{graph_auth_args['tenant_id']}",
            client_credential=graph_auth_args['client_secret'])
        result = msal_app.acquire_token_silent(scopes=msal_scope,
                                               account=None)
        if not result:
            result = msal_app.acquire_token_for_client(scopes=msal_scope)
        if 'access_token' in result:
            access_token = result['access_token']
        else:
            raise Exception("Failed to acquire token")
        # Prepare request headers with the acquired access token
        headers = {'Authorization': f'Bearer {access_token}'}
        # log.info(f'headers: {headers}')
        return headers
    except Exception as e:
        log.exception(e)    
sheet = 'Plant_3'
# get variables that work in other Graph API calls
config_args=graph_config_params()
# get Authorization Bearer token, again works in other Graph API calls.
my_headers = set_up_ms_graph_authentication()
url=  f"https://graph.microsoft.com/v1.0/sites/{config_args['site_id']}/drives/{config_args['drive_id']}/items/{config_args['doc_id']}/workbook/worksheets/{sheet}/range/(address='B:17')"
response = requests.patch(url,
                          headers=my_headers,
                          json={'values': [['41373']] })

我尝试过的事情:

  • 将关键字参数从 切换json为data。
  • json在和 中,“41373” 周围都有单括号 / 无括号data。
  • 已验证权限,已删除Files.ReadWrite.All并出现403错误。
  • 切换“补丁”post并尝试上述所有配置。
  • 添加valueType参数:[['String']]
  • 1 1 个回答
  • 46 Views

1 个回答

  • Voted
  1. Best Answer
    user2250152
    2024-10-24T13:41:33+08:002024-10-24T13:41:33+08:00

    我发现几个与异常无关的问题:

    • 如果要更新单元格 B17 中的值,则地址必须B17不是B:17
    • 最后一段必须是/range(address='B17'),而不是/range/(address='B17')。

    带有json参数的请求应该是

    response = requests.patch(url,headers=my_headers,json={'values': [['41373']]})
    

    使用数据参数时,请求主体必须是字符串,并且请求必须包含标头content-type:application/json

    response = requests.patch(url,headers=my_headers,data='{"values": [["41373"]]}')
    

    根据异常情况,问题在于缺少authorization标题或缺少范围。

    • 1

相关问题

  • 将复制活动的序列号添加到 Blob

  • Packer 动态源重复工件

  • 选择每组连续 1 的行

  • 图形 API 调用列表 subscribedSkus 状态权限不足,但已授予权限

  • 根据列值创建单独的 DF 的函数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行?

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    何时应使用 std::inplace_vector 而不是 std::vector?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Martin Hope
    Aleksandr Dubinsky 为什么 InetAddress 上的 switch 模式匹配会失败,并出现“未涵盖所有可能的输入值”? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge 为什么这个简单而小的 Java 代码在所有 Graal JVM 上的运行速度都快 30 倍,但在任何 Oracle JVM 上却不行? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini 具有指定基础类型但没有枚举器的“枚举类”的用途是什么? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer 何时应使用 std::inplace_vector 而不是 std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB 为什么 GCC 生成有条件执行 SIMD 实现的代码? 2024-02-17 06:17:14 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve