一种提取xlsx文件内容的方法及装置与流程

文档序号:24154982发布日期:2021-03-05 11:00阅读:208来源:国知局
一种提取xlsx文件内容的方法及装置与流程

[0001]
本发明涉及电子信息领域,尤其涉及一种提取xlsx文件内容的方法及装置。


背景技术:

[0002]
xlsx是microsoft(即微软)开发的一种以xml为基础并以zip格式压缩的电子文件规范,常用于电子表格。由于windows操作系统的广泛使用,同为微软推出,并被office支持的xlsx文件,已成为一种广泛使用的编辑文件。人们常通过xlsx文件进行信息交互,因此存在泄漏敏感信息的可能。网络数据防泄漏设备需要监控和审计网络中的敏感信息,而xlsx作为非结构化,且具有自定义格式的文件,直接审计存在困难,需要对xlsx文件进行解析以提取文件中的文本内容。然而,现有的提取xlsx文件内容的方法,执行速度有待提高。


技术实现要素:

[0003]
鉴于上述问题,本发明提供一种克服上述问题或者至少部分地解决上述问题的提取xlsx文件内容的方法及装置,如下:
[0004]
一种提取xlsx文件内容的方法,包括:
[0005]
获取单元格文本存储文件sharedstrings.xml和工作簿文件sheeti.xml,其中,i表示xlsx文件中的任意一个工作簿;
[0006]
提取所述sharedstrings.xml中记录的单元格文本和所述单元格文本对应的标识;
[0007]
提取所述sheeti.xml中记录的单元格信息,所述单元格信息包括所述单元格内容的类型和字符串;
[0008]
在所述单元格内容的类型为非数字的情况下,将目标标识对应的单元格文本,作为所述单元格的内容,所述目标标识为与所述字符串相同的标识;
[0009]
在所述单元格内容的类型为数字的情况下,将所述字符串作为所述单元格的内容。
[0010]
可选地,提取所述sharedstrings.xml中记录的单元格文本和所述单元格文本对应的标识,包括:
[0011]
触发sax载入所述sharedstrings.xml,并调用第一类预设函数,提取所述sharedstrings.xml中记录的所述单元格文本和所述单元格文本对应的标识。
[0012]
可选地,sharedstrings.xml中还记录有每一个单元格文本的起始符和结束符;
[0013]
所述第一类预设函数包括:
[0014]
单元格文本起始符查找函数,用于查找所述单元格文本的起始符;
[0015]
单元格文本结束符查找函数,用于查找所述单元格文本的结束符;
[0016]
单元格文本提取函数,用于提取所述单元格文本和所述单元格文本对应的标识;
[0017]
所述sax载入所述sharedstrings.xml,并调用第一类预设函数,提取所述sharedstrings.xml中记录的所述单元格文本和所述单元格文本对应的标识包括:
[0018]
所述sax载入所述sharedstrings.xml中的预设数量的数据,并对载入的数据进行处理后,再载入并处理预设数量的其它部分数据,直至处理完所述sharedstrings.xml中的全部数据;
[0019]
其中,所述sax对载入的数据进行处理的流程包括:
[0020]
调用所述单元格文本起始符查找函数查找到一个单元格文本的起始符,调用所述单元格文本结束符查找函数查找到该起始符后第一个单元格文本的结束符,并调用所述单元格文本提取函数提取所述该起始符与该结束符之间的单元格文本和所述单元格文本对应的标识。
[0021]
可选地,提取所述sheeti.xml中记录的单元格信息,包括:
[0022]
触发sax载入所述sheeti.xml,并调用第二类预设函数,提取所述sheeti.xml中记录的单元格信息。
[0023]
可选地,单元格信息还包括:
[0024]
单元格信息的起始符和单元格信息的结束符;
[0025]
第二类预设函数包括:
[0026]
单元格信息起始符查找函数,用于查找所述单元格信息的起始符;
[0027]
单元格信息结束符查找函数,用于查找所述单元格信息的结束符;
[0028]
提取函数,用于提取单元格信息;
[0029]
所述sax载入所述sheeti.xml,并调用第二类预设函数,提取所述sheeti.xml中记录的单元格信息,包括:
[0030]
所述sax载入所述sheeti.xml中的预设数量的数据,并对载入的数据进行处理后,再载入并处理预设数量的其它部分数据,直至处理完所述sheeti.xml中的全部数据;
[0031]
其中,所述sax对载入的所述sheeti.xml中的预设数量的数据进行处理的流程包括:
[0032]
调用所述单元格信息起始符查找函数查找到一个单元格信息的起始符,调用所述单元格信息结束符查找函数查找到该单元格信息的起始符后的第一个单元格信息的结束符,并调用所述提取函数,获取该单元格信息的起始符与该单元格信息的结束符之间的单元格信息。
[0033]
可选地,在所述单元格内容的类型为非数字的情况下,将目标标识对应的单元格文本内容,作为所述单元格的内容;在所述单元格内容的类型为数字的情况下,将所述字符串作为所述单元格的内容,包括:
[0034]
触发所述sax调用所述提取函数,获取所述单元格的内容;
[0035]
其中,所述提取函数还用于:在所述单元格内容的类型为非数字的情况下,从所述标识中查找所述目标标识,并将所述目标标识对应的单元格文本,作为所述单元格的内容;在所述单元格内容的类型为数字的情况下,将所述字符串作为所述单元格的内容。
[0036]
可选地,sheeti.xml中还记录有行起始符和行结束符;
[0037]
在获取所述单元格的内容之后,还包括:
[0038]
基于所述单元格信息的起始符和单元格信息的结束符、以及所述行起始符和行结束符,排列提取到的所述单元格的内容。
[0039]
一种提取xlsx文件内容的装置,包括:
[0040]
文件获取单元,用于获取单元格文本存储文件sharedstrings.xml和工作簿文件sheeti.xml,其中,i表示xlsx文件中的任意一个工作簿;
[0041]
文本提取单元,用于提取所述sharedstrings.xml中记录的单元格文本和所述单元格文本对应的标识;
[0042]
信息提取单元,用于提取所述sheeti.xml中记录的单元格信息,所述单元格信息包括所述单元格内容的类型和字符串;
[0043]
内容确定单元,用于在所述单元格内容的类型为非数字的情况下,将目标标识对应的单元格文本,作为所述单元格的内容,所述目标标识为与所述字符串相同的标识;在所述单元格内容的类型为数字的情况下,将所述字符串作为所述单元格的内容。
[0044]
一种提取xlsx文件内容的设备,包括:存储器和处理器;
[0045]
所述存储器,用于存储程序;
[0046]
所述处理器,用于执行所述程序,实现如上所述的提取xlsx文件内容的各个步骤。
[0047]
一种存储介质,其上存储有程序,其特征在于,所述程序被处理器执行时,实现如上所述的提取xlsx文件内容的各个步骤。
[0048]
借由上述技术方案,本发明提供的提取xlsx文件内容的方法及装置,获取单元格文本存储文件sharedstrings.xml和xlsx文件中的任意一个工作簿文件sheeti.xml后,可以分别从sharedstrings.xml中提取单元格文本和各单元格文本对应的标识,从sheeti.xml中提取单元格信息,其中,单元格信息包括单元格内容的类型和字符串。在单元格内容的类型为非数字的情况下,将与字符串相同的标识即目标标识对应的单元格文本,作为单元格的内容;在单元格内容的类型为数字的情况下,将字符串作为单元格的内容。综上,本方法只需获取sharedstrings.xml和工作簿文件sheeti.xml,不需要获取xlsx文件的格式信息,即可提取xlsx文件的内容,大大提高了提取xlsx文件内容的速度。
[0049]
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
[0050]
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0051]
图1示出了xlsx文件解压后的文件夹及文件分布示意图;
[0052]
图2示出了一种提取xlsx文件内容的方法流程示意图;
[0053]
图3示出了一种提取xlsx文件内容的装置结构示意图;
[0054]
图4示出了一种提取xlsx文件内容的设备结构示意图。
具体实施方式
[0055]
xlsx文件实际为zip压缩格式文件,图1示出了xlsx文件解压后的文件分布示意图,如图1所示,xlsx文件解压后的文件夹下会出现_rels、docprops、xl三个文件夹和[content_types].xml文件。xl文件夹下有_rels、printersettings、theme、worksheets四
个文件夹和sharedstrings.xml、styles.xml、workbook.xml三个文件。
[0056]
其中,sharedstrings.xml为单元格文本存储文件。sharedstrings.xml中只存储内容为非数字的单元格中的内容,例如某个单元格中的内容为123,则该单元格内容“123”不被存储在sharedstrings.xml中,而另一个单元格的内容为abc,则单元格内容“abc”被存储在sharedstrings.xml中。sharedstrings.xml中存储的单元格内容被编号,且相同的单元格内容,只存储一次。
[0057]
worksheets文件夹下有n个工作薄文件,即sheet1.xml、sheet2.xml、

、sheetn.xml,每一个工作薄文件都对应于xlsx文件中的一页表格。xl文件夹下的_rels文件夹下的workbook.xml.rels文件存储的是工作薄文件sheet1.xml、sheet2.xml、

、sheetn.xml以及单元格文本存储文件sharedstrings.xml的路径信息。
[0058]
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0059]
图2为本申请实施例提供的提取xlsx文件内容的方法流程示意图。如图2所示,本方法具体可以包括:
[0060]
s201:获取单元格文本存储文件sharedstrings.xml和工作簿文件sheeti.xml。
[0061]
具体地,每一xlsx文件都可以解压得到图1所示的各个文件夹及文件,该,由于xlsx文件可能包括的表格数量不同,所以会出现不同数量的工作薄文件,本申请实施例将工作薄文件的数量设为n,且,sheeti.xml(1≤i≤n)代表sheet1.xml、sheet2.xml、

、sheetn.xml中任一个工作薄文件。
[0062]
本方法可以利用workbook.xml.rels文件中存储的sheeti.xml以及sharedstrings.xml的路径信息获取sharedstrings.xml以及sheeti.xml。
[0063]
s202:提取sharedstrings.xml中记录的单元格文本和单元格文本对应的标识。
[0064]
由上可知,sharedstrings.xml中记录单元格内容的方式为:逐条记录xlsx文件中所有单元格的单元格文本,该单元格文本指的属于非数字的单元格内容,并且,sharedstrings.xml对于重复的单元格文本只记录一次。每一个单元格文本都对应于一个标识,该标识可以区分sharedstrings.xml中记录每一条单元格文本。即,一条单元格文本至少对应于一个单元格的单元格内容,并且该条单元格文本对应于唯一的标识。
[0065]
本步骤可以提取sharedstrings.xml中包括的每一单元格文本及其对应的标识。
[0066]
s203:提取sheeti.xml中记录的单元格信息。
[0067]
其中,sheeti.xml对应于xlsx文件中的任一页表格。每一单元格信息记录该页表格中一个单元格的单元格内容的类型和字符串。该单元格信息中的单元格内容的类型表征该单元格内容的属性为数字或非数字。其中,非数字的单元格内容可以包括字母或文字。可选地,字符串可以是一串数字,或一个标识。
[0068]
s204:本方法基于单元格信息判断该单元格内容的类型。
[0069]
当单元格内容的类型为非数字时,执行下述s204;当单元格内容的类型为数字时,执行下述s205。
[0070]
s205:在单元格内容的类型为非数字的情况下,将目标标识对应的单元格文本,作
为单元格的内容。
[0071]
具体地,在单元格内容的类型为非数字的情况下,单元格信息中包括的字符串可以是一个标识。由上可知,xlsx文件中非数字的单元格内容存储在上述sharedstrings.xml中。所以,可以在从sharedstrings.xml提取的单元格文本标识中查找与该字符串相同的标识作为目标标识,并提取该目标标识对应的单元格文本作为sheeti.xml中的单元格内容。
[0072]
s206:在单元格内容的类型为数字的情况下,将字符串作为单元格的内容。
[0073]
具体地,在单元格内容的类型为数字的情况下,单元格信息中包括的字符串可以是数字。可以直接提取该数字作为该单元格中的内容。
[0074]
可以理解的是,可以经过s205或s206逐个确定该工作薄文件sheeti.xml对应的一页表格中所有的单元格内容。当工作薄文件个数为n时,通过本方法可以提取i=1、2、

、n的所有工作薄文件对应的表格中的单元格内容。由此完成对整个xlsx文件内容的提取。
[0075]
借由上述技术方案,本发明提供的提取xlsx文件内容的方法及装置,获取单元格文本存储文件sharedstrings.xml和xlsx文件中的任意一个工作簿文件sheeti.xml后,可以分别从sharedstrings.xml中提取单元格文本和各单元格文本对应的标识,从sheeti.xml中提取单元格信息,其中,单元格信息包括单元格内容的类型和字符串。在单元格内容的类型为非数字的情况下,将与字符串相同的标识即目标标识对应的单元格文本,作为单元格的内容;在单元格内容的类型为数字的情况下,将字符串作为单元格的内容。综上,本方法只需获取sharedstrings.xml和工作簿文件sheeti.xml,不需要获取xlsx文件的格式,即可提取xlsx文件的内容,大大提高了提取xlsx文件内容的速度。
[0076]
例如在现有技术中,提取xlsx文件内容的方法有:基于apache poi(poor obfuscation implementation,简洁模糊实现)的提取方法和基于com(component object model,组件对象模型)接口的提取方法。
[0077]
其中,因为xlsx文件为zip压缩格式,所以在文件内文本数量过多时,基于apache poi提取xlsx文件内容的方法占用内存过高,执行速度较慢。
[0078]
基于com接口提取xlsx文件内容的方法时,com接口在读取xlsx文件时,会读取文件的格式信息,导致执行速度慢。
[0079]
由此可见,对比于现有技术,本申请提供的提取xlsx文件内容的方法只需获取并处理xlsx文件解压后的sharedstrings.xml以及sheeti.xml中的数据,不需要提取文件格式信息,即可完成提取xlsx文件中的内容。由此提高了执行速度,进一步,减少了方法执行过程中占用的内存资源。
[0080]
进一步地,在上述的现有技术中,由于apache poi是java api,因此基于提取xlsx文件内容的方法依赖java环境,且需要安装jdk,在一些特殊场合(例如资源紧张)不能满足需求。并且,基于com接口获取xlsx文件内容的方法,依赖于windows操作系统,需要使用windows提供的com接口进行xlsx文件中的内容的提取。
[0081]
由此可见,本申请提供的方法不依赖于特定的操作系统,没有实现环境的限制,是一种执行效果更好的提取xlsx文件内容的方法。
[0082]
接下来,对本申请实施例提供的一种可选的提取xlsx文件内容的方法的具体实施方式进行介绍。具体可以包括:
[0083]
本方法触发sax(simple apis for xml,xml简单接口)载入sharedstrings.xml,
并调用第一类预设函数,提取sharedstrings.xml中记录的单元格文本和单元格文本对应的标识。
[0084]
其中,sharedstrings.xml中记录有单元格文本、单元格文本对应的标识、单元格文本的起始符以及单元格文本的结束符。每一个单元格文本的起始符表征该单元格文本的开始,每一个单元格文本的结束符表征该单元格文本的结束。
[0085]
第一类预设函数为在sax中预先注册的用于处理载入的sharedstrings.xml中数据的函数,具体可以包括:单元格文本起始符查找函数、单元格文本结束符查找函数和单元格文本提取函数。其中,单元格文本起始符查找函数用于查找单元格文本的起始符。单元格文本结束符查找函数用于查找单元格文本的结束符。单元格文本提取函数用于提取单元格文本和单元格文本对应的标识。
[0086]
基于此,sax在载入sharedstrings.xml中的预设数量的数据后,调用单元格文本起始符查找函数查找到一个单元格文本的起始符,调用单元格文本结束符查找函数查找到该起始符后第一个单元格文本的结束符。显然,该起始符和该结束符之间的文本为一个单元格对应的单元格文本。所以,sax进一步调用单元格文本提取函数提取该起始符与该结束符之间的单元格文本和单元格文本对应的标识。
[0087]
需要说明的是,基于sax对预设数量的数据完成处理后将继续载入sharedstrings.xml中的预设数量的其他部分数据并进行处理,直至完成对sharedstrings.xml中所有数据的处理流程。
[0088]
进一步地,本方法触发sax载入sheeti.xml,并调用第二类预设函数,提取sheeti.xml中记录的单元格信息。
[0089]
其中,单元格信息包括每一单元格内容的类型、字符串、单元格信息的起始符以及单元格信息的结束符。每一个单元格信息的起始符表征该单元格信息的开始,每一个单元格信息的结束符表征该单元格信息的结束。
[0090]
第二类预设函数为在sax中预先注册的用于处理载入的sheeti.xml中数据的函数,具体可以包括:单元格信息起始符查找函数、单元格信息结束符查找函数以及提取函数。其中,单元格信息起始符查找函数用于查找单元格信息的起始符。单元格信息结束符查找函数用于查找单元格信息的结束符。提取函数用于提取单元格信息。
[0091]
基于此,sax在载入sheeti.xml中的预设数量的数据后,调用单元格信息起始符查找函数查找到一个单元格信息的起始符,调用单元格信息结束符查找函数查找到该单元格信息的起始符后的第一个单元格信息的结束符。显然,该起始符和该结束符之间的数据为一个单元格对应的单元格信息。所以sax进一步调用提取函数,获取该单元格信息的起始符与该单元格信息的结束符之间的单元格信息。
[0092]
由此,获取sheeti.xml中该部分数据中包括的所有单元格信息。
[0093]
其中,每一单元格信息对应于一条单元格内容,该单元格信息中记录有该单元格内容的类型以及字符串。由于,sharedstrings.xml仅记录单元格中非数字的单元格内容。所以,在该单元格信息中记录的单元格内容的类型为非数字的情况下,触发sax调用上述提取函数,在从sharedstrings.xml中提取的单元格文本对应的标识中查找与该单元格信息中记录的字符串相同的标识,即目标标识。并将目标标识对应的单元格文本,作为该单元格信息对应的单元格内容。
[0094]
在该单元格信息中记录的单元格内容的类型为数字的情况下,触发sax调用上述提取函数直接将该单元格信息中记录的字符串作为一条单元格的内容。
[0095]
需要理解的是,单元格内容可能分行排列。所以,sheeti.xml中还记录有行起始符和行结束符。其中,行起始符表征一行内容的开始,行结束符表征一行内容的结束。基于此,本方法在获取单元格的内容之后,进一步根据查找到的单元格信息的起始符和单元格信息的结束符、以及行起始符和行结束符,将相邻的一个行起始符以及行结束符之间的内容作为一行内容,对获取的单元格内容进行排列。
[0096]
需要说明的是,基于sax对预设数量的数据完成处理后将继续载入sheeti.xml中的预设数量的其他部分数据并进行处理,直至完成对sheeti.xml中所有数据的处理流程。
[0097]
如上所述,xlsx文件为zip压缩格式文件,将其解压后会出现一个或多个记录xlsx文件中单元格内容工作薄文件。一般情况下,xlsx文件解压后会出现大量的xml文件,并且其中可能包括大容量的文件。传统的提取xml文件内容的方法还包括dom(document object model,文档对象模型)方法。但是,dom方法需要一次性载入xml文件中所有的数据后才对数据进行处理,具有耗时长、速度慢的缺点。
[0098]
由此可见,本申请实施例提供的提取xlsx内容的方法触发sax载入xml文件时,不需要一次性载入xml文件中的所有数据,而是可以边载入边处理数据,由此可以提高数据载入及处理的速度,并且减少占用内存资源。
[0099]
本申请实施例还提供了一种提取xlsx文件内容的装置,下面对本申请实施例提供的提取xlsx文件内容的装置进行描述,下文描述的提取xlsx文件内容的装置与上文描述的提取xlsx文件内容的方法可相互对应参照。
[0100]
请参阅图3,示出了本申请实施例提供的一种提取xlsx文件内容的装置的结构示意图,如图3所示,该装置可以包括:
[0101]
文件获取单元301,用于获取单元格文本存储文件sharedstrings.xml和工作簿文件sheeti.xml,其中,i表示xlsx文件中的任意一个工作簿;
[0102]
文本提取单元302,用于提取所述sharedstrings.xml中记录的单元格文本和所述单元格文本对应的标识;
[0103]
信息提取单元303,用于提取所述sheeti.xml中记录的单元格信息,所述单元格信息包括所述单元格内容的类型和字符串;
[0104]
内容确定单元304,用于在所述单元格内容的类型为非数字的情况下,将目标标识对应的单元格文本,作为所述单元格的内容,所述目标标识为与所述字符串相同的标识;在所述单元格内容的类型为数字的情况下,将所述字符串作为所述单元格的内容。
[0105]
可选地,文本提取单元用于提取所述sharedstrings.xml中记录的单元格文本和所述单元格文本对应的标识,包括:
[0106]
文本提取单元具体用于,触发sax载入所述sharedstrings.xml,并调用第一类预设函数,提取所述sharedstrings.xml中记录的所述单元格文本和所述单元格文本对应的标识。
[0107]
可选地,sharedstrings.xml中还记录有每一个单元格文本的起始符和结束符;
[0108]
所述第一类预设函数包括:
[0109]
单元格文本起始符查找函数,用于查找所述单元格文本的起始符;
[0110]
单元格文本结束符查找函数,用于查找所述单元格文本的结束符;
[0111]
单元格文本提取函数,用于提取所述单元格文本和所述单元格文本对应的标识;
[0112]
可选地,文本提取单元用于,触发sax载入所述sharedstrings.xml,并调用第一类预设函数,提取所述sharedstrings.xml中记录的所述单元格文本和所述单元格文本对应的标识,包括:
[0113]
文本提取单元具体用于,触发所述sax执行以下流程:
[0114]
载入所述sharedstrings.xml中的预设数量的数据,并对载入的数据进行处理后,再载入并处理预设数量的其它部分数据,直至处理完所述sharedstrings.xml中的全部数据;
[0115]
其中,所述sax对载入的数据进行处理的流程包括:
[0116]
调用所述单元格文本起始符查找函数查找到一个单元格文本的起始符,调用所述单元格文本结束符查找函数查找到该起始符后第一个单元格文本的结束符,并调用所述单元格文本提取函数提取所述该起始符与该结束符之间的单元格文本和所述单元格文本对应的标识。
[0117]
可选地,信息提取单元用于提取所述sheeti.xml中记录的单元格信息,包括:
[0118]
信息提取单元具体用于,触发sax载入所述sheeti.xml,并调用第二类预设函数,提取所述sheeti.xml中记录的单元格信息。
[0119]
可选地,单元格信息还包括:
[0120]
单元格信息的起始符和单元格信息的结束符;
[0121]
第二类预设函数包括:
[0122]
单元格信息起始符查找函数,用于查找所述单元格信息的起始符;
[0123]
单元格信息结束符查找函数,用于查找所述单元格信息的结束符;
[0124]
提取函数,用于提取单元格信息;
[0125]
可选地,信息提取单元用于触发sax载入所述sheeti.xml,并调用第二类预设函数,提取所述sheeti.xml中记录的单元格信息,包括:
[0126]
信息提取单元具体用于,触发所述sax执行以下流程:
[0127]
载入所述sheeti.xml中的预设数量的数据,并对载入的数据进行处理后,再载入并处理预设数量的其它部分数据,直至处理完所述sheeti.xml中的全部数据;
[0128]
其中,所述sax对载入的所述sheeti.xml中的预设数量的数据进行处理的流程包括:
[0129]
调用所述单元格信息起始符查找函数查找到一个单元格信息的起始符,调用所述单元格信息结束符查找函数查找到该单元格信息的起始符后的第一个单元格信息的结束符,并调用所述提取函数,获取该单元格信息的起始符与该单元格信息的结束符之间的单元格信息。
[0130]
可选地,内容确定单元用于在所述单元格内容的类型为非数字的情况下,将目标标识对应的单元格文本内容,作为所述单元格的内容;在所述单元格内容的类型为数字的情况下,将所述字符串作为所述单元格的内容,包括:
[0131]
内容确定单元具体用于,触发所述sax调用所述提取函数,获取所述单元格的内容;
[0132]
其中,所述提取函数还用于:在所述单元格内容的类型为非数字的情况下,从所述标识中查找所述目标标识,并将所述目标标识对应的单元格文本,作为所述单元格的内容;在所述单元格内容的类型为数字的情况下,将所述字符串作为所述单元格的内容。
[0133]
可选地,sheeti.xml中还记录有行起始符和行结束符;
[0134]
可选地,本申请实施例提供的装置还包括:排列单元,用于在获取所述单元格的内容之后,基于所述单元格信息的起始符和单元格信息的结束符、以及所述行起始符和行结束符,排列提取到的所述单元格的内容。
[0135]
所述提取xlsx文件内容的装置包括处理器和存储器,上述文件获取单元、文本提取单元、信息提取单元、内容确定单元和排列单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
[0136]
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来提高提取xlsx文件内容的速度。
[0137]
本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现所述提取xlsx文件内容的方法。
[0138]
本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述提取xlsx文件内容的方法。
[0139]
本发明实施例提供了一种提取xlsx文件内容的设备,图4示出了本申请实施例提供的一种提取xlsx文件内容的设备的结构示意图,提取xlsx文件内容的设备(40)包括至少一个处理器401、以及与处理器连接的至少一个存储器402、总线403;其中,处理器401、存储器402通过总线403完成相互间的通信;处理器用于调用存储器中的程序指令,以执行上述的提取xlsx文件内容的方法。本文中的设备可以是服务器、pc、pad、手机等。
[0140]
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:
[0141]
获取单元格文本存储文件sharedstrings.xml和工作簿文件sheeti.xml,其中,i表示xlsx文件中的任意一个工作簿;
[0142]
提取所述sharedstrings.xml中记录的单元格文本和所述单元格文本对应的标识;
[0143]
提取所述sheeti.xml中记录的单元格信息,所述单元格信息包括所述单元格内容的类型和字符串;
[0144]
在所述单元格内容的类型为非数字的情况下,将目标标识对应的单元格文本,作为所述单元格的内容,所述目标标识为与所述字符串相同的标识;
[0145]
在所述单元格内容的类型为数字的情况下,将所述字符串作为所述单元格的内容。
[0146]
可选地,提取所述sharedstrings.xml中记录的单元格文本和所述单元格文本对应的标识,包括:
[0147]
触发sax载入所述sharedstrings.xml,并调用第一类预设函数,提取所述sharedstrings.xml中记录的所述单元格文本和所述单元格文本对应的标识。
[0148]
可选地,sharedstrings.xml中还记录有每一个单元格文本的起始符和结束符;
[0149]
所述第一类预设函数包括:
[0150]
单元格文本起始符查找函数,用于查找所述单元格文本的起始符;
[0151]
单元格文本结束符查找函数,用于查找所述单元格文本的结束符;
[0152]
单元格文本提取函数,用于提取所述单元格文本和所述单元格文本对应的标识;
[0153]
所述sax载入所述sharedstrings.xml,并调用第一类预设函数,提取所述sharedstrings.xml中记录的所述单元格文本和所述单元格文本对应的标识包括:
[0154]
所述sax载入所述sharedstrings.xml中的预设数量的数据,并对载入的数据进行处理后,再载入并处理预设数量的其它部分数据,直至处理完所述sharedstrings.xml中的全部数据;
[0155]
其中,所述sax对载入的数据进行处理的流程包括:
[0156]
调用所述单元格文本起始符查找函数查找到一个单元格文本的起始符,调用所述单元格文本结束符查找函数查找到该起始符后第一个单元格文本的结束符,并调用所述单元格文本提取函数提取所述该起始符与该结束符之间的单元格文本和所述单元格文本对应的标识。
[0157]
可选地,提取所述sheeti.xml中记录的单元格信息,包括:
[0158]
触发sax载入所述sheeti.xml,并调用第二类预设函数,提取所述sheeti.xml中记录的单元格信息。
[0159]
可选地,单元格信息还包括:
[0160]
单元格信息的起始符和单元格信息的结束符;
[0161]
第二类预设函数包括:
[0162]
单元格信息起始符查找函数,用于查找所述单元格信息的起始符;
[0163]
单元格信息结束符查找函数,用于查找所述单元格信息的结束符;
[0164]
提取函数,用于提取单元格信息;
[0165]
所述sax载入所述sheeti.xml,并调用第二类预设函数,提取所述sheeti.xml中记录的单元格信息,包括:
[0166]
所述sax载入所述sheeti.xml中的预设数量的数据,并对载入的数据进行处理后,再载入并处理预设数量的其它部分数据,直至处理完所述sheeti.xml中的全部数据;
[0167]
其中,所述sax对载入的所述sheeti.xml中的预设数量的数据进行处理的流程包括:
[0168]
调用所述单元格信息起始符查找函数查找到一个单元格信息的起始符,调用所述单元格信息结束符查找函数查找到该单元格信息的起始符后的第一个单元格信息的结束符,并调用所述提取函数,获取该单元格信息的起始符与该单元格信息的结束符之间的单元格信息。
[0169]
可选地,在所述单元格内容的类型为非数字的情况下,将目标标识对应的单元格文本内容,作为所述单元格的内容;在所述单元格内容的类型为数字的情况下,将所述字符串作为所述单元格的内容,包括:
[0170]
触发所述sax调用所述提取函数,获取所述单元格的内容;
[0171]
其中,所述提取函数还用于:在所述单元格内容的类型为非数字的情况下,从所述标识中查找所述目标标识,并将所述目标标识对应的单元格文本,作为所述单元格的内容;在所述单元格内容的类型为数字的情况下,将所述字符串作为所述单元格的内容。
[0172]
可选地,sheeti.xml中还记录有行起始符和行结束符;
[0173]
在获取所述单元格的内容之后,还包括:
[0174]
基于所述单元格信息的起始符和单元格信息的结束符、以及所述行起始符和行结束符,排列提取到的所述单元格的内容。
[0175]
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0176]
在一个典型的配置中,设备包括一个或多个处理器(cpu)、存储器和总线。设备还可以包括输入/输出接口、网络接口等。
[0177]
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram),存储器包括至少一个存储芯片。存储器是计算机可读介质的示例。
[0178]
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0179]
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0180]
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0181]
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1