【摘要】
本文介紹如何將經各類渠道得來的結構化數據自動生成各類格式的 Excel 文件,如單純導出數據、導出大量數據、指定顯示屬性、固定行列填充、動態條件顯示屬性、分組帶明細及統計、交叉統計表等,並用 esProc SPL 舉例實現。請點擊 生成各類格式的 Excel 文件示例 瞭解詳情html
在數據處理時,有時要把查詢、分析計算、統計、數據採樣等各類渠道得來的結構化數據,用程序自動生成各類格式的Excel文件。函數
本文將分別針對單純導出數據、導出大量數據、指定顯示屬性、固定行列填充、動態條件顯示屬性、分組帶明細及統計、交叉統計表等介紹實現方法,並提供用 esProc SPL 編寫的代碼示例。esProc 是專業的數據計算引擎, SPL 中有完善的 Excel 文件導出函數,將結構化數據導出成 Excel 很是方便。本文不探討要導出的數據如何得來,假設它已經存在一個文本文件裏了。工具
將列名導出到Excel文件的第一行,第二行開始導出數據記錄,每行一條記錄。字體
示例:將訂單表數據導出到一個新的Excel文件orders.xlsx,esProc SPL腳本以下:大數據
導出時若是文件不存在,會自動建立文件。函數xlsexport的參數中,能夠指定須要導出的列,本例中沒有指定,則導出全部的列;還能夠指定導出數據的sheet名字,本例沒有指定,則導出到第一個sheet中。spa
導出後的orders.xlsx部分數據以下圖所示:設計
Excel文件已經存在,要將新的數據追加在已有數據的後面。此時只須要追加數據記錄,不用再導出列名了。3d
示例:將今日新增長的訂單表數據追加到原有的orders.xlsx中,esProc SPL腳本以下:excel
導出數據時,指定保存數據的Sheet的名稱。htm
示例:未來自Shantai公司的訂單表數據導出到orders.xlsx文件里名爲Shantai的Sheet中。本例中只導出指定的列數據,並修改某些列名,esProc SPL腳本以下:
導出後的orders.xlsx部分數據以下圖所示:
當有大量的、不能一次性所有載入內存的數據須要導出時,要用遊標分批讀入數據,再用流的方式將數據寫入OpenXml格式(即擴展名爲xlsx)的Excel文件,只需佔據少許內存。Excel限制一個sheet最多隻能存放1048576行數據,因此當導出數據行數超過此限制時,咱們須要新增長一個sheet來保存。
示例:將大數據訂單表導出到big.xlsx文件中,esProc SPL腳本以下:
導出後的big.xlsx最後幾行數據以下圖所示:
本例中導出了123663條數據記錄,其實用這種方式能夠導出任意條記錄(不過得保證硬盤存儲空間充足)。
除了直接導出數據,有時還但願生成的excel文件可以顯示得比較美觀,好比能夠指定字體、顏色、背景色、對齊方式、顯示格式等。這時須要預先建好這個excel文件(模板),定義好須要的這些顯示屬性,而後再向這個文件中導出數據,定義好的顯示屬性就會隨之呈現。
示例:把訂單表數據導入到orders.xlsx中,並按以下圖所示格式顯示:
本例將多種預約義顯示屬性都集中在一塊兒做示範,顯示比較雜亂,僅僅爲了演示功能,沒有從美觀上出發去設計。esProc SPL腳本與1.1節相同。
導出後的Excel文件以下圖所示:
有一個行列數和單元格格式都固定的Excel文件,裏面有些空單元格,須要把相關數據填寫到這些格子裏,這要求提供往單個單元格填寫數據的功能。在數據填報業務中會常常用到。
示例:某基金公司總公司向分公司下發了一張excel表格,要求分公司填入它的相關數據後回傳給總公司,下發的excel文件以下:
esProc SPL腳本以下:
假定要填的數據已計算好(在前5行)。樣表中前6個要填的單元格都是獨立的,因此只能每次填一個格,第6行有連續填寫的單元格,此時把待填數據拼成以\t分隔的字符串,這樣能夠從指定單元格開始順序填充。數據填完之後,再把C6的Excel對象寫回到result.xlsx文件中。
填寫完成之後的result.xlsx以下圖所示:
導出Excel時,要求單元格的顯示屬性是根據條件動態變化的,好比要隔行顯示不一樣的背景色、單元格顏色或字體與數據值相關等。這種狀況須要提供一種能定義顯示屬性條件表達式、並在導出時能計算表達式的值來獲得顯示屬性的工具,在esProc SPL中,這種工具就是潤乾報表。
示例:將訂單表數據導出到orders.xlsx中,要求數據行的背景色以兩種顏色隔行交替顯現,訂單金額大於2000的用紅色顯示,低於500的用綠色顯示。
打開潤乾報表設計器,新建報表模板「orders.rpx」,以下圖所示。
報表的第一行是表名稱,第二行是列名稱,第三行是數據記錄行,如何製做報表能夠參閱潤乾報表的相關教程。
選中第三行的全部單元格,在背景色表達式中填入:if(row()%2==0,-853778,-1),用來指定交替顯示的兩種背景色。選擇第三行最後一個單元格,指定顯示格式爲#.00,在前景色表達式中填入:if(value()>2000,-65536,if(value()<500,-16711936,-16777216)),指定根據不一樣金額顯示不一樣的字體顏色。
esProc SPL腳本以下:
導出後的orders.xlsx以下圖所示:
導出Excel時,要求對數據進行分組,顯示各組明細數據及統計數據。這一樣須要用潤乾報表工具做輔助。
示例:將訂單表數據導出到orders.xlsx中,要求按地區和公司分組,顯示各組訂單明細及訂單金額總和。
打開潤乾報表設計器,新建報表模板「orders_group.rpx」,以下圖所示。
報表的第一行是表名稱,第二行是列名稱,在A3格按貨主地區進行分組,B3格按公司名稱進行分組,C三、D三、E3顯示訂單明細。E4格統計各公司的訂單金額總和,E5格統計各地區的訂單金額總和。
esProc SPL腳本以下:
導出後的orders.xlsx以下圖所示:
將數據導出成交叉表格式的Excel文件,仍然須要用潤乾報表工具做輔助。
示例:將訂單表數據導出到orders.xlsx中,要求按地區和年份作交叉統計表顯示。
打開潤乾報表設計器,新建報表模板「orders_cross.rpx」,以下圖所示。
報表的第一行是表名稱,B2格按訂購日期的年份分組,A3格按貨主地區分組,B3格統計各分組的訂單金額總和。
esProc SPL腳本以下:
導出後的orders.xlsx以下圖所示:
《SPL CookBook》(http://www.raqsoft.com.cn/wx/...)中有更多相關計算示例。