任务架构

Android 只读导入 XLSX:公式、缓存值与单元格类型

聚焦 SpreadsheetML 工作簿导入时公式与缓存值、单元格类型、共享字符串和日期系统的只读解释;不重复 CSV 导出公式注入,不声称 Cove 已支持 XLSX。

审核状态: 内容已校验;中文稿供用户审核 · 2026-10-08 · Fact IDs: ANDROID-XLSX-READ-2026-10, ANDROID-PRIVACY-01, PRIVACY-01

直接回答

应把 XLSX 当作结构化 Open XML package,而不是已解释好的二维字符串表。单元格可引用 shared string,也可保存 inline string、数字、Boolean 或 error。公式和缓存值也要分开;shared formula follower 可带 group metadata 而没有完整内联表达式。若解析库只返回便捷字符串,原始类型、缓存和公式来源可能被隐藏。应分别保留原始表示和派生展示值。 SpreadsheetML `f` 元素可以保存公式文本,单元格也可能有 `v` 元素保存缓存结果,但并非每个公式单元格都有内联公式文本。Shared-formula follower 可标记 `t="shared"` 并带 `si` group index,而不保存表达式;应按准确 parser 合同找到 master 解析公式,master 缺失或无法唯一定位时标 unresolved。缓存是历史保存结果,不表示导入时重算,也不证明公式当前有效。缓存缺失/过期、外部引用、不支持函数或 shared formula 未解析时,当前结果未知。只读导入不得暗中访问外链或调用计算引擎。 字符串也需要 package 上下文。Shared string 单元格保存索引,inline string 位于工作表。富文本可以含普通 text runs、注音 `rPh` runs 和 `xml:space` 空白标记。不得把注音拼入正文;parser 暴露空白元数据时应保留,并用首尾空格和 run 边界夹具验证明示的拼接策略,不能默认某 library 会怎样处理。Boolean 和 error 也不是普通数字。规范化展示时仍保留单元格类型与原始内容。 单元格不能因值是数字或样式像日期就自动当日期。SpreadsheetML 支持 `t="d"` 和 ISO 8601 文本直接表示,也可用 numeric serial 结合 workbook 日期系统和样式表示。先确认 library 支持直接日期类型;不支持则标 unsupported,不得强转数值。数值格式只是解释证据,不是强类型声明。Excel 保留 1900 被当闰年的兼容行为,因此 serial 60 是虚构的 1900-02-29,并非公历;workbook 级 1904 标志改变 epoch。并列保留原始值、日期系统标志、style 与解释,避免歧义时静默偏移。 公式可引用其他单元格、命名范围、函数或外部工作簿。只读导入只在单元格实际有 inline expression 时返回它;shared formula 要找到 master 并测试相对引用解析后才提供表达式。缓存缺失和公式无法解析分开记录;不刷新链接、不重算、不改设置、不保存源文件。若消费者需要值,可明确使用“上次计算时保存”的缓存,展示已解析公式,或将单元格标 unresolved。不可说缓存是刚算的结果。 先固定 Android 实际可用的 library 和版本,再定义支持面。Microsoft Open XML 文档描述 SpreadsheetML 和 Open XML SDK,不证明 .NET API 可以运行于 Android,也不证明其他库具备同样行为。记录解析库坐标、传递依赖、所支持的 workbook 特性和用户选择 URI 的读入方式。ZIP package 也只是容器边界;应通过所选库实际暴露的接口限制 entry 数、解压总字节、压缩比、XML 深度、单元格数、共享字符串数及工作时间。不要为了补齐能力而自写临时 ZIP/XML 解析器。 安全的只读结果应带来源信息。每个单元格记录 workbook/sheet、坐标、声明类型、原始值、formula kind 与 shared-group metadata、表达式是否解析、shared-string lookup、style、日期系统和解释状态。公式表达式、缓存结果与展示字符串分开保存。没有准确测试时,不宣称保留了宏、外链、格式、批注或全部 workbook 特性;导入不能修改源文件。 准备合成 workbook,其中有共享与 inline 字符串、富文本 runs、数字、布尔值、错误值、带缓存公式、无缓存公式、过期缓存和外部工作簿引用。再加入日期样式数值与普通数字、两种日期系统以及 1900 系统的序列 60。使用准确 Android build 和 library 打开及关闭,对比原始 package part 与解析投影,并确认源文件字节未改变。不要连接真实外部工作簿,也不要用用户私有数据制作测试 fixture。 验收的是解释契约,而非模型质量。报告应说明读到了哪些 sheet/cell、如何处理公式和缓存、哪些单元格类型不支持,以及是否触发限制或解析错误。模型仍可能误解已正确导入的文本;解析成功也不证明工作簿内容正确、安全可操作或 Cove 已支持。本文只是一种 Android 通用方法,不表示 Cove 当前导入 XLSX。

工作簿里的合计缓存已经过期

用户选择工作簿进行本地费用复核。其中一个合计单元格是引用另一工作表的公式,但缓存结果保存于最近一次编辑之前,工作簿还含有外部引用。导入不得启动桌面计算引擎或改写所选文件。

决策

分别保留公式、缓存结果、单元格类型、来源坐标和缓存状态。只有在明确的过期值策略下才使用缓存;否则将金额标为未解析并请求用户复核。

预期结果

派生工作表视图可以追溯到原始单元格,并清楚标明值是字面输入、历史缓存、日期解释、暂不支持还是尚未确定。

需要收集的证据

只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:

  • ANDROID-XLSX-READ-2026-10:SpreadsheetML formula cache 是上次保存的结果;共享公式 follower 可不含公式文本,需依 master group 定位;`t="d"` ISO 日期与 numeric serial 是两种表示。
  • ANDROID-PRIVACY-01:Android 的权限、数据访问、存储与用户控制责任不随模型执行位置改变。
  • PRIVACY-01:端侧推理不证明应用没有其他网络请求;workbook 外链策略需单独核验。

任务质量需要有版本记录的语料和验收规则;流畅的单条样例不等于准确度结果。

实施流程

  1. 固定解析依赖和导入边界. 记录准确 Android dependency 坐标、解析版本、工作簿特性范围和用户 URI 路径。确认库暴露 formula type/shared-group 元数据、缓存、单元格类型、shared strings、富文本、直接日期类型、styles 和 workbook date-system flags。
  2. 解析单元格并保留文本表示. 从实际 package part 读取 shared string index 和 inline string。区分正文 text runs 与 `rPh` 注音 runs;parser 暴露 `xml:space` 时保留,并按具名策略测试空白。公式、缓存、Boolean、error、数字和展示结果仍独立。
  3. 按声明形式解释日期. 将 `t="d"` ISO 日期与 numeric serial 分开;只有准确 parser 支持时才接受前者。Numeric serial 同时依据 workbook date-system 和 style/number format 解释。测试两套系统、普通数值及 1900 serial 60。
  4. 解析共享公式并限定缓存. 对 `t="shared"` cell 依 `si` 找到 master,并测试 library 的相对引用规则。无法唯一解析时报告 unresolved,不声称 cell 内含完整表达式。区分缓存缺失和可能过期;不重算、不刷新外链或保存源文件。
  5. 限制 package 并测试真实解析路径. 使用所选 library 实际支持的 package entry、解压字节、XML 深度、shared string、行/单元格和耗时限制。通过合成 fixture 覆盖公式、缓存、字符串、日期系统、缺失 part、不支持特性、取消和源文件字节保持。

让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。

验收标准

  • 可用公式文本、shared master 解析结果、缓存、原始值、单元格类型和显示解释彼此区分;缓存不被说成导入时重算。
  • 直接 `t="d"` ISO 日期与 numeric serial 是不同表示;前者仅在准确 parser 支持时接受,后者结合 workbook 日期系统和 style 证据解释。
  • 无内联公式的 shared follower 由匹配 master 解析或标为 unresolved;1900 serial 60 不报告为真实公历日期。
  • shared/inline string、普通与注音 rich-text runs、显著空白、Boolean、error、缓存缺失/过期和外链都有明确 fixture 结果。
  • 实际 Android 依赖与可观测解析能力经过验证;Open XML SDK 文档不被当成 Android 兼容性证据。
  • 源文件字节保持不变;解压与解析工作通过真实 library 控制项设限,不调用外部公式链接或计算引擎。

决策对照表

维度选择或证据解读方式
字面值单元格展示前同时保留类型和原始值。可见字符串可能取决于样式、地区和数字格式,不总等于存储表示。
公式及共享公式 follower分开记录内联表达式、master 解析结果和缓存。Follower 可能没有内联公式文本;master 未解析不能当作可展示表达式。
无可用缓存的公式按已声明策略标为未解析或请求复核。只读解析器没有执行受支持的计算步骤时,不能声称得到当前结果。
直接 `t="d"` 日期仅在准确 parser 支持时读取 ISO 8601 内容。它与 numeric serial 不同,也不证明 Android library 支持。
带日期样式的数字结合 workbook date system 和样式证据解释。并非所有数字都是日期;Excel 1900 兼容行为包含虚构序列 60。
外部工作簿公式保持引用不执行,并报告缓存状态。导入不授权网络访问、刷新链接或修改源文件。

需要避免的失败模式

  • 把缓存值说成导入时重新计算的结果,或忽略缺失/过期缓存。
  • 把所有数值当作日期,遗漏工作簿的 1900/1904 日期系统及样式上下文。
  • 把 .NET Open XML SDK 示例当成 Android 兼容性证明,或在只读导入时刷新外部链接。

还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。

最小复现记录

层级记录内容
设备厂商、型号、芯片、内存档位、操作系统版本
软件应用版本和 Git 提交号
模型系列、变体、版本、格式、文件长度、摘要、量化方式
运行时名称、版本、请求后端及实际后端证据
工作负载样例版本、输入摘要、提示词摘要、输出策略
结果完成、失败、取消、回退及保护隐私的诊断信息

发布检查表

  • ☐ 主要搜索问题已回答,且没有未经支持的数字。
  • ☐ 所有模型文件和运行时版本均已固定。
  • ☐ 代表性任务和失败处理策略均有说明。
  • ☐ 生命周期、取消、清理和回退均已测试。
  • ☐ 用户内容与网络边界均有说明。
  • ☐ 结论只适用于被记录的配置。
  • ☐ 新增测试结果时链接到原始方法或证据。

来源与相关证据

中文部署与排错专题见。奇连 AI 端侧专题。

常见问题

每个 XLSX 公式单元格都含有可读公式文本吗?

不一定。Shared-formula follower 可带 group metadata 指向 master,却没有内联公式文本。只有通过已测试的 parser 路径找到 master 后才能解析,否则应报告 unresolved;缓存也可能缺失或过期。

所有 XLSX 日期都以数值序列存储吗?

不是。SpreadsheetML 还支持 `t="d"` 和 ISO 8601 文本。只有准确 parser 能暴露该类型时才接受;numeric serial 是另一种表示,需要 workbook 日期系统和样式证据。

导入时应该重算公式或刷新链接工作簿吗?

只读导入不应这样做。重算和刷新可能改变数据或触发外部行为。分别保存公式文本和缓存值;计算功能应有单独的引擎、策略和测试。

Microsoft Open XML 示例能证明同一 API 可用于 Android 吗?

不能。文档说明 SpreadsheetML 结构及其所述环境中的 SDK 行为。声明 Android 支持前,必须记录并测试准确的 Android 兼容 library 与版本。