Excel 文件結(jié)構(gòu)化解析示例

在數(shù)據(jù)分析業(yè)務(wù)中,經(jīng)常要把Excel文件數(shù)據(jù)結(jié)構(gòu)化解析以后再進行計算或?qū)腙P(guān)系數(shù)據(jù)庫歹啼,但許多Excel文件的格式并不規(guī)整严嗜,而且文件結(jié)構(gòu)也多種多樣碉咆,導致編程進行結(jié)構(gòu)化的工作量會比較大,而且很難通用败玉,每次都要針對文件格式進行分析后再進行開發(fā)敌土。

本文將介紹如何進行各種格式的Excel文件結(jié)構(gòu)化解析,如普通行式运翼、復雜表頭返干、自由格式、交叉表血淌、主子表矩欠、大文件等,并提供用 esProc SPL 編寫的代碼示例悠夯。esProc 是專業(yè)的數(shù)據(jù)計算引擎癌淮,其采用的 SPL 中有完善的 Excel 文件處理函數(shù),進行結(jié)構(gòu)化解析及后續(xù)的計算沦补、入庫等操作非常方便该默。

1.??普通行式

這是一種最簡單的文件格式,文件中每行都是一條數(shù)據(jù)記錄策彤,更常見的是第一行是列標題栓袖。

示例:在學生成績文件scores.xlsx中匣摘,查詢各班語文平均成績。部分數(shù)據(jù)如下圖:

esProc SPL腳本如下:

2.??復雜表頭

多數(shù)時候裹刮,Excel文件的表頭格式并不簡單音榜,往往是由多行構(gòu)成的,比如有表標題捧弃、項目名稱赠叼、填表人、填寫日期违霞、頁碼等信息嘴办。解析這種格式的文件時,需要跳過復雜的表頭买鸽,指定從數(shù)據(jù)行的位置開始讀取涧郊,然后指定結(jié)構(gòu)化后的數(shù)據(jù)各列的列名。

示例:在項目造價文件itemPrices.xlsx中眼五,計算項目總造價妆艘,部分數(shù)據(jù)如下圖:

esProc SPL腳本如下:

3.??自由格式

一條數(shù)據(jù)記錄分散在多行,字段列值單元格緊跟在列名單元格后面或下面看幼,可能有跨列或跨行的合并單元格批旺。但每條記錄所占的行數(shù)以及對應(yīng)行結(jié)構(gòu)是相同的。循環(huán)讀取時要以每條記錄所占行數(shù)為單位組成一條記錄诵姜。

示例:把自由格式的員工信息文件employee.xlsx存入到數(shù)據(jù)庫表employee中汽煮,部分數(shù)據(jù)如下圖:

esProc SPL腳本如下:

A1創(chuàng)建列名為“ID、Name棚唆、Sex逗物、Position、Birthday瑟俭、Phone翎卓、Address、PostCode”的空序表

A2打開Excel數(shù)據(jù)文件

A3定義雇員信息所在單元格列號序列

B3定義雇員信息所在單元格行號序列

A4用for循環(huán)讀取每個雇員信息

B4?? A3.(~/B3(#))先算出當前雇員單元格編號序列,再讀出這些單元格值組成雇員信息序列摆寄。第一次循環(huán)時為[C1,C2,F2,C3,C4,D5,C7,C8]失暴,第二次循環(huán)時為[C10,C11,F11,C12,C13,D14,C16,C17]……每次行號加9。$[A2.xlscell(]與"A2.xlscell("相同微饥,都是表示一個字符串逗扒,它的好處是在IDE中編寫程序時,如果A2單元格的編號發(fā)生了變化欠橘,$[A2.xlscell(]中的A2會自動變化矩肩,比如在A2前插入了一行,這個表達式就會變成$[A3.xlscell(]肃续,而用引號的話黍檩,就不會自動變了叉袍。

B5判斷雇員ID值是否為空,為空則退出循環(huán)刽酱,結(jié)束讀數(shù)

B6將一條雇員信息存入A1序表尾

B7讓雇員信息的行號序列都加上9喳逛,讀取下一條雇員信息

A8-A10連接數(shù)據(jù)庫,將雇員信息存入數(shù)據(jù)庫表employee棵里,關(guān)閉數(shù)據(jù)庫

讀取出來的A1單元格數(shù)據(jù)如下圖所示:

4.??交叉表

交叉表是統(tǒng)計學中常見的一種矩陣式表格润文,可以清晰地表達兩個變量間的數(shù)量關(guān)系。交叉表數(shù)據(jù)逐行讀入后殿怜,需要以某個列變量為基準典蝌,另一個變量及交叉值進行行轉(zhuǎn)置;或者以某個行變量為基準头谜,另一個變量及交叉值進行列轉(zhuǎn)置骏掀。

示例:將訂單地區(qū)與貨運方式交叉表cross.xlsx文件解析成結(jié)構(gòu)化數(shù)據(jù),文件數(shù)據(jù)如下圖所示乔夯。

esProc SPL腳本如下:

A3格的部分數(shù)據(jù)如下圖所示:

5.??主子表

每個sheet是一條主表記錄,同時sheet中也包含N條子表記錄款侵。文件中有多少主表記錄末荐,就有多少個sheet。對這種主子表結(jié)構(gòu)的數(shù)據(jù)新锈,需要創(chuàng)建兩個數(shù)據(jù)表分別保存主表和子表的記錄甲脏。

示例:在員工信息登記表文件staff.xlsx中,每個sheet有員工信息及他的家庭成員信息妹笆,請將員工信息及家庭成員信息分別解析成兩個結(jié)構(gòu)化數(shù)據(jù)表块请。其中一個sheet如下圖:

esProc SPL腳本如下:

A1創(chuàng)建列名分別為IDCard、Name拳缠、Sex墩新、Birthday、Nation窟坐、Phone海渊、Depart、Home哲鸳、Marital臣疑、Entry的空序表,用于保存主表員工信息

A2創(chuàng)建列名分別為IDCard徙菠、Name讯沈、Relation、Workplace婿奔、Phone的空序表缺狠,用于保存子表員工家庭成員信息

A3定義主表員工信息所在單元格序列

A4打開Excel數(shù)據(jù)文件

A5循環(huán)讀取Excel文件各sheet數(shù)據(jù)

B5讀取員工信息序列

C5將B5讀取的員工信息保存到序表A1

B6從第6行開始讀取員工家庭成員信息问慎,只讀指定的5列Family、Name儒老、Relation蝴乔、Workplace、Phone

B7將B6序表的Family列改名為IDCard

C7為B7序表的IDCard列賦值為員工信息中的IDCard

B8將B7中的員工家庭成員信息追加到序表A2

A1讀到的部分數(shù)據(jù)如下:

A2讀到的部分數(shù)據(jù)如下:

6.??大文件

大文件結(jié)構(gòu)化解析及計算的相關(guān)原理可參看《大文件上的結(jié)構(gòu)化數(shù)據(jù)計算示例》驮樊,那篇文章是以文本文件為例薇正,本文在此以Excel文件為例再作示范。

示例:在訂單信息大數(shù)據(jù)文件orders.xlsx中囚衔,統(tǒng)計各地區(qū)的訂單金額總和挖腰。部分數(shù)據(jù)如下圖:


esProc SPL腳本如下:

SPL CookBook》中有更多敏捷計算示例。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末练湿,一起剝皮案震驚了整個濱河市猴仑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌肥哎,老刑警劉巖辽俗,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異篡诽,居然都是意外死亡崖飘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門杈女,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朱浴,“玉大人,你說我怎么就攤上這事达椰『泊溃” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵啰劲,是天一觀的道長梁沧。 經(jīng)常有香客問我,道長蝇裤,這世上最難降的妖魔是什么趁尼? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮猖辫,結(jié)果婚禮上酥泞,老公的妹妹穿的比我還像新娘。我一直安慰自己啃憎,他們只是感情好芝囤,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般悯姊。 火紅的嫁衣襯著肌膚如雪羡藐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天悯许,我揣著相機與錄音仆嗦,去河邊找鬼。 笑死先壕,一個胖子當著我的面吹牛瘩扼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播垃僚,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼集绰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了谆棺?” 一聲冷哼從身側(cè)響起栽燕,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎改淑,沒想到半個月后碍岔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡朵夏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年蔼啦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侍郭。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡询吴,死狀恐怖掠河,靈堂內(nèi)的尸體忽然破棺而出亮元,到底是詐尸還是另有隱情,我是刑警寧澤唠摹,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布爆捞,位于F島的核電站,受9級特大地震影響勾拉,放射性物質(zhì)發(fā)生泄漏煮甥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一藕赞、第九天 我趴在偏房一處隱蔽的房頂上張望成肘。 院中可真熱鬧,春花似錦斧蜕、人聲如沸双霍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洒闸。三九已至染坯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丘逸,已是汗流浹背单鹿。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留深纲,地道東北人仲锄。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像囤萤,于是被迫代替她去往敵國和親昼窗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 本文介紹如何將經(jīng)各種渠道得來的結(jié)構(gòu)化數(shù)據(jù)自動生成各種格式的 Excel 文件涛舍,如單純導出數(shù)據(jù)澄惊、導出大量數(shù)據(jù)、指定顯...
    小黃鴨呀閱讀 603評論 0 0
  • 通常,日志文件都是文本格式没佑,其中的內(nèi)容是非結(jié)構(gòu)化的文本串毕贼。這就使得我們查詢?nèi)罩拘畔r,一般只能使用文本編輯軟件的搜...
    小黃鴨呀閱讀 452評論 0 0
  • 把 Excel 文件導入關(guān)系數(shù)據(jù)庫是數(shù)據(jù)分析業(yè)務(wù)中經(jīng)常要做的事情蛤奢,但許多 Excel 文件的格式并不規(guī)整鬼癣,需要事先...
    小黃鴨呀閱讀 5,084評論 0 2
  • 對于簡單的文件,唯一的結(jié)構(gòu)層次是間隔的行啤贩。然而有時需要更加結(jié)構(gòu)化的文本待秃,用于后續(xù)使用的程序保存數(shù)據(jù)或者向另一個程序...
    碼農(nóng)小楊閱讀 3,016評論 0 2
  • 久違的晴天,家長會痹屹。 家長大會開好到教室時章郁,離放學已經(jīng)沒多少時間了。班主任說已經(jīng)安排了三個家長分享經(jīng)驗志衍。 放學鈴聲...
    飄雪兒5閱讀 7,523評論 16 22