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_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
来更新工作表中的数据。