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