|
|
@@ -86,6 +86,38 @@ class Feishu:
|
|
|
|
|
|
|
|
|
class FeishuSheetApi(Feishu):
|
|
|
+ async def read_sheet_range(
|
|
|
+ self, spreadsheet_token: str, range_str: str
|
|
|
+ ) -> list[list]:
|
|
|
+ """读取电子表格指定范围的数据。
|
|
|
+
|
|
|
+ Args:
|
|
|
+ spreadsheet_token: 电子表格 token
|
|
|
+ range_str: 查询范围,格式为 "<sheet_id>!<开始位置>:<结束位置>",如 "4d54bd!A1:K358"
|
|
|
+
|
|
|
+ Returns:
|
|
|
+ 数据二维数组。失败或无数据时返回空列表。
|
|
|
+ """
|
|
|
+ if not self.token:
|
|
|
+ await self.fetch_token()
|
|
|
+
|
|
|
+ url = f"https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{spreadsheet_token}/values/{range_str}"
|
|
|
+ print(self.token)
|
|
|
+ headers = {
|
|
|
+ "Authorization": f"Bearer {self.token}",
|
|
|
+ "Content-Type": "application/json; charset=utf-8",
|
|
|
+ }
|
|
|
+ async with AsyncHttpClient() as client:
|
|
|
+ response = await client.get(url=url, headers=headers)
|
|
|
+
|
|
|
+ if response.get("code", 0) != 0:
|
|
|
+ print(f"飞书读取表格失败: {response.get('msg', 'unknown error')}")
|
|
|
+ return []
|
|
|
+
|
|
|
+ data = response.get("data", {})
|
|
|
+ value_range = data.get("valueRange", {})
|
|
|
+ return value_range.get("values", [])
|
|
|
+
|
|
|
async def prepend_value(self, sheet_token, sheet_id, ranges, values):
|
|
|
insert_value_url = "https://open.feishu.cn/open-apis/sheets/v2/spreadsheets/{}/values_prepend".format(
|
|
|
sheet_token
|