想象一下,你继承了爷爷的老宅档案柜。七个抽屉里塞满了泛黄的纸质文件:财务报表、客户名单、发货单据,有的页面被撕成两半分装在两个信封里,有的格子里写着“同上”却不知道上面是哪一行,还有一张表格的表头像族谱一样分了三四层。你的任务,是把这堆乱糟糟的纸档案,整理成一本电脑里规规矩矩的电子名册。 这个过程,就是文档处理领域的“表格提取与结构化”——把 PDF、扫描件、图片里的表格,从“看得见”变成“算得清”。而 RAG(检索增强生成)系统要想回答“去年第三季度大客户贡献了多少销售额”这类问题,前提就是先把表格里的数字、层级、合并关系,准确无损地搬进结构化的数据里。本文就用整理旧档案的故事,带你走一遍表格提取与结构化的完整旅程。

岗位关联

对 AI 工程师而言,表格结构化是把非结构化文档送进大模型之前的关键工序——它决定了 RAG 系统“读财报、翻档案”时,是精准作答还是凭空瞎编。掌握这套方法论,你就能把 PDF 里的死表格,变成可检索、可计算的活数据。

目录
  1. 可视化演示
  2. 表格感知定位
  3. 合并单元格还原
  4. 跨页表格拼接
  5. 层级结构解析
  6. 数据格式转换
  7. 表格质量校验
  8. 复杂表格实战
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示表格提取与结构化处理的核心机制,通过总览/传输/转换/输出四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

表格提取与结构化处理:合并单元 合并单元格识别与还原技术 跨页表格检测与拼接策略 核心机制可视化 表格提取与结构化处理整体架构与关键组件

表格感知定位

打开档案柜的第一个抽屉,里面是一叠没贴标签的纸。有的是一整页账目,有的只是正文里嵌了个小统计表。你不能上来就抄写——得先看清“哪块区域是表格”。表格感知定位,就是给每个表格画一个“框”,像用红色记号笔在旧报纸上圈出招聘广告一样,把表格从排版混杂的版面中圈出来。

这个“圈框”的过程,在计算机视觉里叫目标检测。模型输出一个矩形框(左上角坐标和宽高),并给出置信度分数。但光有框还不够——框得精准。评价框准不准,常用的指标叫 IoU(交并比),它衡量预测框和真实框的重合程度,数值越接近 1,说明圈得越准,文件里的表格也就越少被“拦腰截断”。

理解了 IoU,你就掌握了“圈表格”的验收尺子。接下来,把尺子收进抽屉,我们要处理第一个真正的麻烦:表格里那些横跨好几行的合并单元格——就像档案里那些贴着“同上”的格子,看着是空白,背后却藏着一个组标签。

IoU=预测框∩真实框预测框∪真实框\mathrm{IoU} = \frac{\text{预测框} \cap \text{真实框}}{\text{预测框} \cup \text{真实框}}
就像量两块同形状的木板叠在一起:重叠部分越大、拼起来空隙越少,说明两块板越吻合。IoU 就是那个“重叠占比”。
  1. 分子(交集面积)预测框与真实框重叠的那块区域面积,代表“圈对的部分”。
    预测框∩真实框\text{预测框} \cap \text{真实框}
  2. 分母(并集面积)两个框覆盖的总面积,代表“应该圈到的部分”。
    预测框∪真实框\text{预测框} \cup \text{真实框}
  3. 比值计算两者相除,得到一个 0 到 1 之间的数,越接近 1 表示框得越准。
    交集并集=IoU\frac{\text{交集}}{\text{并集}} = \mathrm{IoU}

合并单元格还原

第二个抽屉里有一张旧工资表,第一列写着“车间”,下面三个空白格,再往下才出现“科室”。这份表的原作者为了省事,把“车间”这个分类标签合并了三个格子,只写了一次。这对人眼毫无障碍,但机器读到时,看到的是三个空白格,数据就丢了“分类”这一列。

合并单元格的还原,本质是补全这些空白格。计算机在解析 PDF 里的表格时,可以通过格线的起止坐标判断哪些格子被合并了。我们通常用“行跨度(rowspan)”和“列跨度(colspan)”来描述合并范围。识别出跨度后,把左上角的值复制到整个合并区域,表格就恢复成了规整的二维网格——就像你把“车间”两个字,工工整整地重新誊写到下面三个空格里。

合并单元格还原之后,表格的行列数量终于对齐了。但别高兴太早——第三个抽屉里,有一张跨页的表格,下半部分被撕走,装进了另一个信封。这才是真正的拼图游戏。

rowspan=rend−rstart+1,colspan=cend−cstart+1\text{rowspan} = r_{end} - r_{start} + 1, \quad \text{colspan} = c_{end} - c_{start} + 1
合并跨度就像量一张被拼在一起的课桌:从第几排到第几排,数一数头尾之间一共占了几排,就是 span。
  1. 起始位置合并区域第一行(或第一列)的索引,记为 \( r_{start} \) / \( c_{start} \)。
    rstart,cstartr_{start}, \quad c_{start}
  2. 结束位置合并区域最后一行(或最后一列)的索引。
    rend,cendr_{end}, \quad c_{end}
  3. 跨度公式末尾减开头再加一,得到该方向占用的行列数。
    rend−rstart+1r_{end} - r_{start} + 1

跨页表格拼接

档案柜里最让“我”头疼的,是一张财务总表:上半页在抽屉 A,下半页在抽屉 B,中间还夹着这两页各自重复打印的页眉。要把它们拼回一张完整表格,需要做两件事:识别重复的页眉行、删掉;再把断开的行内容接起来。

跨页拼接的技术难点,在于判断“这一页的最后一行”和“下一页的第一行”是不是同一行的真实延续。常见思路是计算相邻页断点处两行的内容相似度:如果某列的数值序列能平滑衔接(比如上页结束是 135、下页开始是 142 且列结构一致),就判定为需要拼接。这就像把两张撕开的照片放在一起,对准撕口处的纹理,严丝合缝才算拼好。

跨页拼好了,表格的行列都齐整了。可你低头一看,有些表格的表头不止一层——大类下面套小类,小类下面还有子项,像一棵倒着长的树。这才是“结构化”真正的深水区。

Sim(Ra,Rb)=1n∑i=1n1[Ra[i]=Rb[i]]\mathrm{Sim}(R_a, R_b) = \frac{1}{n}\sum_{i=1}^{n} \mathbb{1}[R_a[i] = R_b[i]]
这就像比对口令:两个人各自说出一串词语,一个个对过去,相同的位置越多,说明他们念的是同一串话。
  1. 逐列比较把相邻两行的第 i 列值拿出来,对齐相等则为 1,否则为 0。
    1[Ra[i]=Rb[i]]\mathbb{1}[R_a[i] = R_b[i]]
  2. 求平均把所有列的比较结果相加,再除以列数 n,得到一个 0 到 1 的相似度。
    1n∑i=1n⋅\frac{1}{n}\sum_{i=1}^{n} \cdot
  3. 阈值判断相似度超过阈值(如 0.8),就认为两行是同一行被拆开的,执行拼接。
    Sim(Ra,Rb)≥θ\mathrm{Sim}(R_a, R_b) \ge \theta

层级结构解析

老档案里有一张“产品-区域-季度”的销售总表,顶部不是一行表头,而是三行:第一行是“华东、华北”,第二行是“线上、线下”,第三行才是“Q1、Q2“。这种多级表头,像一个家族谱系:祖辈管着父辈,父辈管着子辈。层级结构解析,就是把表头从”几行文字“变成”一棵树”,搞清楚每个数据列到底归属哪个顶级分类。

构建表头树的关键,是识别表头单元格之间的覆盖关系。从几何上看,上级表头的横坐标范围完全包含下级表头的范围,于是构成父子关系。数据结构上,我们用一个递归的嵌套字典或“孩子列表”来保存。解析完层级后,每个数据列都带上了完整路径,例如“华东 > 线上 > Q1”——像快递单上的省、市、区,层层定位,绝不混淆。

层级解析完毕,表格已经是一棵规整的树了。接下来,你要把这棵树“翻译”给电脑——是写成 JSON 保存嵌套关系,还是摊平成 CSV 方便检索?这是档案数字化最后一步:格式转换。

d(node)=max⁡child∈children(node)d(child)+1d(node) = \max_{child \in children(node)} d(child) + 1
算一棵树的“深度”,就像量族谱最长的那一支:从最下面的曾孙一路数回老祖宗,看最长链条有几代。
  1. 取出所有孩子遍历当前节点的全部子节点。
    children(node)children(node)
  2. 递归求深每个孩子继续往下套这个公式,直到没有孩子的“叶子”为止。
    d(child)d(child)
  3. 取最大加一最长的那条子链深度加 1,就是当前节点这棵子树的深度。
    max⁡(⋅)+1\max(\cdot) + 1

数据格式转换

归档的最后一环,是决定每一条数据用什么格式写进电脑。如果档案要长期保存、保留父子关系,JSON 是首选——它天然支持树形嵌套,表头路径可以直接变成键名。如果只是做统计或喂给传统数据库,CSV 二维表则更直观——每一行是一条记录,每一列是一个字段。

转换方案的选择不是二选一,而是按需适配。RAG 场景里,JSON 结构常用于输出给大模型做阅读理解,因为嵌套结构保留了上下文;而一旦要建向量索引,往往把 JSON 展平成一行行的“纯文本块”再分块,这时 CSV 思维反而更利于检索。需要注意的是“保序保型”:字段顺序不能乱,数字不能变字符串,否则下游打分、聚合都会出错。

文件都数字化了,可别急着大功告成——万一抄漏了一个数字、把“135“写成”13.5”,整个名册就废了。最后一个抽屉,是质检员的活。

recordk=⋃j=1m{headerj:cellkj}record_k = \bigcup_{j=1}^{m} \{ header_j : cell_{kj} \}
这就像把一张姓名电话表抄进通讯录:表头是“姓名”,对应的格子是“张三”,一个键对一个值,配对抄写。
  1. 遍历列对第 k 行数据,依次取第 j 列表头。
    j=1,2,…,mj = 1, 2, \dots, m
  2. 键值配对把表头作为键,当前行的单元格作为值,组成一个键值对。
    headerj:cellkjheader_j : cell_{kj}
  3. 合并成记录把一行的所有键值对合并成一个字典,成为一条结构化记录。
    ⋃j=1m{⋅}\bigcup_{j=1}^{m} \{ \cdot \}

表格质量校验

爷爷的档案里有一本手写账本,字迹潦草还缺页。数字化之后,必须逐项核对:有没有空格没补?数值有没有串列?行数对不对得上?这就是表格质量校验。它像旧时账房先生的“轧账”——算盘打完,总数对不上,就一定哪里出了错。

一个最朴素的指标是“完整率”:统计表格里非空单元格占全部单元格的比例。更进一步,要做类型对齐——“销售额”这一列理应是数字,如果混进了“不详”两个字,就要报警;还要做规则校验——行数必须等于表头层级数量的整数倍、某些列必须唯一等。校验通过,表格数据才真正“干净”,可以放心交付给 RAG 系统。

至此,七个抽屉都整理完毕。但档案柜最深处的“大杂烩”抽屉,还等着你——那里面有斜线表头、多层嵌套、还有散落在页脚的小字注释。把这些应付下来,才算真正的实战高手。

complete(T)=1−∣空单元格∣∣全部单元格∣\mathrm{complete}(T) = 1 - \frac{|\text{空单元格}|}{|\text{全部单元格}|}
这就像检查新入学的点名册:全班 40 人的格子都填了名字,出勤率就接近 100%;有空格,就要去问那个学生去哪了。
  1. 数空格统计整个表格中值为空的单元格个数。
    ∣空单元格∣|\text{空单元格}|
  2. 数总数统计所有行列交叉形成的单元格总数。
    ∣全部单元格∣|\text{全部单元格}|
  3. 算完整率用 1 减去空格占比,得到数据完整程度。
    1−空总1 - \frac{\text{空}}{\text{总}}

复杂表格实战

最后一个抽屉里,是一张典型的“人事考核表”:左上角有一条斜线,把表头单元格劈成了“姓名/月份/分数”三个区域;中部还有一行跨三列的“年度汇总”;页脚还印了一行小字备注“含试用期员工”。面对这种复杂表格,单一技巧不够用,得打组合拳。

斜线表头的处理,是把一个被斜线分割的大格拆成多个虚拟小格,分别对应不同的表头语义;多级表头则用前面学的表头树,逐层展开成组合键;至于页脚备注这类“表外信息”,则单独抽取成元数据,不混进主体数据。最终交付给 RAG 管道的,是一份“主表 + 元数据”的标准化 JSON。

从圈表格、还原合并格、拼接跨页、解析层级,再到转换格式和校验质量,最后面对复杂表头也能拆解成组合键——这一整套“档案整理术”,就是表格提取与结构化的完整心法。下次再遇到密密麻麻的 PDF 财报,你心里就有了一张清晰的施工图。

keyfull=h1⋅h2⋯hLkey_{full} = h_1 \cdot h_2 \cdots h_L
多级表头组合键,就像写快递地址“浙江省-杭州市-西湖区”——每一级都拼上去,才不会送错包裹。
  1. 拆解层级把 L 级表头从顶层到底层依次取出。
    h1,h2,…,hLh_1, h_2, \dots, h_L
  2. 逐级拼接用分隔符把各级表头拼接成一个完整路径。
    h1⋅h2⋯hLh_1 \cdot h_2 \cdots h_L
  3. 作为最终键名每个数据列获得唯一键,复杂表格就变成了扁平记录。
    keyfullkey_{full}

AI 应用场景

财报问答 RAG 管道

阶段:文档加载与解析

解决的问题:传统方式把 PDF 整页切块后丢给大模型,遇到多级表头财报时,模型分不清“华东”和“线上”的归属关系,回答全靠猜。AI 方案先做表格定位与层级解析,把财报表格转成带完整表头路径的 JSON,再喂给 RAG 检索,数字来源可溯、层级不丢。

具体案例:某券商内部知识库接入上市公司年报,财务分析师提问“某公司去年华东区线上渠道 Q1 销售额”,RAG 系统通过表格结构化后的 JSON 精准定位到“华东 > 线上 > Q1”这一列,给出带页码和表格位置的确切回答。

财务审计自动核对

阶段:数据入库前的清洗与校验

解决的问题:审计师拿到几十页的银行流水 PDF,表格跨页频繁、合并单元格多,手工整理要半天。用跨页拼接 + 合并还原 + 质量校验,把流水表还原成干净 CSV,空值率和行数对不上时自动报警,把“人肉对账”变成“机器轧账”。

具体案例:某会计师事务所使用表格提取工具处理企业三年期账目 PDF,合并单元格还原后“科目”列自动下填,跨页断行自动续接,校验环节发现 3 处金额串列,及时拦截避免审计意见出错。

政务表格数字化归档

阶段:文档结构化与迁移

解决的问题:政府部门存量纸质表格(审批单、登记表)存在大量斜线表头和多级表头,传统 OCR 只能出文字,结构全丢。通过复杂表格实战中的“斜线拆解 + 组合键方案”,把每张表转成统一 JSON Schema,实现历史档案可查询、可统计。

具体案例:某省档案馆对十万张历史登记表做数字化,斜线表头单元格被拆成(姓名、月份、分数)三个字段,多级表头自动拼接成完整路径,查询效率提升 20 倍。

Python 演示

python71 行
import json  class TableExtractor:    """模拟表格提取与结构化处理核心流程"""     def __init__(self):        self.raw_rows = []        self.merged_map = {}        self.gc_count = 0     def load_raw(self, rows):        """载入从 PDF 解析出的原始行"""        self.raw_rows = [list(r) for r in rows]     def restore_merged(self):        """合并单元格还原:空白格向上继承,记录继承来源"""        if not self.raw_rows:            return []        ncols = max(len(r) for r in self.raw_rows)        grid = [[''] * ncols for _ in self.raw_rows]        for i, row in enumerate(self.raw_rows):            for j in range(ncols):                grid[i][j] = row[j] if j < len(row) else ''        for j in range(ncols):            for i in range(1, len(grid)):                if grid[i][j] == '':                    grid[i][j] = grid[i - 1][j]                    self.merged_map[(i, j)] = (i - 1, j)        return grid     def to_json(self, grid, headers):        """转换为 JSON 记录列表"""        records = []        for row in grid[1:]:            rec = {}            for j, h in enumerate(headers):                rec[h] = row[j] if j < len(row) else ''            records.append(rec)        return json.dumps(records, ensure_ascii=False, indent=2)     def verify(self, grid):        """质量校验:统计空值率"""        total = sum(len(r) for r in grid)        empty = sum(1 for r in grid for c in r if c == '')        if total == 0:            return 0.0        return round(1 - empty / total, 4)  def main():    raw = [        ['客户', '一季度', '二季度'],        ['核心客户', '120', '135'],        ['', '98', '142'],        ['散客', '45', '60']    ]    ex = TableExtractor()    ex.load_raw(raw)    grid = ex.restore_merged()    print('还原后的表格:')    for row in grid:        print(row)    headers = grid[0]    print('\nJSON 输出:')    print(ex.to_json(grid, headers))    print('\n完整率:', ex.verify(grid))  if __name__ == '__main__':    main()
目的:演示表格结构化处理的最小闭环——载入带合并空格的原始表格,还原合并单元格,输出 JSON,并计算数据完整率。
  1. self.raw_rows = []初始化原始表格容器,保存从 PDF 里读到的每行数据。
  2. ncols = max(len(r) for r in self.raw_rows)求出最宽行的列数,保证网格不越界。
  3. grid[i][j] = row[j] if j < len(row) else ''把不齐的原始行补齐成规整的二维网格。
  4. if grid[i][j] == ''空白格是合并单元格的典型信号,触发还原逻辑。
  5. grid[i][j] = grid[i - 1][j]把上一行的值“继承”下来,模拟跨行合并的还原。
  6. self.merged_map[(i, j)] = (i - 1, j)记录继承来源,供后续跨页拼接时判断“哪些空是合并造成的”。
  7. for j, h in enumerate(headers)表头和单元格逐个配对,构成键值对。
  8. rec[h] = row[j] if j < len(row) else ''防越界保护,短行补空字符串。
  9. empty = sum(1 for r in grid for c in r if c == '')统计所有空白单元格数量。
  10. return round(1 - empty / total, 4)1 减去空值占比,得到完整率。

常见误区

误区“PDF 表格里那些空白的格子就是没数据,提取的时候留空或者直接跳过就行,反正也不影响看表。”

正解空白格往往是被合并单元格“吃掉”的区域,里面隐藏着组标签或分类名。忽略它,就像整理档案时看到“同上”两个字不管,结果整组数据都丢了所属分类。正确做法是像代码里那样,让空白格向上继承,把合并语义还原成真实的值。

为何常见:人眼看表时大脑会自动补全合并信息,所以初学提取时下意识把“视觉空白”当成了“数据真空”。

误区“表格跨页了,直接把两页的单元格拼在一起就是完整表格,反正内容都在。”

正解跨页表格通常每页都重复打印了页眉行,直接拼接会出现两行一模一样的表头;更糟的是,某行可能在页末被截断,下半行在下页才出现。必须先识别页眉行并去重,再对断行做相似度匹配和续接,否则行数错位、数据张冠李戴。

为何常见:新手看到的只是“内容一样”,没意识到页面重复元素和截断边界对结构化数据的破坏力。

误区“JSON 能表达嵌套结构,做 RAG 就全用 JSON,CSV 这种老掉牙的格式没必要学。”

正解JSON 保留了树形层级,但代价是检索时字段路径长、扁平化成本高。CSV 在向量化分块、表格入库、传统 BI 工具对接时更加高效——一行一条记录,天然适配 SQL 和表格嵌入。成熟的方案是“JSON 保结构、CSV 促检索”,两者互为补充而非替代。

为何常见:接触 AI 框架时 JSON 出现频率高,初学者容易形成“新即好、旧即劣”的偏见。

误区“表格提取代码写完之后跑一遍没报错,校验就可以删了,上线后应该没问题。”

正解生产环境里的 PDF 来源五花八门,扫描质量波动、字体缺失、版式微调都会让提取结果悄悄变差。质量校验必须常驻流水线:空值率突然升高、类型对齐失败、行数异常,都是提取器“生病”的前兆。把它当作持续监控的仪表盘,而不是一次性测试。

为何常见:调试期样本干净,容易让人误以为“验证通过”等于“永远通过”。

误区“既然大模型能看图,直接把复杂表格截图丢给它,让它自己提取信息不就行了?”

正解视觉模型对清晰截图确实有效,但对斜线表头、跨页合并、多级嵌套这类结构,容易“看错行、认错列”,且输出不稳定。工程化的做法是把传统 CV 的精确解析与 LLM 的语义理解结合:规则解析出骨架,LLM 补全语义含糊的角落。纯靠“看图”,风险太高。

为何常见:大模型的 Demo 表现惊艳,让人高估了它在长尾版式上的稳定性。

面试题

Q1. 表格提取的第一步通常是?

单选题 · easy

  • A.定位版面中表格的区域← 正确答案
  • B.识别单元格内文字内容
  • C.合并相邻行列单元格
  • D.直接生成 JSON 数据

答案:A。就像整理档案要先把文件从抽屉里挑出来,表格提取最先是感知定位,用检测框圈出表格区域,之后才谈得上识别文字、还原合并、转换格式。B、C、D 都是定位之后的步骤。

Q2. 合并单元格的核心描述属性是?

单选题 · easy

  • A.rowspan 和 colspan← 正确答案
  • B.width 和 height
  • C.alpha 和 opacity
  • D.margin 和 padding

答案:A。合并单元格描述的是“跨了几行几列”,对应行跨度 rowspan 和列跨度 colspan。width/height 是尺寸,alpha/opacity 是透明度,margin/padding 是布局属性,都与合并语义无关。

Q3. 跨页表格拼接时,重复出现的页眉行应如何处置?

单选题 · easy

  • A.只保留首次出现的行← 正确答案
  • B.每页完整保留不改
  • C.拼接成单独的新行
  • D.全部替换为占位行

答案:A。页眉行是每页打印时自动重复的,拼接全表时只需保留一次,否则会出现两行“客户/一季度/二季度”造成字段错位。保留全部会重复,拼成新行和占位更会污染数据。

Q4. IoU 数值越大说明什么?

单选题 · mid

  • A.预测框与真实框重叠越多← 正确答案
  • B.表格文字识别的速度越快
  • C.跨页表格的行数越多
  • D.合并单元格的数量越多

答案:A。IoU 是预测框与真实框的交集除以并集,数值接近 1 代表两个框几乎完全重合,定位越精准。它衡量的是“框得准不准”,与识别速度、行数、合并数无关。

Q5. JSON 输出相比纯文本的优势包括哪些?

多选题 · mid

  • A.保留表格的层级结构← 正确答案
  • B.天然贴合键值映射← 正确答案
  • C.无法表达嵌套数据
  • D.不依赖任何解析器

答案:AB。JSON 用大括号嵌套天然表达“华东>线上>Q1”这类层级路径,键值对也正好对应“表头:单元格”。C 说反了,JSON 擅长嵌套;D 不成立,JSON 一样需要解析器读取。

Q6. 表格质量校验主要检查哪些维度?

多选题 · mid

  • A.空值比例统计← 正确答案
  • B.文件页数统计
  • C.数据类型对齐← 正确答案
  • D.打印字体大小

答案:AC。质量校验关心的是“数据能不能用”:空值率反映完整度,类型对齐保证“销售额”列里没有混入文本。页数和字体是排版属性,与数据质量无直接关系。

Q7. 跨页断行续接的主要判断依据是?

单选题 · mid

  • A.前后行对应列内容相似← 正确答案
  • B.前后行行高完全相同
  • C.前后页字体颜色一致
  • D.前后页页边距相等

答案:A。断行续接看的是“同一行的碎片长得像不像”——对应列值能对上、结构一致,则判定是一行的延续。行高、颜色、边距是全局排版属性,无法证明内容连续性。

Q8. 多级表头展平为组合键时,正确做法是?

单选题 · hard

  • A.各级表头拼接为复合键← 正确答案
  • B.只保留最上级表头
  • C.只保留最下级表头
  • D.全部丢弃改用行号

答案:A。多级表头必须逐级拼接,才能保证每个数据列有唯一完整路径,如“华东>线上>Q1”。只留任一级都会丢失归属信息;改用行号则完全丢失语义,不可取。

Q9. 复杂表格处理适合的策略包含哪些?

多选题 · hard

  • A.多级表头合并展平← 正确答案
  • B.整页截图丢给视觉模型
  • C.斜线表头单独拆解← 正确答案
  • D.跳过所有空白单元格

答案:AC。多级表头展平成组合键、斜线表头拆成虚拟小格,都是成熟的复杂表格处理手段。整页截图依赖模型稳定且无法保证结构,跳过空白则会把合并单元格的语义丢掉。

Q10. 合并单元格区域跨页中断时,正确策略是?

单选题 · extreme

  • A.上一页补齐剩余行并标记← 正确答案
  • B.强制压缩掉未完成部分
  • C.直接丢弃上一页表格
  • D.把两页各自独立成表

答案:A。跨页的合并单元格会在页尾被截断,正确的做法是在上一页补齐因合并产生的空白行并打上“待续”标记,下一页续接时再合并。压缩会让数据错位,丢弃或拆分都会破坏表格的完整性。