免责声明

往期回顾
PREVIOUS REVIEW


平时我们接触最多的办公文档,应该就是Word和Excel了,比如常见的.docx、.xlsx文件,很多人会把它理解成一个普通的文档文件。但实际上,新版Word、Excel文件的本质并不是一个单独的文档,而是一个ZIP压缩包。
准确来说,像.docx、.xlsx、.pptx这类Office文件,本质上都是按照Office Open XML规范组织起来的ZIP压缩包。
一个Word文档里面并不只是“文字”,一个Excel表格里面也不只是“表格数据”。它们内部其实包含了很多文件,比如正文内容、表格数据、样式、图片、主题、配置文件、文档属性等。
01
哪些Office文件是ZIP?
老版本的Office文件,比如.doc、.xls、.ppt这些通常是微软早期的二进制格式,不是ZIP。而新版Office文件,比如.docx、.xlsx、.pptx这些文件本质上就是ZIP压缩包。
02
为什么要设计成ZIP?
简单理解:
.docx=Word文档内容+样式+图片+配置文件+ZIP打包.xlsx=Excel表格数据+样式+工作表信息+ZIP打包.pptx=PPT页面内容+图片+动画配置+ZIP打包
如果把这些内容全部混在一个文件里,管理起来会比较复杂。所以新版Office文件采用了一种更清晰的方式:把不同类型的内容拆分成多个XML文件和资源文件,然后再用ZIP打包成一个完整文件。这样做有几个好处。
第一,文件体积更小。ZIP本身具备压缩能力,可以减少文档占用空间。
第二,结构更清晰。正文、样式、图片、属性等内容分开存放,程序处理起来更方便。
第三,兼容性更好。WPS、LibreOffice、OnlyOffice等办公软件都可以按照这个结构解析文档。
第四,便于修复。有些文档损坏时,如果只是其中某个XML文件出现问题,还有机会解压后提取部分内容。
03
如何验证Word文件其实是ZIP?
可以使用file命令查看文件类型:
pdsyw@pdsyw1024:~/桌面$ file test.docxtest.docx: Microsoft Word 2007+

这个结果会告诉我们它是新版Word文档。但是如果想进一步验证它是不是ZIP,可以使用unzip命令查看里面的内容:
pdsyw@pdsyw1024:~/桌面$ unzip -l test.docx
看到这些内容,就说明.docx文件内部确实是一个压缩包结构。其中比较重要的是word/document.xml,这个文件里保存的就是Word文档的正文内容。如果Word文档中插入了图片,一般可以在下面这个目录中看到word/media/,这也解释了为什么有时候Word文件损坏后,可以通过解压的方式把里面的图片提取出来。
04
如何验证Excel文件其实是ZIP?
Excel文件也是一样,可以使用file命令查看文件类型:
pdsyw@pdsyw1024:~/桌面$ file test.xlsxtest.xlsx: Microsoft Excel 2007+

可以使用unzip命令查看里面的内容:
pdsyw@pdsyw1024:~/桌面$ unzip -l test.xlsx
其中xl/workbook.xml保存的是工作簿信息,xl/styles.xml保存的是样式信息,xl/sharedStrings.xml保存的是共享字符串内容,也就是Excel中大量重复文本可能会集中存放在这里。所以.xlsx文件并不是简单的一张表,而是由多个XML文件和资源文件组成的压缩包。
05
直接改后缀也能打开吗?
比如有一个文件test.docx,可以把后缀改成test.zip,然后用压缩软件打开,就能看到里面的目录结构。在Linux系统中,也可以直接使用命令解压:
unzip test.docx -d test_docx或者:unzip test.xlsx -d test_xlsx
解压后,就可以进入对应目录查看内部文件。比如Word文档解压后常见结构如下:
pdsyw@pdsyw1024:~/桌面$ unzip test.docx -d test_docx

Excel文件解压后常见结构如下:
pdsyw@pdsyw1024:~/桌面$ unzip test.xlsx -d test_xlsx

从这个结构就能看出来,Office文件其实就是把多个文件按照一定规范组织起来,然后再压缩打包。
06
这种设计有什么实际用途?
了解.docx、.xlsx本质上是ZIP,不只是为了知道原理,在实际工作中也有用。比如,Word文档里有很多图片,但是无法直接批量保存。这时可以把.docx文件解压,然后进入word/media/,里面通常就能看到文档中的图片文件。
再比如,Excel文件异常损坏,打不开了,虽然不一定能完全修复,但有时候可以尝试解压.xlsx文件,查看里面的XML文件是否还能读取,从而抢救部分数据。
还有一些程序处理Office文档时,也会利用这个原理。比如自动生成Word报告、批量读取Excel内容、解析文档中的图片和文本,本质上很多都是在处理压缩包里面的XML文件。
07
需要注意的问题
虽然.docx、.xlsx本质上是ZIP,但并不代表随便修改里面的文件后,再压缩回去就一定能正常打开。Office文件内部有严格的目录结构和关系文件。比如_rels/ [Content_Types].xml,这些文件负责描述各个文件之间的关系,如果修改不当,文档可能会打不开,或者提示文件损坏
所以,如果只是为了查看、提取图片、学习文件结构,可以放心解压查看,但如果要手动修改里面的XML文件,一定要先备份原文件,避免损坏文档。
夜雨聆风