Excel文檔的數(shù)據(jù)解析方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別涉及一種Excel文檔的數(shù)據(jù)解析方法及裝置。
【背景技術(shù)】
[0002]Microsoft Excel是微軟公司的辦公軟件Microsoft office的組件之一,而Microsoft off ice自版本2007開始,使用了不同于以往版本(使用二進制文件格式)的Office Open XML文件格式。新的文件格式的容器是基于簡單的部件的壓縮的ZIP文件格式,這些部件包括描述應(yīng)用程序數(shù)據(jù)、元數(shù)據(jù)、以及自定義數(shù)據(jù)的XML文件,以及描述部件間的關(guān)系、文檔中嵌入的圖片或OLE對象的二進制文件等非XML文件,在新的Office Open XML格式的核心使用一些XML的引用架構(gòu)和一個ZIP容器。以新建的后綴名為xlsx的空白Excel文檔為例,將其解壓縮后,一級目錄下形成了文件夾_rels,xl以及docProps,還有文件[Content_Types].xml,各文件夾下還包括各種XML文件及非XML文件。
[0003]現(xiàn)有對ExceI文檔(工作簿)中的數(shù)據(jù)進行解析以讀取ExceI文檔中的數(shù)據(jù)的方法大致有以下兩種:第一,使用特定的系統(tǒng)提供的API (Appl i cat 1n ProgrammingInterface,應(yīng)用程序編程接口)解析Excel文檔,然后將數(shù)據(jù)導(dǎo)入其系統(tǒng)中;第二,通過調(diào)用一些較成熟的開源軟件的API解析Excel文檔,較流行的是調(diào)用Apache提供的POI(the JavaAPI for Microsoft Documents)的API解析Excel文檔。這兩種方法都存在著不可避免的缺陷:第一種解析方法只能解析特定格式的Excel文檔,故而不能普遍適用;第二種解析方法無法應(yīng)對較大的Excel文檔,原因在于第二種方法在解析時將整個文檔都加載到內(nèi)存中,可能會造成內(nèi)存溢出而使得無法繼續(xù)解析Excel文檔數(shù)據(jù)。因此,亟需提供一種更普遍適用和高效的數(shù)據(jù)解析方法。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的在于提供一種普遍適用和高效的Excel文檔的數(shù)據(jù)解析方法。
[0005]本發(fā)明的另一目的在于提供一種普遍適用和高效的Excel文檔的數(shù)據(jù)解析裝置。
[0006]為實現(xiàn)上述目的,本發(fā)明提供了一種Excel文檔的數(shù)據(jù)解析方法,包括:
[0007]步驟10、獲取需要解析的ExceI文檔的文件流;
[0008]步驟20、解析該文件流,獲取該文件流中關(guān)于工作簿和工作表的信息;
[0009]步驟30、利用多線程分別讀取各工作表對應(yīng)的xml文件;
[0010]步驟40、解析該文件流中的共享數(shù)據(jù)xml文件,找出與各工作表對應(yīng)的共享數(shù)據(jù)的存儲位置并利用多線程分別讀??;
[0011]步驟50、結(jié)合各工作表對應(yīng)的xml文件以及各工作表對應(yīng)的共享數(shù)據(jù)利用多線程分別進行解析以獲取該Excel文檔的數(shù)據(jù)。
[0012I其中,所述文件流為zip格式。
[0013]其中,所述信息包括工作簿的信息以及工作表和文件流內(nèi)的xml文件的映射關(guān)系。
[0014]其中,所述各工作表對應(yīng)的xml文件依據(jù)文件流信息中工作表和xml文件的映射關(guān)系得到。
[0015]其中,所述方法進一步包括對解析獲取的該Excel文檔的數(shù)據(jù)進行還原的步驟。
[0016]為實現(xiàn)上述目的,本發(fā)明還提供了一種ExceI文檔的數(shù)據(jù)解析裝置,包括:
[0017]文件流模塊,其獲取需要解析的ExceI文檔的文件流;
[0018]文件流信息解析模塊,其解析該文件流,獲取該文件流中關(guān)于工作簿和工作表的信息;
[0019]工作表讀取模塊,其利用多線程分別讀取各工作表對應(yīng)的xml文件;
[0020]共享數(shù)據(jù)解析模塊,其解析該文件流中的共享數(shù)據(jù)xml文件,找出與各工作表對應(yīng)的共享數(shù)據(jù)的存儲位置并利用多線程分別讀?。?br>[0021 ] Excel文檔數(shù)據(jù)解析模塊,其結(jié)合各工作表對應(yīng)的xml文件以及各工作表對應(yīng)的共享數(shù)據(jù)利用多線程分別進行解析以獲取該Excel文檔的數(shù)據(jù)。
[0022]其中,所述文件流為zip格式。
[0023]其中,所述信息包括工作簿的信息以及工作表和文件流內(nèi)的xml文件的映射關(guān)系。
[0024]其中,所述各工作表對應(yīng)的xml文件依據(jù)文件流信息中工作表和xml文件的映射關(guān)系得到。
[0025]其中,所述裝置進一步還對解析獲取的該Excel文檔的數(shù)據(jù)進行還原。
[0026]綜上所述,本發(fā)明的Excel文檔的數(shù)據(jù)解析方法及裝置普遍適用各種格式的Excel文檔,而且可以應(yīng)對較大的Excel文檔,提高了數(shù)據(jù)解析效率。
【附圖說明】
[0027]圖1為本發(fā)明Excel文檔的數(shù)據(jù)解析方法一較佳實施例的流程圖。
【具體實施方式】
[0028]下面結(jié)合附圖,通過對本發(fā)明的【具體實施方式】詳細描述,將使本發(fā)明的技術(shù)方案及其有益效果顯而易見。
[0029]參照圖1,其為本發(fā)明Excel文檔的數(shù)據(jù)解析方法一較佳實施例的流程圖。該方法主要包括:
[0030]步驟10、獲取需要解析的ExceI文檔的文件流。在本步驟中,文件流為zip格式,根據(jù)Office Open XML文件格式的規(guī)定,在zip格式的文件流內(nèi)至少包含描述應(yīng)用程序數(shù)據(jù)、元數(shù)據(jù)以及自定義數(shù)據(jù)的xml文件等。
[0031]步驟20、解析該文件流,獲取該文件流中關(guān)于工作簿和工作表的信息。主要包括通過解析zip格式文件流內(nèi)的兩個相關(guān)的文件流,讀取文件流中工作薄(workbook)和工作表(worksheet或sheet)的信息。通過關(guān)于工作簿的信息可了解Excel文檔的概況,通過關(guān)于工作表的信息可了解工作表和文件流內(nèi)的xml文件的映射關(guān)系,具體來說可通過文件流中諸如workbook.xml等文件獲得這些信息。
[0032]步驟30、利用多線程分別讀取各工作表對應(yīng)的xml文件。
[0033]待解析的各工作表對應(yīng)的xml文件可依據(jù)文件流信息中工作表和xml文件的映射關(guān)系得到。采用多線程分別讀取的方式可以提高處理效率。
[0034]步驟40、解析該文件流中的共享數(shù)據(jù)xml文件,找出與各工作表對應(yīng)的共享數(shù)據(jù)的存儲位置并利用多線程分別讀取。解析過程中,可以根據(jù)共享數(shù)據(jù)xml文件中存儲數(shù)據(jù)的位置及與各工作表的關(guān)系確定各工作表對應(yīng)的數(shù)據(jù)。
[0035]共享數(shù)據(jù)xml文件用于存儲所有工作表共享的數(shù)據(jù),各工作表共享的數(shù)據(jù)通常是存儲在特定的共享數(shù)據(jù)xml文件中,一般具體為八1/81^代(151:1';[1^8.11111,也就是11目錄下的sharedStrings.xml。如果不采用這一步驟,在解析某個工作表的數(shù)據(jù)時,除了要解析對應(yīng)的xml文件的數(shù)據(jù),同時還需要加載解析sharedStrings.xml中對應(yīng)該工作表的數(shù)據(jù)才能完整獲得該工作表的數(shù)據(jù),此時sharedStrings.xml中對應(yīng)其他工作表的數(shù)據(jù)也同時被加載解析,而且對于每個工作表來說都需要重復(fù)加載解析sharedStrings.xml,對內(nèi)存使用要求高且拖慢解析速度,同時使得利用多個線程解析各工作表對應(yīng)xml文件時每個線程都需要訪問sharedStrings.xml,使多線程處理方式變得復(fù)雜,甚至可能抵消采用多線程所帶來