iT邦幫忙

0

如何用原生PHP將EXCEL檔案匯入MySQL(不使用PHPExcel等套件工具)

如題:

因公司需要開發此功能,但是網路上找到的大多都是使用PHPExcel之類的套件工具,而公司的需求是不使用這類套件工具,直接用原生PHP的方式開發,請問有沒有什麼線索或者範例可供參考呢?

看更多先前的討論...收起先前的討論...
ckp6250 iT邦好手 1 級 ‧ 2021-09-06 20:47:39 檢舉
好奇問一下,是什麼理由【不使用這類套件工具】?
alan0219 iT邦新手 5 級 ‧ 2021-09-06 21:51:04 檢舉
因為公司覺得,這種套件日後還有沒有維護誰也不知道,後來發現了甚麼重大BUG卻沒人繼續維護,那是一種麻煩;所以覺得都自己寫比較好。
淺水員 iT邦高手 3 級 ‧ 2021-09-06 22:08:16 檢舉
xls 檔案先不談。

如果是 xlsx 檔案的話,可以解壓縮後,用文字編輯器打開檔案。
基本上都是XML格式,搭配文件去解析內容。
小魚 iT邦大師 1 級 ‧ 2021-09-06 22:28:30 檢舉
解壓縮也不能用套件.
alan0219 iT邦新手 5 級 ‧ 2021-09-06 22:46:16 檢舉
對,希望完全使用原生PHP的方式完成。
ckp6250 iT邦好手 1 級 ‧ 2021-09-07 07:52:03 檢舉
自告輪子,精神可嘉。
恭喜您找到一家勇於自力更生的公司。

萬一有一天,PHP也沒有人維護了,怎麼辦?
自己寫一套程式語言?


又,不用【PHPExcel之類的套件工具】,那麼,用 javascript 的套件可以嗎?
問一下,貴公司的PHP是不是在Windows上跑的?

要是XAMP也倒了沒人維護怎麼辦?
不過沒人維護也一樣可以用下去啊,只是新功能沒得用而已,Windows7 EOL 了並不代表不能用了,只是沒再提供更新及錯誤修正,PHP、PYTHON、C#........的軟體套件並不會因為開發者中止維護或開始收費,而造成已在使用中的開發者有任何影響
alan0219 iT邦新手 5 級 ‧ 2021-09-07 09:52:07 檢舉
1.PHP是在Linux跑|
2.公司如此需求我也無奈,雖然不使用框架之類的是有所顧慮,但是連套件都不用感覺是有點太過精益求精?
3.最後需要將Excel資料匯入到MySQL中,用JS能行嗎?
1、那...理由一樣,只是不像xamp需要有人管理套件包 .. 而是分開安裝或隨系統預設安裝
2、那會要求公司花心思去開發Excel的資料存取框架,有這麼大的心,我也是佩服,有商品化的話別忘了通知一下捧個小場
3,只是要匯入資料到SQL幹嘛用PHP?用python+openpyxl不香嗎?有原始碼可學著如何取存xlsx 檔 (眾家套件 97/2003的XLS 都不支援,除非用AUTOMATION)
基本上建議列一張時間表,用什麼套件可以多少時間開發出來
自己開發套件,可以根據別人開發一個套件花了多少的時間時數人力
然後對比一下這些人的年薪,去折算一下專業度,來計算所需要的時間時數人力
簡單說能開發一個PHPEXCEL套件,年薪少說五十萬 USD 是很基本的
你的薪水大概就算百萬NTD好了,也是跟別人差了50倍,假如那各套件是五個人花了兩年的時間搞定,並且後續至少有兩個人每年花了一百小時維護,你去看看你自己的能力大概也要兩百五十年才有辦法寫出一樣的東西,然後後續的維護你每年要花五千個小時才有能力維護,可是當你有能力寫出這樣的套件時,你會呆在年薪只有一百萬NTD的公司嘛,顯然也不可能,所以,你公司的老闆腦袋真的壞了
ckp6250 iT邦好手 1 級 ‧ 2021-09-07 14:30:23 檢舉
>>最後需要將Excel資料匯入到MySQL中,用JS能行嗎?

JS沒有問題,也有現成套件,但,問題和 PHPExcel 一樣,也是舶來品,
如果,擔心 PHPExcel 沒有人維護,那麼,用 JS 套件也一樣的問題。
那在用人家的Office-excel之前,有想過.......要是微軟倒了怎麼辦?那可能要盡早改用OpenOffice以免.......

OpenOffice也是開放社群維護的專案,你可以自己找到原始碼,學著自己寫一個屬於自己版權的試算表,不可以COPY哦否則會違反開發者授權規則.......

開玩笑了,請老板別想太多啦
alan0219 iT邦新手 5 級 ‧ 2021-09-10 15:38:50 檢舉
公司終於同意使用套件開發了,感謝大家的指點,現在在研究PhpSpreadsheet
1
海綿寶寶
iT邦大神 1 級 ‧ 2021-09-07 10:02:25

先確定你要匯入的是 Excel 檔案,或者只是 csv 檔案
如果是 Excel 檔案,就參考這篇或參考PHPSpreadsheet自己寫
如果是 csv 檔案,就參考這篇

不管答案是那一個
我都想說
https://ithelp.ithome.com.tw/upload/images/20210907/20001787vxm0bxRFyR.png

alan0219 iT邦新手 5 級 ‧ 2021-09-07 10:05:12 檢舉

能連PHPSpreadsheet都不用嗎?

可以,自己寫即可

自己寫的意思是
1.自己研究 Excel 檔案格式
2.自己寫 PHP 去讀取 Excel 檔案

參考 PHPSpreadsheet 的意思是
1.看懂 PHPSpreadsheet
2.只複製使用你要用的部份就好

至於那一個比較簡單省時間
只有你自己才知道了

1
dscwferp
iT邦高手 1 級 ‧ 2021-09-07 11:16:11

原來真正的問題在"不信任"!
太矯枉過正了!
世界的進步 是 "站在巨人的肩膀上"
如果不站在"巨人(前人)"的肩膀上, 那人類無法進步, 早就被吃光了!
貴司應該換個角度對待"不信任"
去了解"框架""套件"原理(但不需要全盤了解)
然後去駕馭它們, 而不是排斥它們

就跟駕馭 linux+PHP 這兩個"套件" 一樣!
1. 了解, 因為網路上很多人用linux+PHP, 用的很好
2. 駕馭, 貴司用linux+PHP, 也用的很好
3. 信任, 用的很好 就信任了
開車 坐飛機 口罩 很多事都是同此理!

請同理對待其他"框架""套件"吧!
共勉之!

0
混水摸魚
iT邦研究生 4 級 ‧ 2021-09-07 14:27:25

說服別人你的事情會變少(別人會覺得你專業),被別人說服你的事情會變多(別人反而覺得你不專業)。

現在的就業環境(至少在台灣)會說話跟會做事一樣重要。

alan0219 iT邦新手 5 級 ‧ 2021-09-07 14:41:40 檢舉

可惜我是新人,公司大環境已經是這樣開發,沒有成績暫時沒有發言權。

0
japhenchen
iT邦大師 1 級 ‧ 2021-09-07 16:25:14

PHPExcel都已經是開放原始碼,你可以花時間去寫一個跟他們一模一樣功能的套件出來,對,套件,你們也不可能花時間去寫個PHP出來,難道你們不怕PHP突然哪天破產倒閉而沒得用嗎?還是你們覺得LINUX某個發行版廠不會決定不再玩下去?你知道CentOS已經決定不玩了嗎? https://www.ithome.com.tw/news/141582

如果信任感這麼不值錢,全都要自己的智產權,那你們投入在製造工作的時間,會遠多於賺取收入的時間吧

(以上是個人觀點)

0

該說的話,其它人都說了。我就不多說了。

要自幹其實是可以的。
如果不考量97~2003版的話。

其實OFFICE的東西,都是XML+ZIP的組合體的。
但XML的對應規則及節點名稱跟目錄的對應。
早期曾經在MSDN相關的論壇有找過。但現在已經找不到。

如果你有研究的心態。你可以將OFFICE相關系列如 docx xlsx等文件式的檔案。
先掛上ZIP的副檔名後再解壓縮。
你就會看到一些目錄跟一堆XML的東西。
OFFICE的文件檔就是這樣結合起來的。

而在PHP中,要生成XML的東西很容易。
只是真的用PHP來組合成一個XLSX或DOCX。真的很累。
要注意的東西非常的多。

再來繼續教你第二招,這招也是我早期常用的招式。
去試試一個方式。你將html直接改名成doc或docx試試。
你會發現WORD其實可以正確的顯示出來。(雖然不是100%)
不過好像不適用在xlsx上就是了。

至於97~2003版的。因為它們的特性比較特殊。
映像中是壓縮及分配的東西不同。且好像是帶入了類似base64的觀念存在。
所以要處理會有點難度就是了。

以上,是我以前沒用套件時的做法。是可以提供給你參考研究。

再來說說用套件的觀念。
真不想使用套件的話,你也是可以參考套件的處理方式。然後自已用一套出來。
對套件覺得不安全的公司的確大有人在。我也有做過不用套件自開發的東西出來的經驗過。
能力行,不用套件當然一方面代表你的功力不錯。至於開發時間就見仁見智就是了。
我不會說不用套件就不行。也不會說用了套件也不行。

只要給我時間跟金錢,我重寫一個專用的套件出來也行。
反正付錢的是老大,我不擔心沒用套件就辦不到這件事。
人家為了信任感肯花時間跟金錢。為何不幫他做呢?給個安全感也行啊。

但沒錢沒時間,沒門!!!。叫客戶OOXX去。

膜拜大神QQ

0
bluegreenking2
iT邦新手 5 級 ‧ 2021-09-11 15:19:14

不好意思借版發問!!!
其實我們公司也有這種要求...
可是當我在找答案時(stackoverflow)多半的回答都說xlsx的編碼無法解(或者很難解)
所以無法用原生PHP方式去抓裡面資料

所以並不是無法用PHP寫抓Excel資料
是這樣嗎??

我的英文能力只能懂一半,其他人說的(文件結構)不是很懂....我以為跟csv一樣讀進來號好
Reading Excel Files In PHP without third party libraries

((感激版主題問這個問題,我真的困擾很久很久又不敢問這種基本問題
但後來我還是不會用原生PHP去抓xlsx,覺得自己超廢...那陣子真的是打code會打到哭出來

謝謝版主,也謝謝願意回覆我的大神

可以解出xlsx內的東西的。認真來說,解出並不困難。
困難在於解析比較麻煩。

就如我上面說的,先做ZIP解壓縮的方式來處理後。就可以獲得一大堆XML及圖文相關元件。
之後就是去解析XML處理就可以獲得所有的資料了。

會比較難處理的是巨集相關還有圖片的東西。
基本上來說大多是無視它比較多。
但實際上要做到還是可以做到。就是很累很累。

不過現在的套件都已經很進步了。大多數都能正常處理好了。

我要發表回答

立即登入回答