需先确认OCR返回tables字段非空且含rows数组,再按row_span或bounding_box坐标校准跨行单元格,最后逐行提取cell.text生成表格数据。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在火山引擎VeDI数据智能平台中,使用OCR服务识别图片中的表格后,需将返回的结构化JSON结果按行提取并还原为可读的表格数据,才能用于后续分析或导出。
确认OCR识别结果已包含表格结构信息
调用火山引擎Table OCR接口(如/v1/ocr/table)后,检查响应体中的tables字段是否非空。若返回"tables": []或根本无该字段,说明图片未被识别为表格类型,此时无法按行读取——需换用通用OCR接口重新识别,或调整图片清晰度、表格边框完整性后再试。
确保请求参数中return_excel设为false(默认值),否则服务会直接返回Excel二进制流,不提供逐行JSON结构。
解析JSON响应,定位首张表格的rows数组
从响应JSON中找到tables[0].rows路径,该数组每个元素对应表格中的一行,类型为对象,含cells字段。
注意:【tables数组下标从0开始,且仅当存在至少一张表格时tables[0]才有效;若图片含多表,需根据tables[i].bounding_box坐标判断目标表格】。
若rows为空数组([]),说明OCR虽检测到表格区域,但未能划分出有效行——常见于合并单元格过多、横线缺失或文字严重倾斜的图片。
遍历rows数组,逐行提取cell文本内容
对tables[0].rows中每个row对象执行以下操作:
- 访问
row.cells,它是一个单元格对象数组; - 对每个cell对象,读取
text字段值(即识别出的文字);若text为空字符串,则跳过或填入null; - 将该行所有cell.text按顺序拼成一行列表,例如
["姓名", "年龄", "城市"];
这一步不能直接取cell.content或cell.words——这些字段是原始识别片段,未做合并,会导致同一单元格文字被拆成多段。
处理跨行/跨列单元格导致的行高错位
方法一:使用cell的row_span和col_span字段校准位置
每个cell对象含row_span(纵向合并行数)和col_span(横向合并列数)。若某cell的row_span > 1,则它实际占据当前行及后续row_span-1行的同一列位置,后续对应行的该列cell应视为null,需用前一行的值填充。
方法二:按bounding_box.y坐标聚类分组(适合row_span丢失场景)
提取每个cell的bounding_box中y和height,计算中心纵坐标y + height/2,将y值接近的cell归为同一逻辑行——阈值建议设为max_height * 0.6,其中max_height是所有cell高度的最大值。
注意:【直接按rows数组索引顺序输出会错误地将跨行单元格重复渲染,必须依据span或坐标重排】。











