Skip to content

feat: 表格 cell 內段落級定址缺席 — 多段落 cell 只能整格覆寫(塌段落)或全域取代(誤傷他列) #156

Description

@kiki830621

Problem

表格 cell 內的個別段落沒有任何定址能力。 寫入 cell 只有兩條路,各自有無法迴避的限制:

工具 語意 對多段落 cell 的後果
update_cell 整格覆寫 把 N 個獨立段落壓成單一段落+換行,段落級屬性(pPr:縮排、間距、對齊、樣式)一併失去
replace_text replace-all(v2.1 起 all 參數移除、恆為全域) 定位字串若不唯一,會連同其他列一起改掉

而段落級工具明文排除表格:

  • get_paragraphs 說明:「回傳順序是 get_paragraphs readback index:top-level paragraphs + block-level SDT 內段落;不含 table-cell paragraphs
  • update_paragraph 說明:「index:top-level paragraph ordinal(從 0 開始;只計直接位於 body.children 的 .paragraph不計 tables / block-level SDTs)」

交集的結果是一類無安全路徑的格子:定位字串不唯一、且該格含多個段落

Reproduction

一份官方表單的檢核欄(單一 cell,含 4 個獨立段落):

□(1)
□(2)
□(3)
□無報酬

同一份文件裡 □(1) 在三個不同列各出現一次(search_text 實測 3 命中)。要只勾這一格的 (1)

  • replace_text(find: "□(1)") → 三列全被勾(replace-all)
  • update_cell(row, col, text: "V(1)\nV(2)\nV(3)\n□無報酬") → 寫入成功,但四個段落塌成一個

塌陷的機械證據(search_text 回報的 position 是段落內偏移):

該格殘存 的位置
填寫前 position 0(各自段落開頭,4 個段落各一)
填寫後 position 15"V(1)\nV(2)\nV(3)\n" = 15 字元 → 全部併入同一段落)

Expected

能定址並只改寫「某個 cell 內的第 k 個段落」,其餘段落與各自的 pPr 原樣不動。例如:

update_cell_paragraph(doc_id, table_index, row, col, para_index, text)

或讓 replace_text 支援 cell/段落範圍限定(例如 scope: {table, row, col}first_onlyoccurrence: n),使不唯一的定位字串仍可精確定點。

Actual

無此能力。多段落 cell 只能整格覆寫或全域取代,兩者都會造成非預期改動。

Impact

下游 ntu-claude-pluginsrec-fill(官方送審表單代填)因此把這類格子整批標為「不自動填、留人工」。實測四份表單中有兩份(各含 3–9 個此類格子)落在這個桶。

相關

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions