專利名稱:一種XML文檔轉(zhuǎn)換為Excel文檔的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于文檔應(yīng)用領(lǐng)域,具體涉及一種XML文檔轉(zhuǎn)換為Excel文檔的方法及裝置。
背景技術(shù):
隨著電腦的不斷普及,無紙化辦公得到越來越多的應(yīng)用,各種各樣的文檔也大量 的出現(xiàn)在用戶的面前。Microsoft Excel是微軟公司的辦公軟件Microsoft off ice的組件之一,是由 Microsoft為Windows和Apple Macintosh操作系統(tǒng)的電腦而編寫和運行的一款試算表軟 件。Excel是微軟辦公套裝軟件的一個重要的組成部分,它可以進行各種數(shù)據(jù)的處理、 統(tǒng)計分析和輔助決策操作,廣泛地應(yīng)用于管理、統(tǒng)計財經(jīng)、金融等眾多領(lǐng)域。現(xiàn)在業(yè)界比較流行的幾種XML格式文件轉(zhuǎn)換為Excel格式文件的方案包括方案一、調(diào)用某些數(shù)據(jù)庫軟件提供的API接口生成Excel報表;方案二、通過調(diào)用MS-Excel的自動化Com接口創(chuàng)建Excel報表和數(shù)據(jù)的寫入,生 成的次序是建立WorkBook、Worksheet和寫入數(shù)據(jù);方案三、通過調(diào)用一些較成熟的開源文檔編輯軟件的接口實現(xiàn)MS-Excel基本信 息的寫入,較流行的是調(diào)用OpenOffice的應(yīng)用程序編程接口(Application Programming Interface, API)接口來實現(xiàn)Excel文檔的生成。方案一的缺點由于大部分?jǐn)?shù)據(jù)庫軟件僅僅提供一些將已知數(shù)據(jù)轉(zhuǎn)換為基本表格 的功能,當(dāng)碰到單元格合并、表頭設(shè)置和數(shù)據(jù)類型設(shè)置的情況會無能無力。這種表格不支持 公式運算,不符合用戶直接編輯運算的需要,用戶體驗比較差。方案二的缺點=MS-Excel的Com接口對配置環(huán)境和輸入數(shù)據(jù)的格式要求較高,在 頻繁多次調(diào)用的情況下,經(jīng)常會出現(xiàn)程序掛掉的情況。而且每輸入一個單元(Cell)數(shù)據(jù)都 會涉及到一次Com調(diào)用,所以此方案的效率較低。而且占用系統(tǒng)資源較多,造成機器負(fù)載較重。方案三的缺點由于XlS文件的內(nèi)部格式?jīng)]有公開,所以當(dāng)今一些主流的開源軟 件對其支持的并不完美,經(jīng)常會造成元素丟失和排版混亂的情況。如何在生成Excel文檔時減少對Com接口的調(diào)用,提高Com調(diào)用的效率和穩(wěn)定性, 降低資源占有量,是文檔應(yīng)用領(lǐng)域的方向之一。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種XML文檔轉(zhuǎn)換為Excel文檔的方法,目的在于在生成 Excel文檔時減少對Com接口的調(diào)用,提高Com調(diào)用的效率和穩(wěn)定性,降低資源占有量。本發(fā)明實施例是這樣實現(xiàn)的,一種XML文檔轉(zhuǎn)換為Excel文檔的方法,所述方法包 括以下步驟
4
讀取XML文件中的基本元素信息;將讀取的XML文件中的基本元素信息按照Excel的排版格式進行排版,獲取一排 版結(jié)果;按照上述排版結(jié)果生成XML2003文檔;調(diào)用電子表格工具MS-Excel的Com接口將生成的XML2003文檔轉(zhuǎn)換為Excel文 檔。本發(fā)明實施例的另一目的在于提供一種XML文檔轉(zhuǎn)換為Excel文檔的裝置,所述 裝置包括XML信息讀取模塊,用于讀取XML文件中的基本元素信息;排版模塊,用于將所述XML信息讀取模塊讀取的XML文件中的基本元素信息按照 Excel的排版格式進行排版,獲取一排版結(jié)果;文檔生成模塊,用于按照上述排版結(jié)果生成XML2003文檔;Excel文檔轉(zhuǎn)換模塊,用于調(diào)用電子表格工具MS-Excel的Com接口將生成的 XML2003文檔轉(zhuǎn)換為Excel文檔。本發(fā)明按照Excel文件的內(nèi)容和排版生成相同的XML2003文件,完后在后臺調(diào)用 MS-Excel的Com接口一次性的將XML2003文件轉(zhuǎn)換為Excel文件,在生成一個Excel文檔 的過程中只需要一次Com調(diào)用,最大程度上規(guī)避了 Com調(diào)用的低效性和不穩(wěn)定性,降低了資
源占有量。
圖1為本發(fā)明實施例提供的XML文檔轉(zhuǎn)換為Excel文檔的方法的流程圖;圖2為本發(fā)明實施例提供的XML文檔轉(zhuǎn)換為Excel文檔的裝置的結(jié)構(gòu)圖。
具體實施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對 本發(fā)明進行進一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不 用于限定本發(fā)明。圖1示出了本發(fā)明實施例提供的XML文檔轉(zhuǎn)換為Excel文檔的方法的流程。在步驟SlOl中,讀取XML文件中的基本元素信息;在步驟S102中,將讀取的XML文件中的基本元素信息按照Excel的排版格式進行 排版,獲取一排版結(jié)果;在步驟S103中,按照步驟S102中的排版結(jié)果生成XML2003文檔;在步驟S104中,調(diào)用電子表格工具MS-Excel的Com接口將生成的XML2003文檔 轉(zhuǎn)換為Excel文檔。其中,所述步驟SlOl具體描述如下首先讀取可擴展標(biāo)記語言(Extensible Markup Language, XML)文件工作簿 WorkBook的基本信息,包括作者屬性和文檔生成日期等,然后讀取XML文件各個工作表 Worksheet的信息,最后是讀取Worksheet中的文本信息和文本屬性信息等。其中,所述步驟S102具體描述如下
5
步驟A、將文本拆分,增加其參與計算的能力;譬如一個基本文本內(nèi)容為132. 22008/03/22,如果將其放置于一個Cell中,此 文本將只具有文本屬性,沒有了數(shù)字和日期的屬性,但是如果將其拆開放置于兩個單元 (Cell)中的話,那么一個Cell具有數(shù)字屬性,另外一個Cell將具有日期屬性。此步驟A的過程為首先判斷本文本塊是否被表格線分開,如果此文本塊被一表 格線穿過,那么就在穿過位置將此文本塊分為兩塊文本,其次以本文本塊的大小為輸入動 態(tài)確定一個閥值,如果文本塊中的兩文本間距大于此閥值,則將此文本塊分開。步驟B、將步驟A處理后的文本進行表格識別;如果通過特征識別識別到了表格就將表格單獨輸出處理,如果沒有識別到表格就 對本頁中所有的文本元素進行整體排版。此步驟B的過程為首先區(qū)分不同表格的表格線,將不同表格的表格線置于不同 的閉包中,其次是按照表格線的位置將文本塊放置在不同的表格中。步驟C、識別Cell的線條屬性和背景顏色屬性。步驟D、識別文本的類型信息;此處主要識別數(shù)字、百分號、日期、時間、貨幣、分?jǐn)?shù) 和科學(xué)計數(shù)等信息。其中,所述步驟S103具體包括a、生成XML2003文檔工作簿W(wǎng)orkBook的文件頭信息,此信息主要包括了文件作 者、創(chuàng)建時間、版本號和是否加密等信息;b、生成XML2003文檔單元格樣式列表;此列表代表整個工作簿W(wǎng)orkBook中單元格的所有樣式,在輸入任何一個單元格 的時候都要遍歷此樣式列表,查詢是否該單元格樣式在此單元格中存在,如果存在則返回 該樣式在列表中的索引值,如果不存在則在列表中新建該樣式的索引并將新建的索引值返 回。C、生成 XML2003 文檔工作表 Worksheet。每個Worksheet代表Excel中的一頁,在創(chuàng)建一個Worksheet的時候需要創(chuàng)建 Column信息、Row信息禾口 Cell信息。首先創(chuàng)建Column列表,每個Column代表Worksheet中的一列,主要需要創(chuàng)建列 寬、是否固定列寬和創(chuàng)建列的索引等幾部分;其次需要創(chuàng)建Row列表,每個Row代表Worksheet中的一行,主要需要創(chuàng)建行高、 是否固定行高和行的索引等幾部分;之后是建立Cell對象,Cell對象為Worksheet中最基本的單元,此步驟分為兩個 部分,一是合并單元格,二是輸入單元格的信息合并單元格主要需要確定在水平和垂直方向上需要合并的基本單元格數(shù)目,通過 比較本單元格占據(jù)的區(qū)域大小,以及將基本單元格在水平和垂直方向上進行比較,可以確 定在水平和垂直方向上需要合并的單元格數(shù)目。在得到合并區(qū)域后,通過設(shè)置Cell的合并 標(biāo)識符,即可達到合并單元格的效果;單元格的信息輸入包括以下幾個步驟一是單元格的樣式設(shè)置,通過將此單元格 的樣式和WorkBook的樣式列表進行比較,如果此樣式在列表中存在,則返回其索引值,如 果不存在則在列表中新建該樣式并返回索引值,得到索引值后將此索引值設(shè)置到Cell的屬性列表中;二是單元格的文本排版,首先需要控制單元格中文本的位置屬性,主要包括居 中、靠左、靠右等幾種樣式,其次是需要定位文本的位置,水平方向上是使用空格來進行定 位,垂直方向上是使用空行來進行定位;三是文本屬性的設(shè)置,主要包括文本類型的設(shè)置、 文本顏色和字體字號的設(shè)置。其中,所述步驟S104具體包括i、初始化Com環(huán)境;ii、調(diào)用Com模塊中的工作簿對象WorkBookPtr將XML2003文件導(dǎo)入;iii、查詢注冊表得到用戶安裝的Excel版本信息在根據(jù)該版本信息按照規(guī)則生 成對應(yīng)版本的Excel文檔,生成的規(guī)則是如果用戶安裝了 Exce 12002和Exce 12003則生成 xls格式文檔,如果用戶安裝了 EXcel2007和EXcel2010則生成xlsx格式文檔;iv、刪除 XML2003 文件。本發(fā)明通過直接生成XML2003中間文件,規(guī)避了頻繁的Com調(diào)用,提高了文檔生成 的效率和穩(wěn)定性。而且文檔數(shù)據(jù)識別為特定類型,可以進行公式運算,提高了用戶的效率。 且本發(fā)明中調(diào)用MS-Excel的另存方法,在后臺實現(xiàn)XML2003文檔到Excel文檔的轉(zhuǎn)換,可 以支持各種版本Excel文件的生成。圖2示出了本發(fā)明實施例提供的XML文檔轉(zhuǎn)換為Excel文檔的裝置的結(jié)構(gòu),所述 裝置包括XML信息讀取模塊21、排版模塊22、文檔生成模塊23以及Excel文檔轉(zhuǎn)換模塊 24。其中,XML信息讀取模塊21,用于讀取XML文件中的基本元素信息;排版模塊22,用于將所述XML信息讀取模塊讀取的XML文件中的基本元素信息按 照Excel的排版格式進行排版,獲取一排版結(jié)果;文檔生成模塊23,用于按照上述排版結(jié)果生成XML2003文檔;Excel文檔轉(zhuǎn)換模塊24,用于調(diào)用電子表格工具MS-Excel的Com接口將生成的 XML2003文檔轉(zhuǎn)換為Excel文檔。具體的,所述XML信息讀取模塊21包括工作簿信息讀取模塊211和工作表信息讀 取模塊212 工作簿信息讀取模塊211,用于讀取工作簿W(wǎng)orkBook的基本信息;工作表信息讀取模塊212,用于讀取各個工作表Worksheet的信息,以及讀取各個 工作表Worksheet中的文本信息和文本屬性信息。所述排版模塊22具體包括文本拆分模塊221和識別模塊222 文本拆分模塊221,用于將文本拆分;識別模塊222,用于將拆分后的文本進行表格識別,以及識別文本類型信息。所述文檔生成模塊23具體包括文件頭信息生成模塊231和列表生成模塊232 文件頭信息生成模塊231,用于生成工作簿W(wǎng)orkBook的文件頭信息;列表生成模塊232,用于生成單元格樣式列表,以及生成工作表Worksheet。所述Excel文檔轉(zhuǎn)換模塊24具體包括接口初始化模塊241、文件導(dǎo)入模塊242、 Excel文檔生成模塊243以及XML文件刪除模塊244 接口初始化模塊241,用于初始化Com接口 ;文件導(dǎo)入模塊242,用于調(diào)用Com模塊中的WorkBookPtr對象將XML2003文件導(dǎo)
7入;Excel文檔生成模塊243,用于完后查詢注冊表得到用戶安裝的Excel版本信息, 根據(jù)該版本信息按照規(guī)則生成對應(yīng)版本的Excel文檔;XML文件刪除模塊244,用于刪除XML2003文件。本發(fā)明按照Excel文件的內(nèi)容和排版生成相同的XML2003文件,完后在后臺調(diào)用 MS-Excel的Com接口一次性的將XML2003文件轉(zhuǎn)換為Excel文件,在生成一個Excel文檔 的過程中只需要一次Com調(diào)用,最大程度上規(guī)避了 Com調(diào)用的低效性和不穩(wěn)定性,降低了資
源占有量。應(yīng)當(dāng)理解的是,對本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)上述說明加以改進或變換, 而這些改進和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護范圍。
8
權(quán)利要求
一種XML文檔轉(zhuǎn)換為Excel文檔的方法,其特征在于,所述方法包括以下步驟讀取XML文件中的基本元素信息;將讀取的XML文件中的基本元素信息按照Excel的排版格式進行排版,獲取一排版結(jié)果;按照上述排版結(jié)果生成XML2003文檔;調(diào)用電子表格工具MS Excel的Com接口將生成的XML2003文檔轉(zhuǎn)換為Excel文檔。
2.如權(quán)利要求1所述的XML文檔轉(zhuǎn)換為Excel文檔的方法,其特征在于,所述讀取XML 文件中的基本元素信息步驟具體包括讀取XML文件中工作簿W(wǎng)orkBook的基本信息;讀取XML文件中各個工作表Worksheet的信息;讀取XML文件中各個工作表Worksheet中的文本信息和文本屬性信息。
3.如權(quán)利要求1所述的XML文檔轉(zhuǎn)換為Excel文檔的方法,其特征在于,所述將讀取的 XML文件中的基本元素信息按照Excel的排版格式進行排版的步驟具體包括將XML文件中的文本拆分; 將拆分后的文本進行表格識別; 識別文本類型信息。
4.如權(quán)利要求1所述的XML文檔轉(zhuǎn)換為Excel文檔的方法,其特征在于,所述按照排版 結(jié)果生成XML2003文檔的步驟具體包括生成XML2003文檔的工作簿W(wǎng)orkBook的文件頭信息; 生成XML2003文檔的單元格樣式列表; 生成XML2003文檔的工作表Worksheet。
5.如權(quán)利要求1所述的XML文檔轉(zhuǎn)換為Excel文檔的方法,其特征在于,所述調(diào)用電 子表格工具MS-Excel的Com接口將生成的XML2003文檔轉(zhuǎn)換為Excel文檔的步驟具體包 括初始化Com接口 ;調(diào)用Com模塊中的工作簿對象WorkBookPtr將XML2003文件導(dǎo)入; 查詢注冊表得到用戶安裝的Excel版本信息,根據(jù)該版本信息生成對應(yīng)版本的Excel 文檔;刪除XML2003文件。
6.一種XML文檔轉(zhuǎn)換為Excel文檔的裝置,其特征在于,所述裝置包括 XML信息讀取模塊,用于讀取XML文件中的基本元素信息;排版模塊,用于將所述XML信息讀取模塊讀取的XML文件中的基本元素信息按照Excel 的排版格式進行排版,獲取一排版結(jié)果;文檔生成模塊,用于按照上述排版結(jié)果生成XML2003文檔;Excel文檔轉(zhuǎn)換模塊,用于調(diào)用電子表格工具MS-Excel的Com接口將生成的XML2003 文檔轉(zhuǎn)換為Excel文檔。
7.如權(quán)利要求6所述的XML文檔轉(zhuǎn)換為Excel文檔的裝置,其特征在于,所述XML信息 讀取模塊具體包括工作簿信息讀取模塊,用于讀取XML文件中工作簿W(wǎng)orkBook的基本信息;工作表信息讀取模塊,用于讀取XML文件中各個工作表Worksheet的信息,以及讀取各 個工作表Worksheet中的文本信息和文本屬性信息。
8.如權(quán)利要求6所述的XML文檔轉(zhuǎn)換為Excel文檔的裝置,其特征在于,所述排版模塊 具體包括文本拆分模塊,用于將文本拆分;識別模塊,用于將拆分后的文本進行表格識別,以及識別文本類型信息。
9.如權(quán)利要求6所述的XML文檔轉(zhuǎn)換為Excel文檔的裝置,其特征在于,所述文檔生成 模塊具體包括文件頭信息生成模塊,用于生成工作簿W(wǎng)orkBook的文件頭信息; 列表生成模塊,用于生成單元格樣式列表,以及生成工作表Worksheet。
10.如權(quán)利要求6所述的XML文檔轉(zhuǎn)換為Excel文檔的裝置,其特征在于,所述Excel 文檔轉(zhuǎn)換模塊具體包括接口初始化模塊,用于初始化Com接口 ;文件導(dǎo)入模塊,用于調(diào)用Com模塊中的工作簿對象WorkBookPtr將XML2003文件導(dǎo)入; Excel文檔生成模塊,用于查詢注冊表得到用戶安裝的Excel版本信息,根據(jù)該版本信 息生成對應(yīng)版本的Excel文檔;XML文件刪除模塊,用于刪除XML2003文件。
全文摘要
本發(fā)明屬于文檔應(yīng)用領(lǐng)域,公開了一種XML文檔轉(zhuǎn)換為Excel文檔的方法及裝置,所述方法包括讀取XML文件中的基本元素信息;將讀取的XML文件中的基本元素信息按照Excel的排版格式進行排版,獲取一排版結(jié)果;按照上述排版結(jié)果生成XML2003文檔;調(diào)用電子表格工具MS-Excel的Com接口將生成的XML2003文檔轉(zhuǎn)換為Excel文檔。本發(fā)明在生成一個Excel文檔的過程中只需要一次Com調(diào)用,最大程度上規(guī)避了Com調(diào)用的低效性和不穩(wěn)定性,降低了資源占有量。
文檔編號G06F17/22GK101968783SQ201010293739
公開日2011年2月9日 申請日期2010年9月19日 優(yōu)先權(quán)日2010年9月19日
發(fā)明者解輝 申請人:深圳市萬興軟件有限公司