一種寫表格的方法及裝置的制造方法
【專利摘要】本申請公開了一種寫表格的方法,用以避免為了調用poi寫表格而耗費較多人力資源的問題。方法包括:確定待寫入表格的java類;根據確定的java類中的對象和對象的屬性值確定輸入poi的數據;調用poi將所述數據寫入表格。本申請還公開了一種寫表格的裝置。
【專利說明】
_種寫表格的方法及裝置
技術領域
[0001] 本申請涉及計算機技術領域,尤其涉及一種寫表格的方法及裝置。
【背景技術】
[0002] 現有技術中,基于java寫表格(一般指excel表格)可以通過poi來實現。poi 是Apache的開源項目,是針對OFFICE文檔的一種java應用程序編程接口(Application Programming Interface,API),使用該API可以實現對微軟的OFFICE文檔(包括excel表 格、word文檔和Power Point文檔)的各種操作。
[0003] 為了調用poi寫表格,需要編譯大量的java代碼,這些java代碼作為poi的輸入, 用于告知poi對于期望寫的表格的一些限定。具體而言,一些常見的限定包括:
[0004] 1、待寫入表格中的java類的特征--以便于poi根據該特征從各java類中找到 待寫入表格中的java類。其中,java類中包含java對象及java對象的屬性值。
[0005] 比如張三、李四、王五,等等,可以是java對象,而該些對象的屬性值,則比如可以 是"身高"、"體重"這些屬性的值。如張三的"身高"這一屬性的值" 180",李四的"體重"這 一屬性的值"70",等等。
[0006] 2、當java類中待寫入表格中的對象的屬性值為空時的默認值--以便于當java 類中待寫入表格中的某對象的屬性值為空時,P〇i能夠獲知后續應該將該默認值作為該對 象的屬性值寫入表格。
[0007] 3、屬性值在表格中所處位置--以便于poi將屬性值寫入表格中的規定位置,如 將某屬性值寫入第二列。
[0008] 4、表格單元格所使用的數據格式一一以便于poi根據該數據格式,對java類中的 不滿足該數據格式的屬性值進行格式轉換,比如將非字符串格式的屬性值轉換為字符串格 式的屬性值。
[0009] 5、表格單元格的展示樣式一一以便于poi根據該展示樣式,對java類中的屬性值 的展示樣式進行轉換,比如將2010-10-1這樣的展示樣式轉換為2010/10/1。
[0010] 6、表頭名稱 以便于P〇i在表頭輸入該名稱。
[0011] 以數據庫和上述限定作為P〇i的輸入,對P〇i進行調用,以P〇i依次實現:獲得要 寫入的表格、確定待寫入表格中的java類中的對象及對象的屬性值、利用確定到的對象及 其屬性值寫表格。
[0012] 上述現有技術存在的缺陷在于:為了調用poi,需要耗費較多人力資源進行大量 java代碼的編譯。
【發明內容】
[0013] 本申請實施例提供一種寫表格的方法,用以避免為了調用poi寫表格而耗費較多 人力資源的問題。
[0014] 本申請實施例還提供一種寫表格的裝置,用以避免為了調用poi寫表格而耗費較 多人力資源的問題。
[0015] 本申請實施例采用下述技術方案:
[0016] -種寫表格的方法,包括:確定待寫入表格的java類;根據確定的java類中的對 象和對象的屬性值確定輸入P〇i的數據;調用P〇i將所述數據寫入表格。
[0017] -種寫表格的裝置,包括:java類確定單元,用于確定待寫入表格的java類;數據 確定單元,用于根據java類確定單元確定的java類中的對象和對象的屬性值確定輸入poi 的數據;P〇i調用單元,用于調用P〇i將數據確定單元確定的所述數據寫入表格。
[0018] 本申請實施例采用的上述至少一個技術方案能夠達到以下有益效果:
[0019] 由于可以先確定待寫入表格的java類,并根據確定的java類中的對象和對象的 屬性值確定輸入P〇i的數據,從而無需再向P〇i輸入關于待寫入表格中的java類的特征的 限定。因此相比于現有技術,可以減少為了調用P〇i而需要編譯的java代碼的量,避免了 為了調用P〇i寫表格而耗費較多人力資源的問題。
【附圖說明】
[0020] 此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申 請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:
[0021] 圖1為本申請實施例1提供的一種寫表格的方法的實現流程圖;
[0022] 圖2為用以實現本申請實施例提供的寫表格的方法的一種excel生成引擎結構示 意圖;
[0023] 圖3為采用本申請實施例提供的excel生成引擎實現寫excel表格的流程圖;
[0024] 圖4為本申請實施例2提供的一種寫表格的裝置的具體結構示意圖。
【具體實施方式】
[0025] 為使本申請的目的、技術方案和優點更加清楚,下面將結合本申請具體實施例及 相應的附圖對本申請技術方案進行清楚、完整地描述。顯然,所描述的實施例僅是本申請一 部分實施例,而不是全部的實施例。基于本申請中的實施例,本領域普通技術人員在沒有做 出創造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
[0026] 以下結合附圖,詳細說明本申請各實施例提供的技術方案。
[0027] 實施例1
[0028] 為避免為了調用poi寫表格而耗費較多人力資源的問題,本申請實施例1首先提 供一種寫表格的方法。該方法的實現流程圖如圖1所示,包括下述步驟:
[0029] 步驟11,確定待寫入表格的java類;
[0030] 本申請實施例中,可以采用兩種方式實現確定待寫入表格的java類:
[0031] 第一種方式:通過解析對java類設置的注解,確定被注解了待寫入標識的java 類,作為待寫入表格的java類。
[0032] 采用第一種方式,需要預先對于待寫入表格的java類進行注解。
[0033] 具體注解方式可以為:為待寫入表格的java類注解一個待寫入標識。后續在對待 寫入表格的java類進行查詢時,就可以以該待寫入標識作為查詢關鍵詞,查詢被注解了該 標識的java類。
[0034] 需要說明的是,為盡可能減少調用poi寫表格耗費較多人力資源,除了對待寫入 表格的java類注解待寫入標識外,還可以進行其他注解。
[0035] 比如,還可以對各屬性值在表格中所處位置進行注解。具體而言,可以為java類 中不同屬性的值分別注解一個表格位置信息。其中,該表格位置信息用于表示屬性值在寫 入表格后在表格中所處的位置(比如表格的某列)。基于注解的表格位置信息,后續可以將 該表格位置信息作為P〇i的輸入之一,指示P〇i將相應的屬性值寫入該表格位置信息所表 示的表格位置。
[0036] 由于相對于編譯"屬性值在表格中所處位置"對應的java代碼而言,為java類注 解表格位置信息所耗費的人力資源較少,因此相對于現有技術,采用注解表格位置信息的 方式,在同樣能夠達到向P〇i指示屬性值所在表格位置的目的的同時,可以節省人力資源。
[0037] 此外,本申請實施例中還可以針對java類注解數據格式轉換腳本標識,后續若解 析出待寫入表格的某java類被注解了該標識,則可以根據該數據格式轉換腳本標識,調用 相應的數據格式轉換腳本對該java類中需轉換數據格式的屬性值進行轉換,得到轉換后 的屬性值。
[0038] 由于相對于編譯"表格單元格所使用的數據格式"對應的java代碼而言,為java 類注解數據格式轉換腳本標識所耗費的人力資源較少,因此相對于現有技術,采用注解數 據格式轉換腳本標識的方式,在同樣能夠達到對于需轉換數據格式的屬性值進行轉換的目 的的同時,可以節省人力資源。
[0039] 此外,本申請實施例中,還可以為待寫入表格的java類注解"表格單元格的展示 樣式"以及"當待寫入表格中的對象的屬性值為空時的默認值",以達到節省向poi指示該 些信息所需要的java代碼編譯資源。具體而言,一種注解代碼如下所示:
[0040]
[0041] 上述注解代碼的注解內容有:待寫入表格的java類、"日期"這一屬性的各屬性值 的展示樣式以及"當待寫入表格中的對象的屬性值為空時的默認值"。
[0042] 另一種注解代碼如下所示,該注解代碼用以實現對"屬性值在表格中所處位置"、 "數據格式轉換腳本標識"、"日期"這一屬性的各屬性值的展示樣式以及"當待寫入表格中 的對象的屬性值為空時的默認值"的注解:
[0043]
[0045] 上述代碼中,name用于配置生成的excel表格的表頭名稱;index用以指示屬性 值在寫入excel表格時位于第幾列;script表示用于對屬性值進行數據格式轉換的腳本, script可以采用groovy語法;dateFormat用于表示"日期"這一屬性的各屬性值的展示樣 式;nullValue用于表示"當待寫入表格中的對象的屬性值為空時的默認值"。
[0046] 第二種方式:確定用于描述待寫入表格的java類特征的可擴展標記語言 (Extensible Markup Language,xml)文件;根據從該xml文件解析出的java類特征,確定 具備該java類特征的java類,作為待寫入表格的java類。
[0047] 第二種方式適用于任何待寫入表格的對象,尤其適用于一些無法進行注解的java 類。
[0048] 需要說明的是,除待寫入表格的對象特征外,xml文件還可以用于描述其他一些信 息,如前文所述的可為java類注解的"屬性值在表格中所處位置"、"數據格式轉換腳本標 識"、"日期"這一屬性的各屬性值的展示樣式以及"當待寫入表格中的對象的屬性值為空時 的默認值",等等。
[0049] 具體而言,用于描述待寫入表格的java類特征的一種典型的xml文件的代碼如 下:
[0050]
[0052] 步驟12,根據確定的java類中的對象和對象的屬性值確定輸入poi的數據;
[0053] 在一種實施方式中,當確定的java類中的屬性值的數據格式無需進行轉換時,可 以直接將確定的java類中的對象和對象的屬性值確定為輸入poi的數據。
[0054] 而當確定的java類中的屬性值中包含需要進行格式轉換的屬性值時,可以先對 需要進行格式轉換的屬性值進行格式轉換,比如將其數據格式轉換為字符串,然后再將轉 換后的屬性值、確定的java類中的對象以及確定的java類中無需轉換數據格式的屬性值 確定為輸入poi的數據。
[0055] 在一種實施方式中,可以利用數據格式轉換腳本來實現對于屬性值的格式轉換。
[0056] 在一種實施方式中,當數據格式轉換腳本標識被設置在針對java類的注解中時, 可以確定注解中的該數據格式轉換腳本標識。進而,從確定的java類中的屬性值中確定需 轉換數據格式的屬性值后,可以根據該數據格式轉換腳本標識,調用相應的數據格式轉換 腳本對需轉換數據格式的屬性值進行轉換,得到轉換后的屬性值。最后,可以將轉換后的屬 性值、確定的java類中的對象以及確定的java類中的無需轉換數據格式的屬性值確定為 輸入poi的數據。
[0057] 步驟13,調用poi將確定出的輸入poi的數據寫入表格。
[0058] 在一種實施方式中,若針對java類注解了表格位置信息,則可以確定該表格位置 信息,并調用P〇i執行:將輸入P〇i的數據寫入表格中的由該表格位置信息所表示的位置。
[0059] 需要說明的是,實施例1所提供方法的各步驟的執行主體均可以是同一設備,或 者,該方法也由不同設備作為執行主體。比如,步驟11和步驟12的執行主體可以為設備1, 步驟13的執行主體可以為設備2 ;又比如,步驟11的執行主體可以為設備1,步驟12和步 驟13的執彳丁主體可以為設備2 ;等等。
[0060] 采用本申請實施例提供的上述方法,由于可以先確定待寫入表格的java類,并根 據確定的java類中的對象和對象的屬性值確定輸入poi的數據,從而無需再向poi輸入關 于待寫入表格中的java類特征的限定。因此相比于現有技術,可以減少為了調用poi而需 要編譯的java代碼的量,避免了為了調用poi寫表格而耗費較多人力資源的問題。
[0061] 在一種實施方式中,本申請實施例提供的上述方法可以由如圖2所示的excel生 成引擎實現。其中,該excel生成引擎包括注解模塊、屬性處理器模塊、流水類配置解析模 塊、poi模塊和groovy模塊。下文對各模塊各自的功能實現方式進行簡單介紹。
[0062] 注解模塊,用于對java類進行前文所述的各種注解,以及針對無法注解的java類 設置用于描述其特征等的xml文件 。
[0063] 屬性處理器模塊,內置有script處理器,該script處理器可以調用groovy腳本 對需要進行數據格式轉換的屬性值進行轉換。
[0064] poi模塊,即poi,用于實現將輸入該模塊的數據寫入到excel表格中。
[0065] groovy模塊,用于完成script處理器中各groovy腳本的編譯和運行,同時對每個 腳本產生的groovy對象進行緩存,避免重復的編譯操作。其中,不同的groovy腳本可以實 現對不同數據格式的屬性值進行數據格式轉化,從而實現將不同數據格式的屬性值均轉換 為某類型(如字符串)的屬性值。
[0066] 流水類配置解析模塊,用于對針對java類設置的各種注解進行解析。可能解析到 的注解比如可能有下述一種或多種:
[0067] 待寫入標識;
[0068] 屬性值在表格中所處位置;
[0069] 數據格式轉換腳本標識;
[0070] 表格單元格的展示樣式;
[0071] 當待寫入表格中的對象的屬性值為空時的默認值;
[0072] 表頭名稱。
[0073] 基于上述模塊的功能,在一種實施方式中,寫excel表格的過程可以如圖3所示, 包括:
[0074] 注解模塊為待寫入表格的java類注解待寫入標識、表格位置信息,此外,為需要 轉換數據格式的屬性值注解轉換相應的groovy腳本的標識。
[0075] 流水類配置解析模塊在接收到寫excel表格指令后,對注解模塊為java類設置 的注解進行解析,并根據解析結果,獲得具備待寫入標識的java類、并獲得表格位置信息, 以及groovy腳本的標識。針對需要轉換數據格式的屬性值而言,將該些屬性值和相應的 groovy腳本的標識發送給屬性處理器模塊。此外,將獲得的java類中的對象以及對象的沒 有被注解groovy腳本的標識的屬性值發送給poi模塊。
[0076] 屬性處理器模塊根據流水類配置解析模塊發送的屬性值和相應的groovy腳本的 標識,運行script處理器。具體運行方式為:觸發script處理器根據groovy腳本的標識, 請求groovy模塊通過運行相應的groovy腳本,完成對屬性值的數據格式轉換,得到轉換后 的屬性值并發送給poi模塊。
[0077] poi模塊將接收到的對象及其屬性值(包括無需進行數據格式轉換的屬性值,以 及轉換后的屬性值)寫入excel表格中,流程結束。
[0078] 實施例2
[0079] 出于與本申請實施例1相同的發明構思,本申請實施例2提供一種寫表格的裝置, 用以避免為了調用P〇i寫表格而耗費較多人力資源的問題。該裝置的具體結構示意圖如圖 4所示,包括java類確定單元41、數據確定單元42和Poi調用單元43。以下詳細介紹各單 元的功能實現方式。
[0080] java類確定單元41,用于確定待寫入表格的java類;
[0081] 數據確定單元42,用于根據java類確定單元41確定的java類中的對象和對象的 屬性值確定輸入P〇i的數據;
[0082] Poi調用單元43,用于調用poi將數據確定單元42確定的數據寫入表格。
[0083] 在一種實施方式中,java類確定單元41可以用于:通過解析對java類設置的注 解,確定被注解了待寫入標識的java類,作為待寫入表格的java類。
[0084] 在一種實施方式中,java類確定單元41可以用于:確定用于描述待寫入表格的 java類特征的可擴展標記語言xml文件;根據從xml文件中解析出的java類特征,確定具 備該java類特征的java類,作為待寫入表格的java類。
[0085] 在一種實施方式中,java類確定單元41還可以用于:確定注解在數據庫中的表格 位置信息。從而Poi調用單元43可用于:調用poi執行將數據確定單元42確定的數據寫 入表格中的由該表格位置信息所表示的位置。
[0086] 在一種實施方式中,java類確定單元41還可以用于:確定標注在數據庫中的數據 格式轉換腳本標識。從而數據確定單元42可以用于:從確定的屬性值中確定需轉換數據格 式的屬性值;根據數據格式轉換腳本標識,調用相應的數據格式轉換腳本對需轉換數據格 式的屬性值進行轉換,得到轉換后的屬性值;將確定的java類中的對象、轉換后的屬性值 以及確定的無需轉換數據格式的屬性值確定為輸入poi的數據。
[0087] 采用本申請實施例提供的上述裝置,由于可以先確定待寫入表格的java類,并根 據確定的java類中的對象和對象的屬性值確定輸入poi的數據,從而無需再向poi輸入關 于待寫入表格中的java類的特征的限定。因此相比于現有技術,可以減少為了調用poi而 需要編譯的java代碼的量,避免了為了調用poi寫表格而耗費較多人力資源的問題。
[0088] 本領域內的技術人員應明白,本發明的實施例可提供為方法、系統、或計算機程序 產品。因此,本發明可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實 施例的形式。而且,本發明可采用在一個或多個其中包含有計算機可用程序代碼的計算機 可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產 品的形式。
[0089] 本發明是參照根據本發明實施例的方法、設備(系統)、和計算機程序產品的流程 圖和/或方框圖來描述的。應理解可由計算機程序指令實現流程圖和/或方框圖中的每一 流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合。可提供這些計算 機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數據處理設備的處理 器以產生一個機器,使得通過計算機或其他可編程數據處理設備的處理器執行的指令產生 用于實現在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能 的裝置。
[0090] 這些計算機程序指令也可存儲在能引導計算機或其他可編程數據處理設備以特 定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指 令裝置的制造品,該指令裝置實現在流程圖一個流程或多個流程和/或方框圖一個方框或 多個方框中指定的功能。
[0091] 這些計算機程序指令也可裝載到計算機或其他可編程數據處理設備上,使得在計 算機或其他可編程設備上執行一系列操作步驟以產生計算機實現的處理,從而在計算機或 其他可編程設備上執行的指令提供用于實現在流程圖一個流程或多個流程和/或方框圖 一個方框或多個方框中指定的功能的步驟。
[0092] 在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、 網絡接口和內存。
[0093] 內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/ 或非易失性內存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內存是計算機可讀介質 的示例。
[0094] 計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法 或技術來實現信息存儲。信息可以是計算機可讀指令、數據結構、程序的模塊或其他數據。 計算機的存儲介質的例子包括,但不限于相變內存(PRAM)、靜態隨機存取存儲器(SRAM)、 動態隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電 可擦除可編程只讀存儲器(EEPR0M)、快閃記憶體或其他內存技術、只讀光盤只讀存儲器 (CD-ROM)、數字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁 性存儲設備或任何其他非傳輸介質,可用于存儲可以被計算設備訪問的信息。按照本文中 的界定,計算機可讀介質不包括暫存電腦可讀媒體(transitory media),如調制的數據信 號和載波。
[0095] 還需要說明的是,術語"包括"、"包含"或者其任何其他變體意在涵蓋非排他性的 包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包 括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要 素。在沒有更多限制的情況下,由語句"包括一個……"限定的要素,并不排除在包括所述 要素的過程、方法、商品或者設備中還存在另外的相同要素。
[0096] 本領域技術人員應明白,本申請的實施例可提供為方法、系統或計算機程序產品。 因此,本申請可采用完全硬件實施例、完全軟件實施例或結合軟件和硬件方面的實施例的 形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存 儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形 式。
[0097] 以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領域技術人員 來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內所作的任何修改、等同 替換、改進等,均應包含在本申請的權利要求范圍之內。
【主權項】
1. 一種寫表格的方法,其特征在于,包括: 確定待寫入表格的java類; 根據確定的java類中的對象和對象的屬性值確定輸入poi的數據; 調用P〇i將所述數據寫入表格。2. 如權利要求1所述的方法,其特征在于,確定待寫入表格的java類,包括: 通過解析對java類設置的注解,確定被注解了待寫入標識的java類,作為所述待寫入 表格的java類。3. 如權利要求1所述的方法,其特征在于,確定待寫入表格的java類,包括: 確定用于描述待寫入表格的java類特征的可擴展標記語言xml文件; 根據從所述xml文件中解析出的java類特征,確定具備該java類特征的java類,作 為待寫入表格的java類。4. 如權利要求1所述的方法,其特征在于,所述方法還包括:確定表格位置信息;則 調用P〇i將所述數據寫入表格,包括: 調用P〇i執行將所述數據寫入所述表格中的由所述表格位置信息所表示的位置。5. 如權利要求1所述的方法,其特征在于,所述方法還包括:確定數據格式轉換腳本標 識;則 根據確定的java類中的對象和對象的屬性值確定輸入poi的數據,包括: 從確定的屬性值中確定需轉換數據格式的屬性值; 根據數據格式轉換腳本標識,調用相應的數據格式轉換腳本對所述需轉換數據格式的 屬性值進行轉換,得到轉換后的屬性值; 將確定的java類中的對象、轉換后的屬性值以及確定的無需轉換數據格式的屬性值 確定為輸入poi的數據。6. -種寫表格的裝置,其特征在于,包括: java類確定單元,用于確定待寫入表格的java類; 數據確定單元,用于根據java類確定單元確定的java類中的對象和對象的屬性值確 定輸入P〇i的數據; Poi調用單元,用于調用poi將數據確定單元確定的所述數據寫入表格。7. 如權利要求6所述的裝置,其特征在于,java類確定單元用于: 通過解析對java類設置的注解,確定被注解了待寫入標識的java類,作為所述待寫入 表格的java類。8. 如權利要求6所述的裝置,其特征在于,java類確定單元用于: 確定用于描述待寫入表格的java類特征的可擴展標記語言xml文件; 根據從所述xml文件中解析出的java類特征,確定具備該java類特征的java類,作 為待寫入表格的java類。9. 如權利要求6所述的裝置,其特征在于,java類確定單元還用于:確定注解在所述數 據庫中的表格位置信息;則 Poi調用單元,用于調用poi執行將所述數據寫入所述表格中的由所述表格位置信息 所表示的位置。10. 如權利要求6所述的裝置,其特征在于,java類確定單元還用于:確定數據格式轉 換腳本標識;則 數據確定單元,用于: 從確定的屬性值中確定需轉換數據格式的屬性值; 根據數據格式轉換腳本標識,調用相應的數據格式轉換腳本對所述需轉換數據格式的 屬性值進行轉換,得到轉換后的屬性值; 將確定的java類中的對象、轉換后的屬性值以及確定的無需轉換數據格式的屬性值 確定為輸入P〇i的數據。
【文檔編號】G06F17/24GK105867886SQ201510026011
【公開日】2016年8月17日
【申請日】2015年1月19日
【發明人】陳明
【申請人】阿里巴巴集團控股有限公司