劉海蘭 李海彬 廣西廣播電視臺(tái)
Excel是微軟公司的辦公軟件office的組件之一,它可以進(jìn)行各種數(shù)據(jù)的處理、統(tǒng)計(jì)分析和輔助決策操作,廣泛地應(yīng)用于管理、統(tǒng)計(jì)財(cái)經(jīng)、金融等眾多領(lǐng)域,因此很多人喜歡將工作資料保存到Excel表格中。
隨著網(wǎng)絡(luò)數(shù)據(jù)庫(kù)技術(shù)的發(fā)展,很多單位都建立了自己的網(wǎng)絡(luò)數(shù)據(jù)庫(kù)系統(tǒng),這就需要將以前用Excel文件方式保存的資料轉(zhuǎn)換存儲(chǔ)至MS SQL 、Oracle等網(wǎng)絡(luò)數(shù)據(jù)庫(kù),更好的實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)和資源共享,這就涉及到數(shù)據(jù)格式轉(zhuǎn)換問(wèn)題。在本文中,我們將分享一個(gè)將音像資料報(bào)告單的Excel表格轉(zhuǎn)換為MS SQL數(shù)據(jù)庫(kù)的例子。
臺(tái)總編室向新聞中心移交了一批錄像帶和DVD光盤,內(nèi)容是我臺(tái)的一些節(jié)目資料和素材,在移交時(shí)附上了一批以EXCEL表格方式存儲(chǔ)的音像資料文件。
這批錄像帶和DVD光盤移交到新聞中心磁帶庫(kù)后,可以提供給記者、編輯們作為節(jié)目素材使用,為使他們能根據(jù)關(guān)鍵詞查找到所需要的錄像帶或DVD光盤,需要將EXCEL表格內(nèi)的音像文字資料,轉(zhuǎn)為新聞中心的文稿系統(tǒng)所支持的格式,即以MS SQL數(shù)據(jù)庫(kù)方式存儲(chǔ)。
基于此,我們需要設(shè)計(jì)一個(gè)數(shù)據(jù)轉(zhuǎn)換系統(tǒng),完成不同格式的數(shù)據(jù)轉(zhuǎn)換。
在Office應(yīng)用中,Access是一個(gè)小型的數(shù)據(jù)庫(kù),它的數(shù)據(jù)存儲(chǔ)方式與MS SQL一樣,是以行表的形式保存的,所以實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換比較容易。而Excel很多時(shí)候是以一個(gè)X行×Y列的表格形式來(lái)存儲(chǔ)的,所以直接轉(zhuǎn)換到MS SQL是比較因難的,需要分析其表格數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu),根據(jù)實(shí)際情況來(lái)處理。
每個(gè)EXCEL文件存儲(chǔ)的是一整年的音像數(shù)據(jù),圖1是其中某個(gè)音像資料EXCEL文件的表格結(jié)構(gòu),當(dāng)中每個(gè)音像數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)是完全相同的。
圖1 音像資料數(shù)據(jù)的EXECL格式
從圖1可以看到,每個(gè)音像資料的數(shù)據(jù),是一個(gè)不標(biāo)準(zhǔn)的11行×8列的表格,即占用A~H共8列格子,但并非標(biāo)準(zhǔn)的每行8個(gè)格子,其中一些格子進(jìn)行了合并,從1~6格不等。
而每個(gè)音像資料的數(shù)據(jù)內(nèi)容之間,還隔著幾個(gè)空行,且這幾個(gè)空行有時(shí)是5行,有時(shí)是4行或6行并不固定,因此不能簡(jiǎn)單的用(11+5)×8來(lái)定義每個(gè)音像資料數(shù)據(jù)的結(jié)構(gòu)。
在這里需要轉(zhuǎn)換的數(shù)據(jù)內(nèi)容共10項(xiàng),分別是片種、次號(hào)、標(biāo)引日期、正題名、音響語(yǔ)種、制作者、字幕文種、來(lái)源、時(shí)長(zhǎng)、內(nèi)容提要,其它部分可省略。從數(shù)據(jù)分析得到結(jié)論:音像資料報(bào)告單內(nèi)部的結(jié)構(gòu)是相同的,轉(zhuǎn)換的時(shí)候先找到每個(gè)音像資料的起點(diǎn),再向下讀取指定的N行數(shù)據(jù)即可得到其全部?jī)?nèi)容,然后根據(jù)轉(zhuǎn)換要求篩選出有用數(shù)據(jù),最終將這個(gè)11行×8列的表格轉(zhuǎn)為每行10個(gè)字段的MS SQL數(shù)據(jù)表。
使用Delphi 7.0作為開(kāi)發(fā)工具,放置2個(gè)Adoquery控件,一個(gè)DataSource和一個(gè)DBGrid控件,建立兩個(gè)ODBC數(shù)據(jù)源。其中Adoquery1連接Excel文件,Adoquery2用于連接MS SQL 2005數(shù)據(jù)庫(kù)。
EXCEL數(shù)據(jù)源名稱:音像資料報(bào)告單
驅(qū)動(dòng)程序:Driver do Microsoft Excel(*.xls)工作簿:E:89磁帶資料.xls
DataSource1.DataSet=Adoquery1;
DBGrid.DataSource=DataSource1;
Adoquery1打開(kāi)后DBGrid顯示的內(nèi)容如圖2所示。
圖2 音像資料EXCEL轉(zhuǎn)換程序運(yùn)行界面
根據(jù)DBGrid顯示的內(nèi)容,發(fā)現(xiàn)一個(gè)問(wèn)題:Execl表格第一行的“廣西音像資料館”并沒(méi)有顯示在DBGrid中,而是成為一個(gè)字段。DBGrid第一行的內(nèi)容是“音像資料報(bào)告單”,雖然后續(xù)的表格中出現(xiàn)了“廣西音像資料館”,但如果以“廣西音像資料館”作為起點(diǎn),會(huì)造成第一個(gè)音像資料數(shù)據(jù)不能識(shí)別出來(lái)。
為此作了些改動(dòng),每個(gè)音像資料數(shù)據(jù)以“音像資料報(bào)告單”為起點(diǎn),讀取10行數(shù)據(jù),之后再次尋找下一個(gè)“音像資料報(bào)告單”的位置,重復(fù)循環(huán)直到文件結(jié)尾。
在MS SQL文稿數(shù)據(jù)庫(kù)中,創(chuàng)建數(shù)據(jù)表Video_Tab,其字段結(jié)構(gòu)如表1所示。
詳見(jiàn)表2 轉(zhuǎn)換代碼
在大數(shù)據(jù)時(shí)代,數(shù)據(jù)的重要性不言而喻,通過(guò)短短數(shù)十行代碼,我們完成了這個(gè)EXCEL不規(guī)則數(shù)據(jù)表格到MS SQL網(wǎng)絡(luò)數(shù)據(jù)庫(kù)的數(shù)據(jù)轉(zhuǎn)換,使這些舊數(shù)據(jù)能更為有效的利用起來(lái)。
通過(guò)這個(gè)例子,希望可以起到拋磚引玉的作用,寫這篇文章,也是對(duì)這次數(shù)據(jù)轉(zhuǎn)換工作的一次總結(jié)。
表1 MS SQL音像數(shù)據(jù)資料表字段結(jié)構(gòu)
表2 轉(zhuǎn)換代碼