为什么说Word、Excel文件其实都是ZIP?
原文链接为什么说Word、Excel文件其实都是ZIP平时我们接触最多的办公文档应该就是Word和Excel了比如常见的.docx、.xlsx文件很多人会把它理解成一个普通的文档文件。但实际上新版Word、Excel文件的本质并不是一个单独的文档而是一个ZIP压缩包。准确来说像.docx、.xlsx、.pptx这类Office文件本质上都是按照Office Open XML规范组织起来的ZIP压缩包。一个Word文档里面并不只是“文字”一个Excel表格里面也不只是“表格数据”。它们内部其实包含了很多文件比如正文内容、表格数据、样式、图片、主题、配置文件、文档属性等。一、哪些Office文件是ZIP老版本的Office文件比如.doc、.xls、.ppt这些通常是微软早期的二进制格式不是ZIP。而新版Office文件比如.docx、.xlsx、.pptx这些文件本质上就是ZIP压缩包。二、为什么要设计成ZIP简单理解.docxWord文档内容样式图片配置文件ZIP打包 .xlsxExcel表格数据样式工作表信息ZIP打包 .pptxPPT页面内容图片动画配置ZIP打包如果把这些内容全部混在一个文件里管理起来会比较复杂。所以新版Office文件采用了一种更清晰的方式把不同类型的内容拆分成多个XML文件和资源文件然后再用ZIP打包成一个完整文件。这样做有几个好处。第一文件体积更小。ZIP本身具备压缩能力可以减少文档占用空间。第二结构更清晰。正文、样式、图片、属性等内容分开存放程序处理起来更方便。第三兼容性更好。WPS、LibreOffice、OnlyOffice等办公软件都可以按照这个结构解析文档。第四便于修复。有些文档损坏时如果只是其中某个XML文件出现问题还有机会解压后提取部分内容。三、如何验证Word文件其实是ZIP可以使用file命令查看文件类型pdsywpdsyw1024:~/桌面$ file test.docx test.docx: Microsoft Word 2007这个结果会告诉我们它是新版Word文档。但是如果想进一步验证它是不是ZIP可以使用unzip命令查看里面的内容pdsywpdsyw1024:~/桌面$ unzip -l test.docx看到这些内容就说明.docx文件内部确实是一个压缩包结构。其中比较重要的是word/document.xml这个文件里保存的就是Word文档的正文内容。如果Word文档中插入了图片一般可以在下面这个目录中看到word/media/这也解释了为什么有时候Word文件损坏后可以通过解压的方式把里面的图片提取出来。四、如何验证Excel文件其实是ZIPExcel文件也是一样可以使用file命令查看文件类型pdsywpdsyw1024:~/桌面$ file test.xlsx test.xlsx: Microsoft Excel 2007可以使用unzip命令查看里面的内容pdsywpdsyw1024:~/桌面$ unzip -l test.xlsx其中xl/workbook.xml保存的是工作簿信息xl/styles.xml保存的是样式信息xl/sharedStrings.xml保存的是共享字符串内容也就是Excel中大量重复文本可能会集中存放在这里。所以.xlsx文件并不是简单的一张表而是由多个XML文件和资源文件组成的压缩包。五、直接改后缀也能打开吗比如有一个文件test.docx可以把后缀改成test.zip然后用压缩软件打开就能看到里面的目录结构。在Linux系统中也可以直接使用命令解压unzip test.docx -d test_docx或者unzip test.xlsx -d test_xlsx解压后就可以进入对应目录查看内部文件。比如Word文档解压后常见结构如下pdsywpdsyw1024:~/桌面$ unzip test.docx -d test_docxExcel文件解压后常见结构如下pdsywpdsyw1024:~/桌面$ unzip test.xlsx -d test_xlsx从这个结构就能看出来Office文件其实就是把多个文件按照一定规范组织起来然后再压缩打包。六、这种设计有什么实际用途了解.docx、.xlsx本质上是ZIP不只是为了知道原理在实际工作中也有用。比如Word文档里有很多图片但是无法直接批量保存。这时可以把.docx文件解压然后进入word/media/里面通常就能看到文档中的图片文件。再比如Excel文件异常损坏打不开了虽然不一定能完全修复但有时候可以尝试解压.xlsx文件查看里面的XML文件是否还能读取从而抢救部分数据。还有一些程序处理Office文档时也会利用这个原理。比如自动生成Word报告、批量读取Excel内容、解析文档中的图片和文本本质上很多都是在处理压缩包里面的XML文件。七、需要注意的问题虽然.docx、.xlsx本质上是ZIP但并不代表随便修改里面的文件后再压缩回去就一定能正常打开。Office文件内部有严格的目录结构和关系文件。比如_rels/ [Content_Types].xml这些文件负责描述各个文件之间的关系如果修改不当文档可能会打不开或者提示文件损坏。所以如果只是为了查看、提取图片、学习文件结构可以放心解压查看但如果要手动修改里面的XML文件一定要先备份原文件避免损坏文档。