by Devin Yang

建立於: 6年前 ( 更新: 6年前 )

前言

Excelify是我使用Laravel開發的一套Excel資料轉換工具,這個工具,目前戰績,
我自已成功透過這個工具,將教育部公眾授權的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檔。

問題

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官網的文件。

Excelify注意事項:

如果是轉換大檔案,就是一定要注意php.ini中的配制,否則Excelify是無法正常運行的。
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/

 

Tags: product

Devin Yang

文章內容無法一一說明,如果您有什麼不了解處,歡迎提問哦:)

No Comment

Post your comment

需要登入才可留言!