專利名稱::一種顯示表格數(shù)據(jù)的方法和裝置的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)據(jù)處理
技術(shù)領(lǐng)域:
,尤其涉及一種顯示表格數(shù)據(jù)的方法和裝置。
背景技術(shù):
:隨著信息技術(shù)的發(fā)展,表格數(shù)據(jù)處理技術(shù)廣泛應(yīng)用于計劃、財務(wù)和統(tǒng)計等行業(yè)。使用表格數(shù)據(jù)處理技術(shù),可以將大量的數(shù)據(jù)以表格的形式輸出,極大地方便了對數(shù)據(jù)的顯示和處理。表格數(shù)據(jù)可以分為簡單表數(shù)據(jù)和復(fù)雜表數(shù)據(jù),其中,簡單表數(shù)據(jù)的結(jié)構(gòu)平整,數(shù)據(jù)行中沒有數(shù)據(jù)集合的嵌套關(guān)系。例如Table(Array(Numberl=>l,Number2=>2,Number3=〉3,Number4=>4,Number5=>5,Number6=>6),Array(Numberl=>l,Number2=>2,Number3=〉3,Number4=〉4,Number5=>5,Number6=>6))如表l所示,為上述筒單表數(shù)據(jù)的顯示表格。表1筒單表數(shù)據(jù)的顯示表格Number1Number2Number3Number4Number5Number61246123456復(fù)雜表數(shù)據(jù)與非簡單數(shù)組相對應(yīng),表結(jié)構(gòu)的數(shù)據(jù)行中存在2層或2層以上的嵌套關(guān)系。如下表數(shù)據(jù)所示,每行數(shù)據(jù)有3層嵌套層次。Table"Name"=>"Jenney","WorkHours,,=>Array("Day"=>Array("Monday,,=>6,"Tuesday"=>6,"Wednesday,,=>6:"Thursday,,=>6,"Friday,,=>6),"Actural,,=>30,"Plan"=>40),"Team"=>"A"),Array("Name"=>"Paul",,,WorkHours,,=>Array"Day"=〉A(chǔ)rray("Monday"=〉6,"Tuesday,,=〉6,"Wednesday"=>6,"Thursday"=>6,"Friday,,=>6),"Actural"=>30,"Plan"=>40),"Team"=>,,A"),Array"Name"=>"Mike",,,WorkHours,,=>Array("Day,,=〉A(chǔ)rray("Monday"=>8,"Tuesday"=>8,"Wednesday"=>8,"Thursday"=〉8,"Friday"=>8),"Actural"=>40,"Plan"=>40),"Team"=>"B"),Array("Name"=>"Tracy"',WorkHours,,=>Array"Day,,=>Array("Monday,,=>8,"Tuesday"=>8,"Wednesday,,=>8,"Thursday"=>8,"Friday"=>8),"Actural"=>40,"Plan"=>40),"Team"=〉"B"))如表2所示,為上述復(fù)雜表數(shù)據(jù)的顯示表沖各。表2復(fù)雜表數(shù)據(jù)的顯示表格<table>tableseeoriginaldocumentpage7</column></row><table>現(xiàn)有技術(shù)中,對于復(fù)雜表數(shù)據(jù)的處理,一方面,傳統(tǒng)的方法可以先確定數(shù)據(jù)組成結(jié)構(gòu)或應(yīng)用場景,再設(shè)計模板,最后在需要顯示數(shù)據(jù)的時候,向模板中套入數(shù)據(jù)來完成顯示;另一方面,使用微軟.Net開發(fā)包,可以將任意XML(ExtensibleMarkupLanguage,可擴展標記語言)格式的數(shù)據(jù)轉(zhuǎn)化為Dataset對象,該對象包含了若干個表格,每個表格為一個筒單數(shù)據(jù)表,通過多個表格來呈現(xiàn)XML數(shù)據(jù),可以顯示復(fù)雜數(shù)據(jù)。發(fā)明人在實現(xiàn)本發(fā)明的過程中,發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下缺陷傳統(tǒng)的設(shè)計模版的做法只能適應(yīng)于單一場景,在應(yīng)用場景或數(shù)據(jù)格式需要改變的時候,需要人工重新調(diào)整模板,并通過人工檢查測試來確認是否有錯誤,該過程繁瑣、低效、欠缺靈活性;而使用微軟.Net開發(fā)包的方法,有時會將數(shù)據(jù)拆成多個表格顯示,無法實現(xiàn)將數(shù)據(jù)顯示到同一個表格中的目的,且該方法不開放源代碼,只能用于.Net環(huán)境,不便于學習和移植。
發(fā)明內(nèi)容本發(fā)明提供了一種顯示表格數(shù)據(jù)的方法和裝置,提高了顯示數(shù)據(jù)表格的效率。.本發(fā)明提供了一種顯示表格數(shù)據(jù)的方法,包括以下步驟從表格數(shù)據(jù)中提取數(shù)據(jù)行數(shù)組,將所述數(shù)據(jù)行數(shù)組轉(zhuǎn)換為內(nèi)部不存在嵌套關(guān)系的平整數(shù)據(jù);遍歷所述數(shù)據(jù)行數(shù)組中的表頭元素,獲取所述表頭元素之間的對應(yīng)關(guān)系,根據(jù)所述對應(yīng)關(guān)系顯示表頭和所述表頭對應(yīng)的平整數(shù)據(jù),所述表頭由所述表頭元素構(gòu)成。本發(fā)明還提供了一種顯示表格數(shù)據(jù)的裝置,包括轉(zhuǎn)換模塊,用于從表格數(shù)據(jù)中提取數(shù)據(jù)行數(shù)組,將所述數(shù)據(jù)行數(shù)組轉(zhuǎn)換為內(nèi)部不存在嵌套關(guān)系的平整數(shù)據(jù);獲取模塊,用于遍歷所述數(shù)據(jù)行數(shù)組中的表頭元素,獲取所述表頭元素之間的對應(yīng)關(guān)系;顯示模塊,用于根據(jù)所述獲取模塊獲取的所述對應(yīng)關(guān)系顯示表頭和所述表頭對應(yīng)的所述轉(zhuǎn)換模塊得到的所述平整數(shù)據(jù),所述表頭由所述表頭元素構(gòu)成。本發(fā)明在從表格數(shù)據(jù)到用戶界面顯示的過程中,使用自適應(yīng)的表格顯示算法,脫離模板的限制,自適應(yīng)地生成表頭結(jié)構(gòu),將數(shù)據(jù)的復(fù)雜層次關(guān)系清楚地顯示在表頭中,而數(shù)據(jù)部分平整顯示,減少了操作人員對數(shù)據(jù)的掃描時間,在業(yè)務(wù)數(shù)據(jù)的顯示工作中,省掉了傳統(tǒng)工作中必須手工進行的先驗數(shù)據(jù)組成和編寫修改模板的步驟,大幅度地提高了生產(chǎn)效率。為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對本發(fā)明或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明中的一種顯示表^f各數(shù)據(jù)的方法流程圖2為本發(fā)明中的一種顯示表格數(shù)據(jù)的具體應(yīng)用場景流程圖3為本發(fā)明中的節(jié)點樹結(jié)構(gòu)示意圖4為本發(fā)明中的一種顯示表格數(shù)據(jù)的裝置結(jié)構(gòu)示意圖5為本發(fā)明中的另一種顯示表格數(shù)據(jù)的裝置結(jié)構(gòu)示意圖。具體實施例方式本發(fā)明提供的技術(shù)方案中,其核心思想為通過智能分析,自動組合出合適的表頭,把嵌套復(fù)雜的數(shù)據(jù)行調(diào)整為簡單平整的數(shù)據(jù)行,輸出顯示;另外,還可以配置文件,自動為特別關(guān)鍵字或者特別層次自動套用顯示風格。下面將結(jié)合本發(fā)明中的附圖,對本發(fā)明的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。如圖1所示,為本發(fā)明中的一種顯示表格數(shù)據(jù)的方法流程圖,包括以下步驟步驟IOI,從表格數(shù)據(jù)中提取數(shù)據(jù)行數(shù)組,將該數(shù)據(jù)行數(shù)組轉(zhuǎn)換為內(nèi)部不存在嵌套關(guān)系的平整數(shù)據(jù)。具體地,可以遍歷數(shù)據(jù)行數(shù)組中的數(shù)據(jù)元素,如果該數(shù)據(jù)元素的類型不是數(shù)組類型,則將該數(shù)據(jù)元素保存到結(jié)果數(shù)組;如果該數(shù)據(jù)元素的類型是數(shù)組類型,則遞歸遍歷該數(shù)據(jù)元素中的子數(shù)據(jù)元素,直到遞歸結(jié)束,將結(jié)果數(shù)組中保存的數(shù)據(jù)作為數(shù)據(jù)行數(shù)組對應(yīng)的平整數(shù)據(jù)。從表格數(shù)據(jù)中提取數(shù)據(jù)行數(shù)組之后,還可以獲取該數(shù)據(jù)行數(shù)組對應(yīng)的驗證字符串,使用該驗證字符串驗證表格數(shù)據(jù)是否符合格式要求,如果表格數(shù)據(jù)不符合格式要求,則報錯或者將該表格數(shù)據(jù)作為表格的一行數(shù)據(jù)處理。步驟102,遍歷數(shù)據(jù)行數(shù)組中的表頭元素,獲取表頭元素之間的對應(yīng)關(guān)系,根據(jù)該對應(yīng)關(guān)系顯示表頭和表頭對應(yīng)的平整數(shù)據(jù)。具體地,可以建立表頭元素對應(yīng)的節(jié)點對象;」換照表頭元素之間的對應(yīng)關(guān)系和節(jié)點對象構(gòu)造節(jié)點樹,通過該節(jié)點樹記錄節(jié)點對象的輸出參數(shù);逐層遍歷節(jié)點樹,根據(jù)輸出參數(shù)顯示表頭,該表頭由表頭元素構(gòu)成。其中,節(jié)點對象中存儲父節(jié)點的指針和子節(jié)點的指針,父節(jié)點的指針用于計算節(jié)點對象的輸出參數(shù),子節(jié)點的指針用于遍歷節(jié)點對象所在的節(jié)點樹。本發(fā)明在從表格數(shù)據(jù)到用戶界面顯示的過程中,使用自適應(yīng)的表格顯示算法,脫離模板的限制,自適應(yīng)地生成表頭結(jié)構(gòu),將數(shù)據(jù)的復(fù)雜層次關(guān)系清楚地顯示在表頭中,而數(shù)據(jù)部分平整顯示,減少了操作人員對數(shù)據(jù)的掃描時間,在業(yè)務(wù)數(shù)據(jù)的顯示工作中,省掉了傳統(tǒng)工作中必須手工進行的先驗數(shù)據(jù)組成和編寫修改模板的步驟,大幅度地提高了生產(chǎn)效率。如圖2所示,為本發(fā)明中的一種顯示表格數(shù)據(jù)的具體應(yīng)用場景流程圖,包括以下步驟步驟201,從表格數(shù)據(jù)中提取數(shù)據(jù)行數(shù)組,將該數(shù)據(jù)行數(shù)組作為復(fù)雜數(shù)據(jù)處理,同時兼容簡單平整的數(shù)據(jù)格式。具體地,調(diào)用Travel方法,遍歷數(shù)據(jù)行數(shù)組中的數(shù)據(jù)元素,如果數(shù)據(jù)行數(shù)組的數(shù)據(jù)元素的類型不是數(shù)組類型,則將數(shù)據(jù)行數(shù)組的數(shù)據(jù)元素作為筒單元素輸出到結(jié)果數(shù)組RetAry中;如果數(shù)據(jù)行數(shù)組的數(shù)據(jù)元素的類型是數(shù)組類型,則將該數(shù)據(jù)元素作為輸入?yún)?shù),遞歸調(diào)用Travel方法,遍歷數(shù)據(jù)元素中的子數(shù)據(jù)元素。遞歸調(diào)用結(jié)束后,數(shù)據(jù)行數(shù)組的所有數(shù)據(jù)元素均被遍歷一遍,RetAry存儲有數(shù)據(jù)行數(shù)組對應(yīng)的平整數(shù)據(jù)。步驟202,獲取數(shù)據(jù)行數(shù)組對應(yīng)的Ukey(唯一4建),并使用Ukey驗證表格數(shù)據(jù)的合法性。其中,Ukey用于描述數(shù)據(jù)行數(shù)組的組成結(jié)構(gòu)的字符串,如果兩個數(shù)據(jù)行數(shù)組具有相同的表頭結(jié)構(gòu),則具有相同的Ukey,Ukey初始化為空字符串。具體地,深度優(yōu)先遞歸遍歷數(shù)據(jù)行數(shù)組,每訪問到數(shù)據(jù)行數(shù)組的元素,則將該元素的鍵值添加到Ukey的尾部,該元素的鍵值對應(yīng)PHP(HypertextPreprocessor,超級文本預(yù)處理語言)中的每一個元素。訪問到數(shù)組時,將該數(shù)組的鍵值啦文為前綴傳入遞歸方法,將該數(shù)組下的子元素鍵值組合作為深層元素的鍵值加入到字符串尾部。例如,遍歷表2對應(yīng)的數(shù)據(jù)行數(shù)組后,可以如下所示的獲取Ukey:"Name-WorkHours[Day[Monday-Tuesday-Wednesday-Thursday-Friday]-Actrual-Pl肌]-T謹"。其中,"-"表示兄弟節(jié)點關(guān)系,"[]"表示對應(yīng)一個數(shù)組元素,"[]"內(nèi)為數(shù)組元素的成員的鍵值。Ukey可以采用不同的算法計算得到,能夠唯一標識數(shù)據(jù)內(nèi)容之間的不同,例如,可以通過計算每行數(shù)據(jù)的MD5(Message-digestAlgorithm5,信息-摘要算法)值獲得Ukey。由于算法是建立在輸入數(shù)據(jù)符合一定格式的基礎(chǔ)上的,即輸入?yún)?shù)為一個數(shù)組類型,且輸入?yún)?shù)的每個子元素也是一個數(shù)組類型,因此,需要校驗用戶的輸入?yún)?shù)是否符合要求,如果不符合要求,則報錯或者進行特殊處理,例如,可以將整個數(shù)據(jù)作為表格的一行數(shù)據(jù)處理。表格數(shù)據(jù)的驗證方法包括提取表格數(shù)據(jù)中的一個數(shù)據(jù)行數(shù)組的Ukey作為參照標準,比較其他數(shù)據(jù)行數(shù)組是否具有相同的Ukey,如果比較結(jié)果為是,則該表格數(shù)據(jù)符合要求,否則,該表格數(shù)據(jù)不符合要求。步驟203,獲取數(shù)據(jù)行數(shù)組中的表頭元素之間的對應(yīng)關(guān)系,并根據(jù)該對應(yīng)關(guān)系輸出數(shù)據(jù)行數(shù)組對應(yīng)的表頭和平整數(shù)據(jù)。其中,表頭元素用于在界面上顯示表格,為數(shù)據(jù)嵌套關(guān)系的直接體現(xiàn)。具體地,可以提取表格數(shù)據(jù)中的數(shù)據(jù)行數(shù)組作為采樣值,深度遍歷數(shù)據(jù)行數(shù)組,每訪問到一個表頭元素時,建立該表頭元素對應(yīng)的一個節(jié)點對象,并按照數(shù)據(jù)行數(shù)組原有的層次關(guān)系構(gòu)造由節(jié)點對象組成的節(jié)點樹,該節(jié)點樹記錄如何輸出表頭的關(guān)鍵參數(shù),包括colspan值和rowspan值;逐層遍歷節(jié)點樹,將colspan值和rowspan值輸出到HTMLtable標簽的語法結(jié)構(gòu)中,便可實現(xiàn)表頭的正確顯示。其中,節(jié)點樹中的每個節(jié)點對象存儲有對應(yīng)的父節(jié)點和子節(jié)點的指針,每一層的節(jié)點通過父節(jié)點的信息和自身所對應(yīng)的元素的信息,計算自己的關(guān)鍵參數(shù)值;子節(jié)點的指針用于遍歷該節(jié)點對象所在的節(jié)點樹。關(guān)鍵參數(shù)rowspan和colspan的計算分為以下兩種情況當前節(jié)點沒有子節(jié)點,即不是凄l(xiāng)纟且類型元素時,colspan=l,rowspan-樹高-當前元素的層高+1,其中,樹高為樹中各節(jié)點所具有的最大層高,各節(jié)點的層高為該節(jié)點到HeadNode的最短路徑長度;當前節(jié)點有子節(jié)點,即為數(shù)組類型時,rowspan=l,colspan—斤有子節(jié)點的colspan值的總和,colspan值在每次有新節(jié)點掛靠到節(jié)點樹時均會獲得更新。如圖3所示,為本發(fā)明中的節(jié)點樹結(jié)構(gòu)示意圖,該節(jié)點樹對應(yīng)數(shù)據(jù)行數(shù)組array(al=>a,a2=>army(M=>b,b2=>c),a3=>d),節(jié)點樹中的節(jié)點的建立順序為HeadNode,al,a2,bl,b2,a3,節(jié)點樹的深度為2,HeadNode的層高為0,節(jié)點al、a2和a3的層高為1,其余節(jié)點的層高2。其中,節(jié)點al沒有子節(jié)點,colspan=l,rowspan—對深度-層高+l,即為2-1+1=2;節(jié)點a2有子節(jié)點,rowspan=1,colspan值初始化為0,當節(jié)點b1掛靠節(jié)點a2時,節(jié)點a2作為節(jié)點bl的父節(jié)點,colspan值會被更新,節(jié)點a2的各個子節(jié)點的colspan值相加,即為節(jié)點a2的colspan值;當節(jié)點b2掛靠節(jié)點a2時,節(jié)點a2的colspan值再次被更新,即為節(jié)點bl的colspan值和節(jié)點b2的colspan值之和,即為2。節(jié)點a3和節(jié)點al節(jié)點的情況與上述情況類似,在此不再贅述。如表3所示,為圖3中的節(jié)點樹對應(yīng)輸出的表格,其中,colspan值和rowspan值作為額外加入的信息值,不包含在表頭內(nèi)。表3節(jié)點樹對應(yīng)輸出的表格<table>tableseeoriginaldocumentpage12</column></row><table>n=2)=2)需要說明的是,本發(fā)明方法可以根據(jù)實際需要對各個步驟順序進行調(diào)整。本發(fā)明在從表格數(shù)據(jù)到用戶界面顯示的過程中,使用自適應(yīng)的表格顯示算法,脫離模板的限制,自適應(yīng)地生成表頭結(jié)構(gòu),將數(shù)據(jù)的復(fù)雜層次關(guān)系清楚地顯示在表頭中,而數(shù)據(jù)部分平整顯示,減少了操作人員對數(shù)據(jù)的掃描時間,在業(yè)務(wù)數(shù)據(jù)的顯示工作中,省掉了傳統(tǒng)工作中必須手工進行的先驗數(shù)據(jù)組成和編寫修改模板的步驟,特別在數(shù)據(jù)結(jié)構(gòu)不唯一、變化多的情況下,使得開發(fā)過程的時間耗費從一般性的幾天降到只需要寫不到5行代碼,幾乎為0時間耗費,大幅度地提高了生產(chǎn)效率,避免了開發(fā)。另外,以PHP代碼實現(xiàn),兼容性好,可以移植到其他編程語言中,數(shù)據(jù)輸入采用數(shù)組的形式,輸入數(shù)據(jù)可以為JSON、XML或普通數(shù)組格式的數(shù)據(jù),輸出界面可以為網(wǎng)頁、Excel或者文本文檔等,適用于于任何和HTML(HyperTextMark-upLanguage,超文本標記語言)、XML及文本語言等可以表現(xiàn)為表格的場景,并且具有非常好的可移植性,可以應(yīng)用于各種程序開發(fā)語言中,不會把數(shù)據(jù)分拆為多個表格,顯示更加全面,省去了切換顯示表格的麻煩,更容易表現(xiàn)數(shù)據(jù)的嵌套關(guān)系。如圖4所示,為本發(fā)明中的一種顯示表格數(shù)據(jù)的裝置結(jié)構(gòu)示意圖,包括轉(zhuǎn)換模塊410,用于從表格數(shù)據(jù)中提取數(shù)據(jù)行數(shù)組,將所述數(shù)據(jù)行數(shù)組轉(zhuǎn)換為內(nèi)部不存在嵌套關(guān)系的平整數(shù)據(jù)。上述轉(zhuǎn)換模塊410,具體用于遍歷所述數(shù)據(jù)行數(shù)組中的數(shù)據(jù)元素,如果所述數(shù)據(jù)元素的類型不是數(shù)組類型,則將所述數(shù)據(jù)元素保存到結(jié)果數(shù)組;如果所述數(shù)據(jù)元素的類型是數(shù)組類型,則遞歸遍歷所述數(shù)據(jù)元素中的子數(shù)據(jù)元素,直到遞歸結(jié)束,將所述結(jié)果數(shù)組中保存的數(shù)據(jù)作為所述數(shù)據(jù)行數(shù)組對應(yīng)的平整數(shù)據(jù)。獲取模塊420,用于遍歷所述數(shù)據(jù)行數(shù)組中的表頭元素,獲取所述表頭元素之間的對應(yīng)關(guān)系。顯示模塊430,用于根據(jù)獲取模塊420獲取的所述對應(yīng)關(guān)系顯示表頭和所述表頭對應(yīng)的轉(zhuǎn)換模塊410得到的所述平整數(shù)據(jù),所述表頭由所述表頭元素構(gòu)成。上述顯示模塊430,具體用于建立所述表頭元素對應(yīng)的節(jié)點對象;按照所述表頭元素之間的對應(yīng)關(guān)系和所述節(jié)點對象構(gòu)造節(jié)點樹,通過所述節(jié)點樹記錄所述節(jié)點對象的輸出參數(shù);逐層遍歷所述節(jié)點樹,根據(jù)所述輸出參數(shù)顯示所述表頭。其中,節(jié)點對象中存儲父節(jié)點的指針和子節(jié)點的指針,所述父節(jié)點的指針用于計算所述節(jié)點對象的輸出參數(shù),所述子節(jié)點的指針用于遍歷所述節(jié)點對象所在的節(jié)點樹。本發(fā)明在從表格數(shù)據(jù)到用戶界面顯示的過程中,使用自適應(yīng)的表格顯示算法,脫離模板的限制,自適應(yīng)地生成表頭結(jié)構(gòu),將數(shù)據(jù)的復(fù)雜層次關(guān)系清楚地顯示在表頭中,而數(shù)據(jù)部分平整顯示,減少了操作人員對數(shù)據(jù)的掃描時間,在業(yè)務(wù)數(shù)據(jù)的顯示工作中,省掉了傳統(tǒng)工作中必須手工進行的先驗數(shù)據(jù)組成和編寫修改模板的步驟,大幅度地提高了生產(chǎn)效率。如圖5所示,為本發(fā)明中的另一種顯示表格數(shù)據(jù)的裝置結(jié)構(gòu)示意圖,包括轉(zhuǎn)換模塊510,用于從表格數(shù)據(jù)中提取數(shù)據(jù)行數(shù)組,將該數(shù)據(jù)行數(shù)組作為復(fù)雜數(shù)據(jù)處理,同時兼容簡單平整的數(shù)據(jù)格式。具體地,轉(zhuǎn)換模塊510調(diào)用Travel方法,遍歷數(shù)據(jù)行數(shù)組中的數(shù)據(jù)元素,如果數(shù)據(jù)行數(shù)組的數(shù)據(jù)元素的類型不是數(shù)組類型,則將數(shù)據(jù)行數(shù)組的數(shù)據(jù)元素作為簡單元素輸出到結(jié)果數(shù)組RetAry中;如果數(shù)據(jù)行數(shù)組的數(shù)據(jù)元素的類型是數(shù)組類型,則將該數(shù)據(jù)元素作為輸入?yún)?shù),遞歸調(diào)用Travel方法,遍歷數(shù)據(jù)元素中的子數(shù)據(jù)元素。遞歸調(diào)用結(jié)束后,數(shù)據(jù)行數(shù)組的所有數(shù)據(jù)元素均被遍歷一遍,RetAry存儲有數(shù)據(jù)行數(shù)組對應(yīng)的平整數(shù)據(jù)。驗證模塊520,用于獲取數(shù)據(jù)行數(shù)組對應(yīng)的驗證字符串;使用所述驗證字符串驗證所述表格數(shù)據(jù)是否符合格式要求,如果所述表格數(shù)據(jù)不符合格式要求,則報錯或者將所述表格數(shù)據(jù)作為表格的一行數(shù)據(jù)處理。具體地,驗證模塊520獲取數(shù)據(jù)行數(shù)組對應(yīng)的Ukey(唯一鍵),并使用Ukey驗證表格數(shù)據(jù)的合法性。其中,Ukey用于描述數(shù)據(jù)行數(shù)組的組成結(jié)構(gòu)的字符串,如果兩個數(shù)據(jù)行數(shù)組具有相同的表頭結(jié)構(gòu),則具有相同的Ukey,Ukey初始化為空字符串。驗證模塊520深度優(yōu)先遞歸遍歷數(shù)據(jù)行數(shù)組,每訪問到數(shù)據(jù)行數(shù)組的元素,則將該元素的鍵值添加到Ukey的尾部,該元素的鍵值對應(yīng)PHP(HypertextPreprocessor,超級文本預(yù)處理語言)中的每一個元素。訪問到凄t組時,將該數(shù)組的鍵值做為前綴傳入遞歸方法,將該數(shù)組下的子元素鍵值組合作為深層元素的鍵值加入到字符串尾部。例如,遍歷表2對應(yīng)的數(shù)據(jù)行數(shù)組后,可以如下所示的獲取Ukey:Plan]-Team"。其中,"-"表示兄弟節(jié)點關(guān)系,"[]"表示對應(yīng)一個數(shù)組元素,"[]"內(nèi)為數(shù)組元素的成員的鍵值。Ukey可以采用不同的算法計算得到,能夠唯一標識數(shù)據(jù)內(nèi)容之間的不同,例如,可以通過計算每行數(shù)據(jù)的MD5值獲得Ukey。由于算法是建立在輸入數(shù)據(jù)符合一定格式的基礎(chǔ)上的,即輸入?yún)?shù)為一個數(shù)組類型,且輸入?yún)?shù)的每個子元素也是一個數(shù)組類型,因此,需要校驗用戶的輸入?yún)?shù)是否符合要求,如果不符合要求,則報錯或者進行特殊處理,例如,可以將整個數(shù)據(jù)作為表格的一行數(shù)據(jù)處理。表格數(shù)據(jù)的驗證方法包括提取表格數(shù)據(jù)中的一個數(shù)據(jù)行數(shù)組的Ukey作為參照標準,比較其他數(shù)據(jù)行數(shù)組是否具有相同的Ukey,如果比較結(jié)果為是,則該表格數(shù)據(jù)符合要求,否則,該表格數(shù)據(jù)不符合要求。獲取模塊530,用于遍歷所述數(shù)據(jù)行數(shù)組中的表頭元素,獲取所述表頭元素之間的對應(yīng)關(guān)系。顯示模塊540,用于根據(jù)獲取模塊530獲取的所述對應(yīng)關(guān)系顯示表頭和所述表頭對應(yīng)的轉(zhuǎn)換模塊510得到的所述平整數(shù)據(jù),所述表頭由所述表頭元素構(gòu)成。其中,表頭元素用于在界面上顯示表格,為數(shù)據(jù)嵌套關(guān)系的直接體現(xiàn)。具體地,可以提取表格數(shù)據(jù)中的數(shù)據(jù)行數(shù)組作為采樣值,深度遍歷數(shù)據(jù)行數(shù)組,每訪問到一個表頭元素時,建立該表頭元素對應(yīng)的一個節(jié)點對象,并按照數(shù)據(jù)行數(shù)組原有的層次關(guān)系構(gòu)造由節(jié)點對象組成的節(jié)點樹,該節(jié)點樹記錄如何輸出表頭的關(guān)鍵參數(shù),包括colspan值和rowspan值;逐層遍歷節(jié)點樹,將colspan值和rowspan值輸出到HTMLtable標簽的語法結(jié)構(gòu)中,便可實現(xiàn)表頭的正確顯示。其中,節(jié)點樹中的每個節(jié)點對象存儲有對應(yīng)的父節(jié)點和子節(jié)點的指針,每一層的節(jié)點通過父節(jié)點的信息和自身所對應(yīng)的元素的信息,計算自己的關(guān)鍵參數(shù)值;子節(jié)點的指針用于遍歷該節(jié)點對象所在的節(jié)點樹。關(guān)鍵參數(shù)rowspan和colspan的計算分為以下兩種情況當前節(jié)點沒有子節(jié)點,即不是數(shù)組類型元素時,colspan=l,rowspar^樹高-當前元素的層高+l,其中,樹高為樹中各節(jié)點所具有的最大層高,各節(jié)點的層高為該節(jié)點到HeadNode的最短路徑長度;當前節(jié)點有子節(jié)點,即為數(shù)組類型時,rowspan=l,colspan-所有子節(jié)點的colspan值的總和,colspan值在每次有新節(jié)點掛靠到節(jié)點樹時均會獲得更新。參照圖3中的節(jié)點樹結(jié)構(gòu),該節(jié)點樹對應(yīng)數(shù)據(jù)行數(shù)組array(al=>a,a2=>array(M=>b,b2=>c),a3=>d),節(jié)點樹中的節(jié)點的建立順序為HeadNode,al,a2,bl,b2,a3,節(jié)點樹的深度為2,HeadNode的層高為0,節(jié)點al、a2和a3的層高為1,其余節(jié)點的層高2。其中,節(jié)點al沒有子節(jié)點,colspan=l,rowspan-樹深度-層高+l,即為2-1+1=2;節(jié)點a2有子節(jié)點,rowspan=l,colspan值初始化為0,當節(jié)點bl掛靠節(jié)點a2時,節(jié)點a2作為節(jié)點bl的父節(jié)點,colspan值會被更新,節(jié)點a2的各個子節(jié)點的colspan值相力口,即為節(jié)點a2的colspan值;當節(jié)點b2掛靠節(jié)點a2時,節(jié)點a2的colspan值再次被更新,即為節(jié)點bl的colspan值和節(jié)點b2的colspan值之和,即為2。節(jié)點a3和節(jié)點al節(jié)點的情況與上述情況類似,在此不再贅述。圖3中的節(jié)點樹對應(yīng)輸出的表格,如表3所示。其中,colspan值和rowspan值作為額外加入的信息值,不包含在表頭內(nèi)。本發(fā)明在從表格數(shù)據(jù)到用戶界面顯示的過程中,使用自適應(yīng)的表格顯示算法,脫離模板的限制,自適應(yīng)地生成表頭結(jié)構(gòu),將數(shù)據(jù)的復(fù)雜層次關(guān)系清楚地顯示在表頭中,而數(shù)據(jù)部分平整顯示,減少了操作人員對數(shù)據(jù)的掃描時間,在業(yè)務(wù)數(shù)據(jù)的顯示工作中,省掉了傳統(tǒng)工作中必須手工進行的先驗數(shù)據(jù)組成和編寫修改模板的步驟,特別在數(shù)據(jù)結(jié)構(gòu)不唯一、變化多的情況下,使得開發(fā)過程的時間耗費從一般性的幾天降到只需要寫不到5行代碼,幾乎為0時間耗費,大幅度地提高了生產(chǎn)效率,避免了開發(fā)。另外,以PHP代碼實現(xiàn),兼容性好,可以移植到其他編程語言中,數(shù)據(jù)輸入采用數(shù)組的形式,輸入數(shù)據(jù)可以為JSON、XML或普通數(shù)組格式的數(shù)據(jù),輸出界面可以為網(wǎng)頁、Excel或者文本文檔等,適用于于任何和HTML、XML及文本語言等可以表現(xiàn)為表格的場景,并且具有非常好的可移植性,可以應(yīng)用于各種程序開發(fā)語言中,不會把數(shù)據(jù)分拆為多個表格,顯示更加全面,省去了切換顯示表格的麻煩,更容易表現(xiàn)數(shù)據(jù)的嵌套關(guān)系。通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當指出,對于本
技術(shù)領(lǐng)域:
的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若千改進和潤飾,這些改進和潤飾也應(yīng)視本發(fā)明的保護范圍。本領(lǐng)域技術(shù)人員可以理解實施例中的裝置中的模塊可以按照實施例描述進行分布于實施例的裝置中,也可以進行相應(yīng)變化位于不同于本實施例的一個或多個裝置中。上述實施例的模塊可以集成于一體,也可以分離部署;可以合并為一個模塊,也可以進一步拆分成多個子模塊。上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。以上公開的僅為本發(fā)明的幾個具體實施例,但是,本發(fā)明并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本發(fā)明的保護范圍。權(quán)利要求1、一種顯示表格數(shù)據(jù)的方法,其特征在于,包括以下步驟從表格數(shù)據(jù)中提取數(shù)據(jù)行數(shù)組,將所述數(shù)據(jù)行數(shù)組轉(zhuǎn)換為內(nèi)部不存在嵌套關(guān)系的平整數(shù)據(jù);遍歷所述數(shù)據(jù)行數(shù)組中的表頭元素,獲取所述表頭元素之間的對應(yīng)關(guān)系,根據(jù)所述對應(yīng)關(guān)系顯示表頭和所述表頭對應(yīng)的平整數(shù)據(jù),所述表頭由所述表頭元素構(gòu)成。2、如權(quán)利要求l所述的方法,其特征在于,所述將數(shù)據(jù)行轉(zhuǎn)換為內(nèi)部不存在嵌套關(guān)系的平整數(shù)據(jù),具體包括遍歷所述數(shù)據(jù)行數(shù)組中的數(shù)據(jù)元素,如果所述數(shù)據(jù)元素的類型不是數(shù)組類型,則將所述數(shù)據(jù)元素保存到結(jié)果數(shù)組;如果所述數(shù)據(jù)元素的類型是數(shù)組類型,則遞歸遍歷所述數(shù)據(jù)元素中的子數(shù)據(jù)元素,直到遞歸結(jié)束,將所述結(jié)果數(shù)組中保存的數(shù)據(jù)作為所述數(shù)據(jù)行數(shù)組對應(yīng)的平整數(shù)據(jù)。3、如權(quán)利要求l所述的方法,其特征在于,所述從表格數(shù)據(jù)中提取數(shù)據(jù)行數(shù)組之后,還包括獲取所述數(shù)據(jù)行數(shù)組對應(yīng)的驗證字符串;使用所述驗證字符串驗證所述表格數(shù)據(jù)是否符合格式要求,如果所述表格數(shù)據(jù)不符合格式要求,則報錯或者將所*格數(shù)據(jù)作為表格的一行數(shù)據(jù)處理。4、如權(quán)利要求l所述的方法,其特征在于,所述獲取表頭元素之間的對應(yīng)關(guān)系,根據(jù)對應(yīng)關(guān)系顯示表頭,具體包括建立所述表頭元素對應(yīng)的節(jié)點對象;按照所述表頭元素之間的對應(yīng)關(guān)系和所述節(jié)點對象構(gòu)造節(jié)點樹,通過所述節(jié)點樹記錄所述節(jié)點對象的輸出參數(shù);逐層遍歷所述節(jié)點樹,根據(jù)所述輸出參數(shù)顯示所述表頭。5、如權(quán)利要求4所述的方法,其特征在于,所述節(jié)點對象中存儲父節(jié)點的指針和子節(jié)點的指針,所述父節(jié)點的指針用于計算所述節(jié)點對象的輸出參數(shù),所述子節(jié)點的指針用于遍歷所述節(jié)點對象所在的節(jié)點樹。6、一種顯示表4各數(shù)據(jù)的裝置,其特征在于,包括轉(zhuǎn)換模塊,用于從表格數(shù)據(jù)中提取數(shù)據(jù)行數(shù)組,將所述數(shù)據(jù)行數(shù)組轉(zhuǎn)換為內(nèi)部不存在嵌套關(guān)系的平整數(shù)據(jù);獲取模塊,用于遍歷所述數(shù)據(jù)行數(shù)組中的表頭元素,獲取所述表頭元素之間的對應(yīng)關(guān)系;顯示模塊,用于根據(jù)所述獲取模塊獲取的所述對應(yīng)關(guān)系顯示表頭和所述表頭對應(yīng)的所述轉(zhuǎn)換才莫塊得到的所述平整數(shù)據(jù),所述表頭由所ii^頭元素構(gòu)成。7、如權(quán)利要求6所述的裝置,其特征在于,所述轉(zhuǎn)換才莫塊,具體用于遍歷所述數(shù)據(jù)行數(shù)組中的數(shù)據(jù)元素,如果所述數(shù)據(jù)元素的類型不是數(shù)組類型,則將所述數(shù)據(jù)元素保存到結(jié)果數(shù)組;如果所述數(shù)據(jù)元素的類型是數(shù)組類型,則遞歸遍歷所述數(shù)據(jù)元素中的子數(shù)據(jù)元素,直到遞歸結(jié)束,將所述結(jié)果數(shù)組中保存的數(shù)據(jù)作為所述數(shù)據(jù)行數(shù)組對應(yīng)的平整數(shù)據(jù)。8、如權(quán)利要求6所述的裝置,其特征在于,還包括驗證模塊,用于獲取所述數(shù)據(jù)行數(shù)組對應(yīng)的驗證字符串;使用所述驗證字符串驗證所述表格數(shù)據(jù)是否符合格式要求,如果所述表格數(shù)據(jù)不符合格式要求,則報錯或者將所述表格數(shù)據(jù)作為表格的一行數(shù)據(jù)處理。9、如權(quán)利要求6所述的裝置,其特征在于,所述顯示模塊,具體用于建立所述表頭元素對應(yīng)的節(jié)點對象;按照所述表頭元素之間的對應(yīng)關(guān)系和所述節(jié)點對象構(gòu)造節(jié)點樹,通過所述節(jié)點樹記錄所述節(jié)點對象的輸出^l丈;逐層遍歷所述節(jié)點樹,根據(jù)所述輸出參數(shù)顯示所述表頭。10、如權(quán)利要求9所述的裝置,其特征在于,所述節(jié)點對象中存儲父節(jié)點的指針和子節(jié)點的指針,所述父節(jié)點的指針用于計算所述節(jié)點對象的輸出參數(shù),所述子節(jié)點的指針用于遍歷所述節(jié)點對象所在的節(jié)點樹。全文摘要本發(fā)明公開了一種顯示表格數(shù)據(jù)的方法,包括以下步驟從表格數(shù)據(jù)中提取數(shù)據(jù)行數(shù)組,將所述數(shù)據(jù)行數(shù)組轉(zhuǎn)換為內(nèi)部不存在嵌套關(guān)系的平整數(shù)據(jù);遍歷所述數(shù)據(jù)行數(shù)組中的表頭元素,獲取所述表頭元素之間的對應(yīng)關(guān)系,根據(jù)所述對應(yīng)關(guān)系顯示表頭和所述表頭對應(yīng)的平整數(shù)據(jù),所述表頭由所述表頭元素構(gòu)成。本發(fā)明自適應(yīng)地生成表頭結(jié)構(gòu),將數(shù)據(jù)的復(fù)雜層次關(guān)系清楚地顯示在表頭中,而數(shù)據(jù)部分平整顯示,大幅度地提高了生產(chǎn)效率。本發(fā)明同樣公開了一種應(yīng)用上述方法的裝置。文檔編號G06F17/30GK101620636SQ200910162948公開日2010年1月6日申請日期2009年8月21日優(yōu)先權(quán)日2009年8月21日發(fā)明者云段申請人:騰訊科技(北京)有限公司