feat: 飞书知识库读写工具:增删查改节点、写入页面、创建早报、记录踩坑,基于 tenant_access_token(修复表格写入顺序+表头丢失+ID冲突)
This commit is contained in:
+12
-5
@@ -15,6 +15,9 @@ TEXT_BLOCK = 2
|
|||||||
CODE_BLOCK = 14
|
CODE_BLOCK = 14
|
||||||
PREFIX = 'ecc_'
|
PREFIX = 'ecc_'
|
||||||
|
|
||||||
|
# 全局表格计数器:每个表格用唯一 ID 前缀,避免多表格时 block_id 冲突
|
||||||
|
_table_counter = 0
|
||||||
|
|
||||||
LANG_CODES = {
|
LANG_CODES = {
|
||||||
'': 1, 'text': 1, 'plain': 1,
|
'': 1, 'text': 1, 'plain': 1,
|
||||||
'bash': 7, 'sh': 7, 'shell': 7,
|
'bash': 7, 'sh': 7, 'shell': 7,
|
||||||
@@ -87,6 +90,7 @@ def split_row(line):
|
|||||||
|
|
||||||
def parse_table(lines, start_idx):
|
def parse_table(lines, start_idx):
|
||||||
"""Parse a markdown table. Returns (blocks, end_idx) or (None, start_idx)."""
|
"""Parse a markdown table. Returns (blocks, end_idx) or (None, start_idx)."""
|
||||||
|
global _table_counter
|
||||||
i = start_idx
|
i = start_idx
|
||||||
headers = []
|
headers = []
|
||||||
has_header = False
|
has_header = False
|
||||||
@@ -115,8 +119,10 @@ def parse_table(lines, start_idx):
|
|||||||
data_rows.append(row)
|
data_rows.append(row)
|
||||||
i += 1
|
i += 1
|
||||||
|
|
||||||
# No header case: first line was a data row
|
# 表头行必须作为第一行保留(飞书 header_row=True 时首行即表头)
|
||||||
if not has_header:
|
if has_header:
|
||||||
|
data_rows.insert(0, headers)
|
||||||
|
else:
|
||||||
data_rows.insert(0, first_cells)
|
data_rows.insert(0, first_cells)
|
||||||
|
|
||||||
if not data_rows:
|
if not data_rows:
|
||||||
@@ -127,7 +133,8 @@ def parse_table(lines, start_idx):
|
|||||||
|
|
||||||
# Build nested blocks
|
# Build nested blocks
|
||||||
blocks = []
|
blocks = []
|
||||||
table_id = f'{PREFIX}t0'
|
table_id = f'{PREFIX}t{_table_counter}'
|
||||||
|
_table_counter += 1
|
||||||
cell_ids = []
|
cell_ids = []
|
||||||
|
|
||||||
# Table container
|
# Table container
|
||||||
@@ -150,8 +157,8 @@ def parse_table(lines, start_idx):
|
|||||||
for row_idx, row in enumerate(data_rows):
|
for row_idx, row in enumerate(data_rows):
|
||||||
for col_idx in range(num_cols):
|
for col_idx in range(num_cols):
|
||||||
cell_text = row[col_idx] if col_idx < len(row) else ''
|
cell_text = row[col_idx] if col_idx < len(row) else ''
|
||||||
cell_id = f'{PREFIX}t0r{row_idx}c{col_idx}'
|
cell_id = f'{table_id}r{row_idx}c{col_idx}'
|
||||||
text_id = f'{PREFIX}t0r{row_idx}c{col_idx}t'
|
text_id = f'{table_id}r{row_idx}c{col_idx}t'
|
||||||
cell_ids.append(cell_id)
|
cell_ids.append(cell_id)
|
||||||
|
|
||||||
is_header_cell = has_header and row_idx == 0
|
is_header_cell = has_header and row_idx == 0
|
||||||
|
|||||||
Reference in New Issue
Block a user