LOGO 首页 OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 技术文档 其他文档  
 
网站管理员

Magicodes.IE.IO:XLSX 包结构:ZIP、关系文件与顺序写入

freeflydom
2026年8月4日 11:19 本文热度 38

XLSX 是一组有关系约束的 ZIP 部件。导出要在不能回写的输出流上写 Local Header、Data Descriptor 和 Central Directory;导入则要从工作簿关系(workbook relationship)找到真正的工作表。本文把两条路径放在同一个包结构里解释。

XLSX 不是“一个 XML 文件”,而是一个 ZIP 包:

[Content_Types].xml
_rels/.rels
xl/workbook.xml
xl/_rels/workbook.xml.rels
xl/worksheets/...
xl/styles.xml
xl/sharedStrings.xml(可选)

导出和导入面对的是同一个包,只是方向相反:

导出:对象 → XML part → ZIP entry → 输出流
导入:输入流 → ZIP entry → XML part → 对象

导出:为什么要支持顺序写

HTTP 响应流通常不支持 Seek。写一个 ZIP entry 时,Local Header 在数据之前,但 CRC、压缩后尺寸和未压缩尺寸要等数据写完才知道。

ZIP 的 Data Descriptor 允许 Local Header 先把这些字段留空:

Local Header(CRC / size = 0)
压缩数据
Data Descriptor(真实 CRC / size)

ForwardOnlyZipWriter 用这个机制写 entry。entry 完成后,再把已经得到的 CRC、尺寸和偏移保存为 Central Directory 元数据;所有 entry 完成后,统一在文件尾写 Central Directory。

ZIP Entry 的数据流

一条 entry 的数据流是:

业务 XML 字节
  ↓
EntryWriteStream
  ├─ 统计未压缩大小
  ├─ 更新未压缩数据的 CRC32
  ↓
ICompressor / DeflateStream
  ↓
CountingWriteStream
  ├─ 统计压缩后大小
  ↓
底层输出流

这不是“任意几层 Stream 都能随便拼”的模式演示。CRC、压缩、计数和 Data Descriptor 共享 entry 生命周期:压缩器必须 Finish,才能得到最终压缩尺寸;Data Descriptor 必须在尺寸和 CRC 确定后写入。

导入:不能假设第一个工作表叫 sheet1.xml

读取时,最简单的实现会直接打开:

xl/worksheets/sheet1.xml

外部工具生成的工作簿不保证这个路径就是逻辑上的第一个 sheet。Reader 当前读取第一个可读 worksheet,定位路径来自:

xl/workbook.xml
  ↓ sheet 的 r:id
xl/_rels/workbook.xml.rels
  ↓ Relationship.Target
xl/worksheets/实际文件.xml

XlsxReader 先根据工作簿关系(workbook relationship)找第一个可读 worksheet;关系文件缺失时,才回退到 worksheets 目录中的 XML entry。这让 Reader 能处理工作表路径不按默认命名的 XLSX。

同一个边界,读写两边都要守

约束 导出侧 导入侧
关系文件 写出 workbook 与各 part 的关系 根据关系定位 worksheet
Shared Strings 最后写出 sharedStrings.xml 初始化时加载 sharedStrings.xml
ZIP 顺序 Data Descriptor + Central Directory ZipArchive 打开现有包
流所有权 Write(Stream, ...) 由调用方释放 Read(Stream, ...) 默认在枚举结束时关闭

ZIP32 的范围

当前 writer 不支持 ZIP64。单个 entry、归档偏移和 Central Directory 尺寸受 ZIP32 的 32 位字段限制;entry 数量和名称长度还有 16 位字段限制。超过限制时应拆分文件、拆分 sheet,或改用支持 ZIP64 的方案。

阅读原文:点击这里


该文章在 2026/8/4 11:19:21 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-1  粤公网安备44030602007207号