【摘要】數據庫
本文介紹如何將各類結構的 Excel 文件解析成結構化數據,如普通行式、複雜表頭、自由格式、交叉表、主子表、大文件等,並用 esProc SPL 舉例實現。請點擊Excel 文件結構化解析示例瞭解詳情函數
本文將介紹如何進行各類格式的Excel文件結構化解析,如普通行式、複雜表頭、自由格式、交叉表、主子表、大文件等,並提供用 esProc SPL 編寫的代碼示例。esProc 是專業的數據計算引擎,其採用的 SPL 中有完善的 Excel 文件處理函數,進行結構化解析及後續的計算、入庫等操做很是方便。大數據
這是一種最簡單的文件格式,文件中每行都是一條數據記錄,更常見的是第一行是列標題。spa
示例:在學生成績文件scores.xlsx中,查詢各班語文平均成績。部分數據以下圖:blog
esProc SPL腳本以下:rem
多數時候,Excel文件的表頭格式並不簡單,每每是由多行構成的,好比有表標題、項目名稱、填表人、填寫日期、頁碼等信息。解析這種格式的文件時,須要跳過複雜的表頭,指定從數據行的位置開始讀取,而後指定結構化後的數據各列的列名。字符串
示例:在項目造價文件itemPrices.xlsx中,計算項目總造價,部分數據以下圖:get
esProc SPL腳本以下:it
一條數據記錄分散在多行,字段列值單元格緊跟在列名單元格後面或下面,可能有跨列或跨行的合併單元格。但每條記錄所佔的行數以及對應行結構是相同的。循環讀取時要以每條記錄所佔行數爲單位組成一條記錄。io
示例:把自由格式的員工信息文件employee.xlsx存入到數據庫表employee中,部分數據以下圖:
esProc SPL腳本以下:
A1建立列名爲「ID、Name、Sex、Position、Birthday、Phone、Address、PostCode」的空序表
A2打開Excel數據文件
A3定義僱員信息所在單元格列號序列
B3定義僱員信息所在單元格行號序列
A4用for循環讀取每一個僱員信息
B4 A3.(~/B3(#))先算出當前僱員單元格編號序列,再讀出這些單元格值組成僱員信息序列。第一次循環時爲\[C1,C2,F2,C3,C4,D5,C7,C8\],第二次循環時爲\[C10,C11,F11,C12,C13,D14,C16,C17\]……每次行號加9。$\\[A2.xlscell(\\]與"A2.xlscell("相同,都是表示一個字符串,它的好處是在IDE中編寫程序時,若是A2單元格的編號發生了變化,$\[A2.xlscell(\]中的A2會自動變化,好比在A2前插入了一行,這個表達式就會變成$\[A3.xlscell(\],而用引號的話,就不會自動變了。
B5判斷僱員ID值是否爲空,爲空則退出循環,結束讀數
B6將一條僱員信息存入A1序表尾
B7讓僱員信息的行號序列都加上9,讀取下一條僱員信息
A8-A10鏈接數據庫,將僱員信息存入數據庫表employee,關閉數據庫
讀取出來的A1單元格數據以下圖所示:
交叉表是統計學中常見的一種矩陣式表格,能夠清晰地表達兩個變量間的數量關係。交叉表數據逐行讀入後,須要以某個列變量爲基準,另外一個變量及交叉值進行行轉置;或者以某個行變量爲基準,另外一個變量及交叉值進行列轉置。
示例:將訂單地區與貨運方式交叉表cross.xlsx文件解析成結構化數據,文件數據以下圖所示。
esProc SPL腳本以下:
A3格的部分數據以下圖所示:
每一個sheet是一條主表記錄,同時sheet中也包含N條子表記錄。文件中有多少主表記錄,就有多少個sheet。對這種主子表結構的數據,須要建立兩個數據表分別保存主表和子表的記錄。
示例:在員工信息登記表文件staff.xlsx中,每一個sheet有員工信息及他的家庭成員信息,請將員工信息及家庭成員信息分別解析成兩個結構化數據表。其中一個sheet以下圖:
esProc SPL腳本以下:
A1建立列名分別爲IDCard、Name、Sex、Birthday、Nation、Phone、Depart、Home、Marital、Entry的空序表,用於保存主表員工信息
A2建立列名分別爲IDCard、Name、Relation、Workplace、Phone的空序表,用於保存子表員工家庭成員信息
A3定義主表員工信息所在單元格序列
A4打開Excel數據文件
A5循環讀取Excel文件各sheet數據
B5讀取員工信息序列
C5將B5讀取的員工信息保存到序表A1
B6從第6行開始讀取員工家庭成員信息,只讀指定的5列Family、Name、Relation、Workplace、Phone
B7將B6序表的Family列更名爲IDCard
C7爲B7序表的IDCard列賦值爲員工信息中的IDCard
B8將B7中的員工家庭成員信息追加到序表A2
A1讀到的部分數據以下:
A2讀到的部分數據以下:
大文件結構化解析及計算的相關原理可參看《大文件上的結構化數據計算示例》,那篇文章是以文本文件爲例,本文在此以Excel文件爲例再做示範。
示例:在訂單信息大數據文件orders.xlsx中,統計各地區的訂單金額總和。部分數據以下圖:
esProc SPL腳本以下: