建立於: 7年前 ( 更新: 7年前 )
前言
Excelify是我使用Laravel開發的一套Excel資料轉換工具,這個工具,目前戰績,
我自已成功透過這個工具,將教育部公眾授權的excel檔,辭典約有16萬筆的資料,成語約5千多筆。
轉換為我所需要的SQL格式。
我自已成功透過這個工具,將教育部公眾授權的excel檔,辭典約有16萬筆的資料,成語約5千多筆。
轉換為我所需要的SQL格式。
功能
那Excelify主要有三個功能,來進行Excel資料的轉換處理。
一、Converter: (轉換)
將Excel的表格資料轉換為其他格式,
目前可轉換格式有QueryBuilder、Json、Array、SQL、Excel。
因為MVC的架構,經由Laravel的Blade template進行render,
所以我們可以極容易的擴充更多的轉換格式,
概念上,就是把Excel檔所取得的表格資料轉Array,同時將abcde英文欄位名稱
轉成有意義的名稱,再丟給blade樣版去產出我要的轉換格式。
例如下方為SQL的資料格式,可以看見,這是個Blade的樣版:
https://github.com/DevinY/excelify/blob/master/src/views/data_templates/sql.blade.php
經由,上傳Excel檔案,透過設定範圍,如a2~n60000,並且建立對應的欄位,
例如: a為name,b為address,c為tel
有了這個欄位對應的功能,我們可將轉出的SQL資料直接匯入資料庫中。
二、Excelify: (Excel化)
當初我想建立一個東西,可以快速的將網頁上的Table轉換成Excel,因此這個功能就誕生了
透過這個工具,他可以抓取,網路上的頁面內所有的Table,並將該Table轉換為Excel。
大家或許會好奇,那像是用JavaScript產生的HTML table也能抓嗎?
是的,可以的,因為Excelify我直接整合了Goolge推出的Rendertron,
所以就算是Javascript產生的頁面的Table,透過Rendertron序列化後,一樣可產出Excel。
三、API
第二招需要手動操作,所以我想建立一個可由程式呼叫的功能。
讓我們透過使用程式呼叫的方式,把HTML頁面上的Table轉換成Excel檔。
一、Converter: (轉換)
將Excel的表格資料轉換為其他格式,
目前可轉換格式有QueryBuilder、Json、Array、SQL、Excel。
因為MVC的架構,經由Laravel的Blade template進行render,
所以我們可以極容易的擴充更多的轉換格式,
概念上,就是把Excel檔所取得的表格資料轉Array,同時將abcde英文欄位名稱
轉成有意義的名稱,再丟給blade樣版去產出我要的轉換格式。
例如下方為SQL的資料格式,可以看見,這是個Blade的樣版:
https://github.com/DevinY/excelify/blob/master/src/views/data_templates/sql.blade.php
經由,上傳Excel檔案,透過設定範圍,如a2~n60000,並且建立對應的欄位,
例如: a為name,b為address,c為tel
有了這個欄位對應的功能,我們可將轉出的SQL資料直接匯入資料庫中。
二、Excelify: (Excel化)
當初我想建立一個東西,可以快速的將網頁上的Table轉換成Excel,因此這個功能就誕生了
透過這個工具,他可以抓取,網路上的頁面內所有的Table,並將該Table轉換為Excel。
大家或許會好奇,那像是用JavaScript產生的HTML table也能抓嗎?
是的,可以的,因為Excelify我直接整合了Goolge推出的Rendertron,
所以就算是Javascript產生的頁面的Table,透過Rendertron序列化後,一樣可產出Excel。
三、API
第二招需要手動操作,所以我想建立一個可由程式呼叫的功能。
讓我們透過使用程式呼叫的方式,把HTML頁面上的Table轉換成Excel檔。
問題
Excelify雖然提供了Docker的版本,可經由Kametic快速搜尋安裝及啟動,不用時也可刪掉,
但是並非人人有Docker,或是知道如何用Docker。
或許大家的電腦端已經有Laravel在運行了,為了要用Excelify功功能,
還要再裝一套Laravel是不是太大了點呢?Excelify主要的source Code也不過兩個Class。
如果想將Excelify的轉換功能,直接整合到現有專案中,好像又有點麻煩,
也要改上好幾個檔案。
所以啦,我老早就想把一些,我的Laravel的Project改寫成Package,
因此,先拿小小的Excelify repo來開刀試試看囉。
對於第一次開刀的人來說,大概半天的時間,讓我把他轉換成Laravel的package,
過程算是相當順利了,邊改寫邊讀文件學習,完成後,
發覺原來寫Laravel的Package意外簡單,當然目前轉換完的Source還有很大的優化空間。
這是我第一次嚐試把Laravel的Project變更為Laravel套件,
因此,有些地方還不是很完善,但是我要說It's work。
整個過程算順利的,沒碰到什麼太大問題,
我的做法,看著別人Package寫法,再改寫成自己的。
當然同時閱讀Laravel官網的文件。
但是並非人人有Docker,或是知道如何用Docker。
或許大家的電腦端已經有Laravel在運行了,為了要用Excelify功功能,
還要再裝一套Laravel是不是太大了點呢?Excelify主要的source Code也不過兩個Class。
如果想將Excelify的轉換功能,直接整合到現有專案中,好像又有點麻煩,
也要改上好幾個檔案。
所以啦,我老早就想把一些,我的Laravel的Project改寫成Package,
因此,先拿小小的Excelify repo來開刀試試看囉。
對於第一次開刀的人來說,大概半天的時間,讓我把他轉換成Laravel的package,
過程算是相當順利了,邊改寫邊讀文件學習,完成後,
發覺原來寫Laravel的Package意外簡單,當然目前轉換完的Source還有很大的優化空間。
這是我第一次嚐試把Laravel的Project變更為Laravel套件,
因此,有些地方還不是很完善,但是我要說It's work。
整個過程算順利的,沒碰到什麼太大問題,
我的做法,看著別人Package寫法,再改寫成自己的。
當然同時閱讀Laravel官網的文件。
Excelify注意事項:
如果是轉換大檔案,就是一定要注意php.ini中的配制,否則Excelify是無法正常運行的。
如果說只是單純想轉個資料,又有Docker時,透過Dcoker執行excelify是不錯的選擇,
因為Container我已設定好了php.ini,像是那種20~30MB的大Excel檔是沒什麼問題的。
因為沒一天到晚在轉東西或長時間測試Excelify功能。
我只在需要做轉換時才會想到去使用他,
而他確實他替我解決掉好幾個資料轉換的問題(包含下方Line Bot的辭典資料庫),
但我不保證這個工具在您的環境中,轉出資料的正確性,
他是否符合您的期待,所以您要使用他,請自行留意資料轉換後的結果,
當然,如果您有發現什麼問題,請歡迎開PR給我。
越多人使用他,能讓我了解到有那些問題,再去優化他。
如果您也喜歡這個套件,也歡迎fork幫我優化哦。
這是我練習的Line Bot:

如果您想邀這個機器人進入群組: 歡迎加他好友哦。
這算是一個擁有十六萬字庫的辭典了,懂成語,還會說故事呢!

教育部國語辭典公眾授權網:
http://resources.publicense.moe.edu.tw/
upload_max_filesize = 50M
post_max_size = 50M
max_execution_time = 0
memory_limit = -1
記憶體請設定成-1,不進行限制。如果說只是單純想轉個資料,又有Docker時,透過Dcoker執行excelify是不錯的選擇,
因為Container我已設定好了php.ini,像是那種20~30MB的大Excel檔是沒什麼問題的。
結語:
Excelify我自己使用頻率並不高,因為沒一天到晚在轉東西或長時間測試Excelify功能。
我只在需要做轉換時才會想到去使用他,
而他確實他替我解決掉好幾個資料轉換的問題(包含下方Line Bot的辭典資料庫),
但我不保證這個工具在您的環境中,轉出資料的正確性,
他是否符合您的期待,所以您要使用他,請自行留意資料轉換後的結果,
當然,如果您有發現什麼問題,請歡迎開PR給我。
越多人使用他,能讓我了解到有那些問題,再去優化他。
如果您也喜歡這個套件,也歡迎fork幫我優化哦。
安裝Excelify套件:
https://packagist.org/packages/deviny/excelify這是我練習的Line Bot:

如果您想邀這個機器人進入群組: 歡迎加他好友哦。
這算是一個擁有十六萬字庫的辭典了,懂成語,還會說故事呢!

教育部國語辭典公眾授權網:
http://resources.publicense.moe.edu.tw/
No Comment
Post your comment