[发明专利]一种针对微软EXCEL文件的数据重组修复方法有效
申请号: | 202010896794.X | 申请日: | 2020-08-31 |
公开(公告)号: | CN112069130B | 公开(公告)日: | 2023-05-02 |
发明(设计)人: | 梁效宁;许超明;何丽萍 | 申请(专利权)人: | 四川效率源信息安全技术股份有限公司 |
主分类号: | G06F16/13 | 分类号: | G06F16/13;G06F12/02 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 641000 四*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 针对 微软 excel 文件 数据 重组 修复 方法 | ||
1.一种针对微软EXCEL文件的数据重组修复方法,其特征在于包括以下步骤:
S100:加载所述微软EXCEL文件并读取首个扇区的字节内容,判断所述字节内容是否符合微软EXCEL文件首个扇区的扇区结构,如果是,执行步骤S300,否则,执行步骤S200,其中,所述微软EXCEL文件为待修复文件;
S200:遍历所述微软EXCEL文件的所有扇区,获取目录流扇区、配置表扇区;
S300:解析所述配置表扇区及所述目录流扇区,检测扇区结构是否完整,如果是,执行步骤S400,否则,执行步骤S600;
S400:根据完整的配置表扇区信息及完整的目录流扇区信息,解析、校验、构造所述微软EXCEL文件的文件头的扇区结构;
S500:根据所构造的头结构扇区内容和待修复文件扇区数据,重组所述微软EXCEL文件的所有扇区数据,执行步骤S800;
S600:解析数据流扇区数据,获取工作簿数据子流数据;
S700:解析所述工作簿数据子流数据,重组所述微软EXCEL文件中工作表数据,执行步骤S900;
S800:所重组后新的EXCEL文件扇区数据写入新的EXCEL文件,结束流程;
S900:按重组后的工作表数据个数写入相应个数的TXT文件:新建TXT文件,将从工作表类型的工作簿子流中解析到的单元格数据,按照二维数组重新排序后的数组的内容,写入TXT文件中。
2.根据权利要求1所述的一种针对微软EXCEL文件的数据重组修复方法,其特征在于,所述微软EXCEL文件首个扇区的扇区结构如下述表1所示,其中,前8字节内容为0xD0 CF11E0 A1 B11A E1;
表1:微软EXCEL文件首个扇区的扇区结构
其中,SID表示扇区标识符Sector Identifier,SSAT表示短扇区配置表short sectorallocation table,SAT表示扇区配置表sector allocation table,MSAT表示主扇区配置表main sector allocation table。
3.根据权利要求1所述的一种针对微软EXCEL文件的数据重组修复方法,其特征在于,所述步骤S200包括以下步骤:
S201:逐一读取各个扇区的字节内容,用以解析各个扇区并与表2所示的目录流存储结构进行对比,判定当前扇区是否属于目录流扇区或配置表扇区,
表2目录流结构
其中,DID表示目录入口标识符directory_entry Identifier;
S202:判断当前扇区的字节内容是否同时满足目录流扇区所具有的下述五个条件,如果是,则判定当前扇区为目录流扇区,记录当前扇区在所述微软EXCEL文件中的偏移地址,并且根据所述表2的目录流扇区结构,记录当前扇区的目录流结构;否则,判断下一扇区的字节内容是否同时满足目录流扇区所具有的下述五个条件,直至完成各个扇区的字节内容的判断;
条件一:包含所述表2所示的4个目录流结构,且每个目录流结构固定字节长度为0x80字节;
条件二:存储名字的区域大小不超过0x40字节;
条件三:入口类型不超过0x05字节;
条件四:目录结构中的左节点、右节点、根节点的DID值均满足DID大于0或DID等于-1;
条件五:流的入口SID值不小于0或SID值等于-2;
S203:判断当前扇区的字节内容是否同时满足配置表扇区所具有的下述两个条件,如果是,则判定当前扇区为配置表扇区,继续判断当前配置表扇区属于SSAT/SAT/MSAT中的哪一种,否则,判断下一扇区的字节内容是否同时满足配置表扇区所具有的下述两个条件,直至完成各个扇区的字节内容的判断;
条件一:当前扇区的0x80字节内容以4字节为一组,逐一对各组的SID值进行判断,各个SID值均需要满足:
SID大于0时,SID小于(所述微软EXCEL文件总大小-0x200)/0x200;
SID小于0时,SID值只能为-1、-2、-3或者-4之一;
条件二:当SID值等于-1时,其后所有SID值均为-1;
判断当前配置表扇区属于SSAT/SAT/MSAT四种分类中的哪一种:
情况一:如果配置表扇区位于目录流扇区之前,则当前配置表扇区为SAT;
情况二:如果配置表扇区位于Root Entry所在的目录流扇区之后,且配置表扇区内第一个正数的SID等于当前SID值的扇区内偏移地址/4,则表示当前配置表扇区为SSAT;
情况三:如果配置表扇区内只有正数值和-1一种负值,则当前配置表扇区为MSAT;
情况四:如果配置表扇区中存在-3,-4两种负值的SID值,则当前配置表扇区为SAT;
如果目录流扇区中存在Root Entry,则根据Root Entry目录流结构中的入口Sid值和入口字节数,判定SSAT的最大SID值;
S204:根据所分类的配置表扇区,将SAT配置表扇区的SID值生成SAT-SID链表:所述SAT-SID链表由SAT数组索引和SID一一对应而构成,所述数组索引为自然数,SID的内容为当前SID的下一SID所对应的SAT数组索引;
S205:根据所分类的配置表扇区,将SSAT配置表扇区的SID值形成SSAT-SID链表:所述SSAT-SID链表由SSAT数组索引和SID一一对应而构成,所述SSAT数组索引为自然数,SID的内容为当前SID的下一SID所对应的SSAT数组索引。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于四川效率源信息安全技术股份有限公司,未经四川效率源信息安全技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010896794.X/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种自动上件的座圈压装生产线
- 下一篇:一种中草药材超微粉碎机