不为人知的Excel转压缩包逆天功能

星爷要是给你一个压缩文件,然后说这是一个Excel文件,你会怎么想?

Excel文件确实可以通过压缩软件打包进压缩包中,但是把Excel自身变成压缩文件,多数人应该还没有听说过。

— 01 

Excel与压缩包迷之关系

其实,Office三姐妹在2007(或以上版本)中采用的后缀分别是xlsx、docx、pptx。

这些格式相比旧版本都多了个X,它们本质上是一个压缩包,这样的好处是存储相同容量的信息将占用较小的空间。

具体到Excel,构成Excel的所有源码文件都在这个压缩包中,因此通过将其后缀更改为.zip或.rar即可提取构成Excel的核心源码文件。

是不是感觉发现了微软的小秘密。

我们将Excel修改后缀为zip,解压出内部文件,看看都有什么?3个文件夹1个xml文件。

这里面是什么鬼东西,能怎么玩?让我们一步步扒光它……

小结Excel变成压缩包的原理图。

— 02 

批量导出Excel中的图片

如果我们的Excel工作表中有很多图片,比如做的员工通讯录,里面含有每一个员工的头像照片,需要将他们批量导入了,一个一个另存为速度就太慢了。

将其转化为压缩包,然后解压,你会赫然发现,所有图片已经静静地在那里等你。

Excel等信息存放在解压后的xl文件夹中的media文件夹里,如图是获取Excel中所有图片的步骤。

— 03 

破解工作表加密

如图第二张表「销售记录」是使用密码保护的工作表。可是自己设置的密码却忘记了,该怎么办?

这就叫做搬起石头砸自己的脚吧。

①首先修改Excel的后缀名为「.zip」或者「.rar」,是压缩文件的格式就行。

注意:Excel会提示你修改后缀名之后会导致文件不可用,不要理它,点击「是」。

②用压缩软件打开刚才创建的压缩包,从压缩包中xlworksheets路径下找到加密的工作表。因为我们只有sheet2为加密工作表,所以打开这个工作表即可。

通常,为了防止乱搞,把原始Excel文件搞乱,我建议大家把此文件复制到桌面之后再进行下一步操作。

③假设你已经将压缩包中的Sheet2复制到桌面了,那么用【记事本】打开它,【Ctrl】+【F】,输入“pro”查找找到加密代码,找到之后将<>中的那一坨连同<>符号一起删掉,然后保存。

<sheetProtection algorithmName="SHA-512" hashValue="0botjAbUl3c8nnRthv/9xqEJw1FA6ErQJGpCGWzty5mQjyr89b11v9ffpnHIJOm3mk9Rv3YgnF10xQ3FEjTbvQ==" saltValue="5wf6E/o5M+RHJTelz8A5hg==" spinCount="100000" sheet="1" objects="1" scenarios="1"/>

④将桌面的上已经删除密码保护的sheet2直接拖到压缩的文件的xlworksheets路径下,替换到原来的sheet2。

⑤把zip文件改回.xlsx文件,然后大摇大摆去修改工作表吧,因为excel工作表保护密码消失了。

— 04 

批量修改工作表名称

一个工作簿中存放了一整年的销售记录表,有一个汇总表以及1-12月的销售明细。现在想把工作表名称中“2008年”字样统一改为“2010年”,同样使用压缩文件的方式可以快速搞定。

①将Excel文件的扩展名修改为.zip

②双击zip压缩包→xl文件夹,找到workbook.xml文件,并将workbook.xml复制到桌面(注意不要解压压缩文件)。

③以记事本的方式打开桌面上的workbook.xml文件,单击菜单命令“编辑”→“替代”,在弹出的“替换”对话框中,“查找内容”文本框输入:2008年,“替换为”文本框输入:2010年,单击“全部替换“按钮,关闭”替换“对话框;

④保存文件,并将其粘贴回压缩文件夹中,会提示“此位置已包含同名文件”,点击复制与替换。

⑤将zip文件扩展名再改回原来的.xlsx,然后打开此Excel文件,发现所有的工作表名称都已经改变了。

— 05 

批量修改批注

通过摸索,星爷发现,Excel转化成压缩包之后,其中xl文件夹是放置Excel中各种元素的地方,比如Excel中插入了图片,在xl文件夹中就会生成一个media文件夹;在Excel单元格中插入了批注,xl文件夹中就会生成一个comments1.xml文件,用来存放批注。

因此,在Excel文件中难以批量操作的“批注”,就可以利用压缩包方法解决。

比如批量修改批注。

双击zip压缩文件,双击打开 xl 文件夹,找到名为comments1.xml的文件,将其复制到桌面。

右键单击comments1.xml文件,在右键菜单中依次单击【打开方式】——【记事本】。在记事本中打开后,所有Excel中批注的内容都在这个文件中了,在这里我们可以方便的使用查找替换进行批量性该,比如:删掉所有批注中的“学费”两字。

如图可以采用替换的方式,将学费替换为空值。

完成之后保存comments1.xml文件,并将其粘贴回压缩文件包中。

最后zip文件扩展名再改回原来的.xlsx,然后打开此Excel文件,工作表中所有地方的批注都进行了相应的改变。

知道了这个原理之后,我们应该还能解锁更多的玩法,等着你去发现。

今日互动

关于Excel与压缩包,你还有哪些玩法?

IOS专用打赏,一种碉堡了的打赏方式

↓↓↓

·The End·



  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,您可以使用Java中的ZipOutputStream类来实现压缩多个Excel文件。以下是一个简单的示例代码: ```java import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.metadata.Sheet; import com.alibaba.excel.metadata.Table; import com.alibaba.excel.support.ExcelTypeEnum; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import java.io.*; import java.util.ArrayList; import java.util.List; public class ExportExcel { public static void main(String[] args) throws IOException { // 创建多个Excel文件 List<File> fileList = createExcelFiles(); // 创建压缩包文件 File zipFile = new File("excel_files.zip"); ZipArchiveOutputStream zipOutputStream = new ZipArchiveOutputStream(zipFile); zipOutputStream.setMethod(ZipArchiveOutputStream.DEFLATED); // 将多个Excel文件压缩到压缩包中 for (File file : fileList) { ZipArchiveEntry entry = new ZipArchiveEntry(file.getName()); entry.setSize(file.length()); zipOutputStream.putArchiveEntry(entry); FileInputStream fis = new FileInputStream(file); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) > 0) { zipOutputStream.write(buffer, 0, len); } fis.close(); zipOutputStream.closeArchiveEntry(); } // 关闭ZipOutputStream流 zipOutputStream.finish(); zipOutputStream.close(); // 删除临时Excel文件 for (File file : fileList) { file.delete(); } } private static List<File> createExcelFiles() throws FileNotFoundException { List<File> fileList = new ArrayList<>(); for (int i = 1; i <= 3; i++) { // 创建Excel文件 File file = new File("excel_" + i + ".xlsx"); OutputStream out = new FileOutputStream(file); // EasyExcel导出数据 ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX); Sheet sheet = new Sheet(1, 0); sheet.setSheetName("Sheet1"); Table table = new Table(1); List<List<String>> data = new ArrayList<>(); for (int j = 1; j <= 10; j++) { List<String> row = new ArrayList<>(); row.add("Data" + j); data.add(row); } table.setData(data); writer.write0(table, sheet); writer.finish(); // 添加Excel文件到列表中 fileList.add(file); } return fileList; } } ``` 在上面的代码中,我们首先创建了3个Excel文件,然后将它们压缩到一个名为“excel\_files.zip”的压缩包中。最后,我们删除了临时的Excel文件。注意,我们使用了Apache Commons Compress库来实现压缩操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值