[Bug]: ExcelParser drops cells with value 0 or False

用户在 RAGFlow 中上传包含数字 0 或 False 值的 .xlsx 文件并进行解析时,发现提取出的文本中缺失了这些单元格内容。例如,Excel 表格一行数据为 [Widget, 0](项目名称 + 数量),解析结果中遗漏了“Quantity: 0”字段。

[Bug]: ExcelParser drops cells with value 0 or False

[Bug]: ExcelParser drops cells with value 0 or False

快速结论:当解析包含数值 0 或布尔值 False 的 Excel 单元格时,RAGFlow 的 ExcelParser 会错误地丢弃这些值。优先排查 deepdoc/parser/excel_parser.py 中是否使用了 if not c.value 而非 if c.value is None 来判断空单元格。

问题场景

用户在 RAGFlow 中上传包含数字 0False 值的 .xlsx 文件并进行解析时,发现提取出的文本中缺失了这些单元格内容。例如,Excel 表格一行数据为 [Widget, 0](项目名称 + 数量),解析结果中遗漏了“Quantity: 0”字段。

报错原文

RAGFlowExcelParser.__call__ skips cells whose value is 0 or False because it checks `if not c.value` before adding the cell to the row text.
For a row like:
| Item | Quantity |
| --- | --- |
| Widget | 0 |
The parser drops the `Quantity: 0` field from the extracted text.

原因分析

这是一个逻辑判断错误。在 deepdoc/parser/excel_parser.py 的文本提取路径中,使用 if not c.value 来跳过空单元格。在 Python 中,not 0not False 均返回 True,导致数值 0 和布尔值 False 被错误地当作空值跳过。而该解析器的 html() 路径已经使用了更精确的 if c.value is None 判断,因此未受影响。

环境排查

  • RAGFlow workspace code commit ID: bf18b5926 及更早版本
  • RAGFlow image version: 从 main 分支构建的版本(bf18b5926
  • 关键文件路径:deepdoc/parser/excel_parser.py
  • 触发条件:解析包含数值 0 或布尔 False 值的 .xlsx 工作簿

解决步骤

  1. 定位到 deepdoc/parser/excel_parser.py 文件中 RAGFlowExcelParser.__call__ 方法的文本提取路径。
  2. 找到判断空单元格的代码行 if not c.value: continue
  3. 可优先尝试:将该行修改为 if c.value is None: continue,以确保只有真正的空值(None)被跳过,数值 0 和布尔值 False 得以保留。
  4. 如果使用最新版本,该问题已在 main 分支的 #16287 PR 中修复,请确保拉取最新代码。
  5. 如果仍遇到问题,检查是否有其他自定义或分支版本的 excel_parser.py 未同步该修复。

验证方法

创建一个包含一行数据的 .xlsx 文件,表头为 ItemQuantity,数据行为 Widget0。使用 RAGFlow 解析该文件后,检查提取的文本中是否包含了 Quantity: 0(而非缺失该字段)。若正确包含 0 值,则表示问题已解决。

参考来源

infiniflow/ragflow #16421

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 10262

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注