作者:张艺可
推荐理由
本文源自于一个想偷懒的打工人,她想把周报数据自动更新到飞书表格里,于是从创建应用开始,研究了怎么用python调用飞书的API去往电子表格里插入数据
一、打工人自我介绍
😇本人是卑微打工人,日常有好多重复性和周期性工作
以下内容由一个实习生想偷懒的念头而产生
二、背景需求
我想让每周定期更新的周报数据能够一键生成,写好的爬虫,下一步就是怎么把爬到的数据放到飞书电子表格里
于是,就涉及了电子表格权限获取、表格创建、插入行列、写入数据、写入公式等内容
三、开发流程
Step 1 创建应用
打开飞书工作台,右上角创建应用,来到飞书开放平台,创建自己的应用,设置一下应用名字和描述就行。
Step 2 设置应用及发布
创建好应用后要给自己的应用配置权限,以便让你的应用获得访问各种文档、日历、会议等等模块的权限 这里我懒得纠结,于是把云文档的所有权限都开了
选择好权限之后,一定记得要发布!!!!自己创建的飞书应用只有发布了之后这个API才能生效
Step 3 调用API
找到自己创建应用里的应用凭证就可以调用api了
使用下面的代码获得你的token,即tat,这个代表着你的身份
#应用凭证里的 app id 和 app secret
post_data = {"app_id": "cli_**********", "app_secret": ******************}
r = requests.post(url, data=post_data)
tat = r.json()["tenant_access_token"]
Step 4 设置飞书文件权限
将飞书的权限设成获得链接可编辑,这也是为你操作电子表格做准备
Step 5 接入飞书表格
接下来你就可以操作飞书表格了!!但还需要确定一个操作的url
URL
但是!在每一类操作前都需要有一个url,它的结构如下:
表格名称
表格名称是这个表格的token,可以从这个文档的网址中找到
表格通过浏览器打开,查看网址,样子如下,sh开头的就是这个表格的token,?后的sheet=XXXXXX是代表工作表名称
下面范例中,表格名称为shtcnjGdHzBm7Qa85UXQYk9OPxh
📌https://企业地址/sheets/shtcnjGdHzBm7Qa85UXQYk9OPxh?sheet=402cb1
请求
它是你要进行的表格操作的标志,进行插入数据和插入行列等操作的时候,请求也是不一样的
🎉下面简单介绍部分常用功能
插入数据
向范围之前增加相应数据的行和相应的数据这里的输入是value,格式类似矩阵,向range里放入value中的这一个矩阵
📌“range”:"{sheet名}!{单元格范围}
💡这里的sheet名一定是飞书文档地址中,sheet=******,这里的名称,而不是自己给sheet命名的名称,一般是六个数字或字母
可输入的数据类型可以参考飞书官方的开发文档#飞书文档的储存地址结构:https://企业地址/sheets/shtcnjGdHzBm7Qa85UXQYk9OPxh?sheet=402cb1 #一般来说sh开头为文档地址,sheet=后跟工作簿地址,这两块是代码需要引用的参数
import json
url = "https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/shtcnxuRDo9QJDBCeowEAQqUIvd/values" #写入的sh开头的文档地址,其他不变
header = {"Content-Type": "application/json", "Authorization": "Bearer " + str(tat)} #请求头
post_data = {"valueRange": {"range": "402cb1!C3:N8" ,"values": [[ "Hello", 1],[ "World", 1]]}} #在402cb1这个工作簿内的单元格C3到N8写入内容为helloworld等内容
r2 = requests.put(url, data=json.dumps(post_data), headers=header) #请求写入
print( r2.json()["msg"]) #输出来判断写入是否成功
特殊的,输入公式,官方给出的格式是
{
“type”: “formula”,
“text”: “=A1”
}
因此只需要将post_data变为你要写的公式,输入的value变成了一个字典,包含type和内容
#写入公式
post_data = {"valueRange": {"range": "PSGHlz!I2:I2" ,"values": [[{"type":"formula","text":"=IFERROR((E2-E9)/E9,0)"}]]}}
插入行/列
⚠️注意!上一种插入数据实际上只是写入,只对指定范围的数据进行覆盖
想要真正的插入数据就需要先插入行列
{
“dimension”:{
“sheetId”:“string”,
“majorDimension”:“ROWS”,
“startIndex”:0,
“endIndex”:0
},
“inheritStyle”:“BEFORE”
}
具体请求流程同插入数据,把url中的value改成insert_dimension_range,就是更换请求
示例
在第一行后插入一行
url = "https://open.feishu.cn/open- apis/sheets/v2/spreadsheets/shtcnl9XOiwOCVWEtjHuXKeT3zd/insert_dimension_range" #写入的sh开头的文档地址,其他不变
header = {"Content-Type": "application/json", "Authorization": "Bearer " + str(tat)} #请求头
post_data ={
"dimension":{
"sheetId":"PSGHlz",
"majorDimension":"ROWS",#可选COLUMNS
"startIndex":1,
"endIndex":2
},
"inheritStyle":"AFTER"#可选BEFORE
}
r2 = requests.post(url, data=json.dumps(post_data), headers=header) #请求写入
print( r2.json()["msg"]) #输出来判断写入是否成功
四、总结
只讲述了表格相关的基础操作,其他操作也基本是相似的,需要做的也就是改url
掌握了基本的API使用,其余任何想要完成的云文档操作基本都能够通过API访问,参考飞书开发文档都能够找到调用方法。