api接口更新钉钉文档

class OperateKnowledgeBaseExcel():
    robot_code = ''    # 
    agent_id = ''      #
    app_key = ''       #群机器人
    app_secret = ''    #群机器人


    def __init__(self,union_id, workbook_id, worksheet_id=''):
        self.union_id = union_id
        self.workbook_id = workbook_id  # 获取方式:... > 文档信息 > 表格ID
        self.worksheet_id =  worksheet_id # 获取方式:self.get_workbook_sheet_names() 拿到所有sheet名称和id
        if not self.union_id:
            raise Exception('请先设置union_id')
    def get_access_token(self):
        """ 获取token: https://open.dingtalk.com/document/orgapp/obtain-orgapp-token """
        headers = {'Content-Type': "application/x-www-form-urlencoded"}
        url = f"https://oapi.dingtalk.com/gettoken/?appkey={self.app_key}&appsecret={self.app_secret}"
        resp = requests.get(url, headers=headers)
        # print(resp.json()['access_token'])
        return resp.json()['access_token']

        self.access_token = self.get_access_token()
    def update(self, range_address, values):
        """
        更新工作表指定区域的数据
        开发者文档:https://open.dingtalk.com/document/orgapp/get-cell-properties
        :param range_address: 更新区域,如:A2:B3
        :param values: 更新的数据,如:[['张三', 18], ['李四', 19]]
        """
        url = f'https://oapi.dingtalk.com/v1.0/doc/workbooks/{self.workbook_id}/sheets/{self.worksheet_id}/ranges/{range_address}?operatorId={self.union_id}'
        headers = {
            'Content-Type': "application/json",
            'Host': 'api.dingtalk.com',
            'x-acs-dingtalk-access-token': self.access_token
        }
        data = {"values": values}
        resp = requests.put(url, data=json.dumps(data), headers=headers)
        print("更新工作表区域:", resp.json())


import pandas as pd
from robot.operate_knowledgebase import OperateKnowledgeBaseExcel
import json


# 读取Excel文件
excel_file = r'D:\1.xlsx'
df = pd.read_excel(excel_file)


workbook_id = ''   #钉钉文档表信息
union_id = ''      #用户id

# 将数据转换为列表形式
values = df.values.tolist()
values = [[str(item) for item in row] for row in values]

# 构造字典对象
data = values

# 将字典对象转换为JSON字符串
json_data = json.dumps(data, ensure_ascii=False)

worksheet_id = OperateKnowledgeBaseExcel(union_id, workbook_id).get_workbook_sheet_names()['value'][0]['id']

print(json_data)
range_address = 'A2:L191'    #表的左上第一个,和右下最后一个位置
OperateKnowledgeBaseExcel(union_id, workbook_id, worksheet_id).update(range_address, json_data)

首先,在__init__方法中,需要传入union_idworkbook_id参数。其中,union_id是用户的唯一标识,workbook_id是钉钉文档表格的ID。如果没有设置union_id,将会抛出异常。

然后,get_access_token方法用于获取访问令牌。该方法发送请求到钉钉API,通过提供的app_keyapp_secret获取访问令牌,并返回响应中的access_token字段。

接下来,update方法用于更新工作表中指定区域的数据。它需要传入range_addressvalues参数,其中range_address表示要更新的区域,values是要更新的数据。该方法会构造请求URL,并发送PUT请求到钉钉API,将数据以JSON格式进行更新。

在你的代码示例中,首先读取了一个Excel文件1.xlsx,然后使用pd.read_excel方法将文件内容转换为DataFrame对象df

接着,将DataFrame对象中的数据转换为列表形式,并将每个元素转换为字符串类型。

然后,将数据列表转换为字典对象,并使用json.dumps方法将字典对象转换为JSON字符串。

之后,通过调用OperateKnowledgeBaseExcel类的实例化对象的get_workbook_sheet_names方法获取工作表的名称和ID,将第一个工作表的ID赋值给worksheet_id变量。

最后,调用OperateKnowledgeBaseExcel类的实例化对象的update方法,传入要更新的区域范围range_address和JSON数据json_data来更新工作表中的数据。

你可能感兴趣的:(钉钉,python,开发语言)