class OperateKnowledgeBaseExcel():robot_code = '' # agent_id = '' #app_key = '' #群机器人app_secret = '' #群机器人def __init__(self,union_id, workbook_id, worksheet_id=''):self.union_id = union_idself.workbook_id = workbook_id # 获取方式:... > 文档信息 > 表格IDself.worksheet_id = worksheet_id # 获取方式:self.get_workbook_sheet_names() 拿到所有sheet名称和idif 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_id
和workbook_id
参数。其中,union_id
是用户的唯一标识,workbook_id
是钉钉文档表格的ID。如果没有设置union_id
,将会抛出异常。
然后,get_access_token
方法用于获取访问令牌。该方法发送请求到钉钉API,通过提供的app_key
和app_secret
获取访问令牌,并返回响应中的access_token
字段。
接下来,update
方法用于更新工作表中指定区域的数据。它需要传入range_address
和values
参数,其中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
来更新工作表中的数据。