- 竞争力:玩转职场Excel,从此不加班(第2版)
- 安伟星等
- 2330字
- 2022-05-06 17:54:18
1.1.2 Excel的运行逻辑和结构
Excel是以单元格为最小维度构建起来的,当我们打开Excel时,呈现在我们面前的就是一个个单元格。Excel的所有功能基本上都是围绕单元格进行的。有时单元格里放的是一条条数据,有时放的是各种功能的函数与公式;有时我们需要对单元格进行筛选和排序,有时又需要对单元格进行合并;有时需要对单元格设置不同的格式,有时需要利用单元格中的数据进行数据分析及可视化操作。
大家有没有想过Excel是怎么存储和调用单元格中的各项数据、格式和不同的操作的?
简单地说,在Excel底层,刚才描述的所有针对Excel的操作或者存储的信息都是以纯文本形式运行的。我们日常所用的一个个独立的xlsx文件其实是一个个压缩文件。它们把若干个XML格式的纯文本文件压缩在一起,Excel就是读取这些压缩文件的信息,最后展现出一个完全图形化的电子表格。因此,通过将其后缀更改为.zip或.rar,即可提取构成Excel的核心源码文件。我们将Excel后缀修改为.zip,然后通过解压软件进行解压,会发现解压后的文件中有3个文件夹和1个XML格式文件,如图1-1所示,Excel文件中所有的内容都包含在4个文件中。
图1-1 Excel文件夹压缩过程
我们先看_rels、docProps和xl这3个文件夹。在xl文件夹里存放着Excel文件的大部分主体内容。如theme文件夹里存放着Excel的主题设置,sharedStrings里存放着各单元格的信息,worksheets文件夹则记录着各个Sheet之间互相调用的过程。这些都是以XML文本格式存放在磁盘里的。
举个例子,假如在一个工作表里输入如图1-2所示的内容,在Excel里看到的是一个整齐的表格,将Excel文件修改成压缩文件格式并解压,在xl\sharedStrings.xml文件里,这些字符是以文本形式被存储的,如图1-3所示。
图1-2 销量信息表
图1-3 Excel中的字符存储形式
从这个案例中可以推测出Excel对信息的存储,就是把各种各样的信息打上标签后,以纯文本的形式存储在XML文件里。而当我们需要读取或者操作Excel单元格时,Excel会通过调取这些文本的关系把纯文本解码为我们看到的电子表格里的信息。
我们去理解Excel怎么工作,其实就是理解这些纯文本信息是什么,它是怎么被编译的。这样,我们可以更轻松地接触Excel的本质,理解它是怎么被设计出来的,会有什么功能。那么,大家不禁要问:Excel压缩文件的结构有什么作用?
通过Excel转压缩包,可以实现Excel更接近运行本质的操作技巧,而这些技巧是Excel自身难以实现的功能。
1. 批量导出Excel中的图片
如果Excel工作表中有很多图片,比如员工通讯录中含有每个员工的头像照片,这些图片是如何在Excel中存在的?带着这个问题,我们来探究Excel中图片的存储方式。
将Excel文件的后缀修改为.zip压缩格式,然后解压,解压后打开文件夹中的xl文件夹,如图1-4所示。在这个文件夹中,我们能看到很多熟悉的信息,比如media文件夹,其中包含多媒体信息;比如theme文件夹,用于存放Excel主题信息;worksheets文件夹用于存放工作表相关的信息。
图1-4 Worksheets文件夹
打开media文件夹,就能看到Excel中所有的图片,这样就实现了对Excel中的图片进行批量导出的操作。将Excel文件转化成压缩包的过程是可逆的,也就是说,我们可以通过修改Excel后缀.xlsx为.zip,将Excel文件转化成压缩包,同样也可以将此压缩包的后缀修改为.xlsx,再次恢复为Excel文件。
这里以图片为例进行说明,实际应用中可以举一反三。事实上,只要Excel中包含相关的媒体文件,解压后都会出现在media文件夹中。
2. “保护工作表”背后的逻辑
将Excel文件转化成压缩包并解压的过程实际上相当于打开了Excel的“后门”,可以让我们一探Excel的核心构成,Excel文件的所有信息都在压缩包中。Excel中常用的“保护工作表”操作是否也能在压缩包中体现出来呢?我们一探究竟。
Step1:打开Excel工作簿,切换到Sheet2工作表,并对该工作表进行“保护工作表”操作,如图1-5所示,在“审阅”菜单中单击“保护工作表”,在接下来的窗口中可以输入密码,也可以直接单击“确定”按钮,都能起到保护工作表的作用,这里我们随意输入一个密码进行测试。
图1-5 保护工作表
Step2:修改压缩文件中的信息。将Excel文件后缀修改为压缩文件,然后双击打开压缩包,从压缩包的\xl\worksheets\路径下找到被保护的工作表,因为只有Sheet2为被保护的工作表,所以找到名称为sheet2.xml的文件即可。
Step3:用记事本打开sheet2.xml文件,然后按“Ctrl+F”组合键,输入“pro”找到“保护工作表”的代码,如图1-6所示。可以看到,找到的代码开头是sheetprotection,即工作表保护的意思。找到之后将“< >”中的字符连同“< >”符号一起删除,然后保存。这一串代码就是工作表保护的完整代码,虽然在这串代码中看不到具体的密码,但是这串代码却能解除“保护工作表”操作。
图1-6 工作表密码对应的代码
Step4:将压缩文件改回为Excel文件。保存压缩包中的Sheet2.xml文件后,压缩包会进行更新,然后修改压缩文件后缀为.xlsx,再次恢复到Excel文件,此时打开Excel文件,会发现即使在Step1中输入了密码,工作表Sheet2“保护工作表”操作也被解除了。
3. 批量修改工作表信息
一个工作簿中存放了一整年的销售记录表,这些工作表的结构是这样的:一个汇总表和12个月的销售明细表,现在需要把工作表名称中的“2008年”字样统一改为“2010年”,如图1-7所示。
图1-7 不同月份的销售明细表
Step1:将Excel文件的后缀修改为.zip。
Step2:双击zip压缩包,在xl文件夹中找到workbook.xml文件,并将workbook.xml复制到电脑桌面(注意不要解压压缩文件)。
Step3:以记事本的方式打开电脑桌面上的workbook.xml文件,单击“编辑”→“替换”,在弹出的“替换”对话框的“查找内容”文本框中输入:2008年,在“替换为”文本框中输入:2010年,单击“全部替换”按钮,关闭“替换”对话框。
Step4:保存文件,并将其粘贴回压缩文件夹中,会提示“此位置已包含同名文件”,单击复制与替换。
Step5:将zip文件扩展名改回原来的.xlsx,然后打开此Excel文件,发现所有的工作表名称都已经改变了。
通过摸索我们还发现,Excel转化成压缩包之后,xl文件夹是放置Excel中各种元素的地方,比如Excel中插入了图片,在xl文件夹中就会生成一个media文件夹;在Excel单元格中插入了批注,xl文件夹中就会生成一个comments1.xml文件,用来存放批注。因此,在Excel文件中难以批量操作的“批注”可以利用压缩包方法解决。