Skip to content

能力边界 ​

v1 明确不做的事,以及原因。

不支持(友好报错) ​

场景行为
旧版 .xls(BIFF8)LEGACY_FORMAT 错误,附"另存为 .xlsx"提示。OLE2/BIFF 是完全异构的二进制世界;将来可选 adapter 引入 SheetJS,但 v1 保持依赖链干净。
.ods 等其他套件(同为 ZIP)CORRUPT 错误——它们是 ZIP 包但没有 xl/workbook.xml,按"不是有效 xlsx"报错。
XML/HTML 伪表格(SpreadsheetML 2003、HTML 表格另存的 .xls)UNSUPPORTED 错误——它们是文本但不是 CSV,按数据网格渲染没有意义;请另存为真正的 .xlsx。
损坏数据ZIP 结构破损(截断等)或工作簿一个 sheet 都没有 → CORRUPT;连 ZIP 都不是、也嗅探不出文本 → UNSUPPORTED(格式无法判定)。
无 WebAssembly 的环境 / 引擎加载失败WASM 错误——v1 的 xlsx 解析仅走 WASM 引擎(没有纯 JS 的 xlsx 降级读取器);资产 404、CSP 禁止 WebAssembly、网络失败同样报 WASM。CSV 无需 WebAssembly 仍可解析。

已知近似的渲染 ​

  • 富文本 runs 渲染为拼接纯文本;runs 级样式在路线图上(当前模型只保留拼接文本,还原 runs 需要补解析)。
  • 图案填充(gray125 这类斜纹)以底色/前景色的纯色近似;纯色与渐变填充精确渲染。
  • 旋转文本(textRotation)放不下时按格子矩形裁剪——Excel 同样截断超出格子的旋转文本,但其裁剪沿旋转后的文本走向而非轴对齐的格子矩形,对角线附近的边缘形态略有差异。
  • 窄于内容的数字列直接裁剪,不显示 Excel 的 ####(真 #### 需要逐格文本测量,不值得为之付出滚动成本)。
  • 外部超链接 URL v1 不渲染;超链接样式(文件字体的蓝/下划线)仍会显示——它就是普通字体数据。tooltip 同样不展示。
  • rightToLeft 工作表暂按从左到右渲染(标志已解析进模型)。
  • 条件格式与数据条/图标集不应用。
  • 图表、图片、形状不渲染。
  • 行列分组(outline 层级)不解析、不绘制。

CSV 编码 ​

自动识别 UTF-8(有无 BOM 均可)与 GB18030。UTF-16(FF FE / FE FF BOM) 的 CSV 会被判为二进制并以 UNSUPPORTED 拒绝——请先另存为 UTF-8。

公式 ​

公式单元格渲染缓存的 <v> 值——与 SheetJS("SheetJS does not evaluate formulas")和 exceljs 同一约定。非 Excel 写入器保存的公式若无缓存值,渲染为空单元格。

规模上限 ​

解析不是流式的(OOXML 部件间交叉引用,浏览器无法流式解析互相依赖的 zip 部件)——整个文件在 worker 内读入内存。10 万 × 10 格解析实测约 1.5s;虚拟滚动保证 DOM 恒为视口规模。数百 MB 的文件会先撞内存上限。 (仓库内性能测试的验收阈值是另一个口径:10 万 × 8 列模型构建 < 4s,在 happy-dom 内测、不含真实渲染;CI 与发布链路以 RUN_PERF=0 跳过。)

行数上限(浏览器而非内存限制):整个网格是一个撑高的容器元素,行高按 20px(15pt)算,约 89 万行(约 1790 万 px)就会触到 Firefox / Safari 的元素尺寸上限,此时尾部行不可达;Chrome 的上限约 3350 万 px(约 167 万行)。表头与行列标仍按视口渲染,只有滚动范围被截断。需要浏览满表(1,048,576 行)的场景请等后续把容器改为分块位移。