這次給大家帶來原生php實現excel檔案讀寫步驟詳解,原生php實現excel檔案的注意事項有哪些,下面就是實戰案例,一起來看一下。
最近在工作中遇到一個需求,需要將資料庫中的資料匯出到excel檔案中,並下載excel檔案。因為以前沒做過,所以就百度了一下,網上說的大多是使用PHPExcel類來操作excel檔案,這還要去下載這個類才能使用,而我只想使用原生的php,不想那麼麻煩,好在也有網友說到關於原生php產生excel檔案的方法,其實很簡單,下面把我結合網上資料自己實踐的代碼分享一下。
一般我們這種導資料的操作都是通過使用者在網頁頁面上點擊某個按鈕觸發相應js方法,然後請求php介面來實現的,所以主要有兩種方法來完成這種需求。
方法1:直接在js代碼中使用window.open()
開啟php介面的url,即可將php產生的excel檔案下載下來。
php介面代碼如下:
$mysqli = mysqli_connect('localhost', 'root', '123456', 'test');$sql = 'select * from country';$res = mysqli_query($mysqli, $sql);header("Content-type:application/vnd.ms-excel");header("Content-Disposition:filename=country.xls");echo "code\t";echo "name\t";echo "population\t\n";if(mysqli_num_rows($res) > 0) { while($row = mysqli_fetch_array($res)) { echo $row['code']."\t"; echo $row['name']."\t"; echo $row['population']."\t\n"; }}
方法2:php介面中先把產生的excel檔案儲存在伺服器中,然後把檔案路徑返回給js,js再使用window.open()
開啟檔案路徑即可下載。
php介面代碼如下:
$mysqli = mysqli_connect('localhost', 'root', '123456', 'test');$sql = 'select * from country';$res = mysqli_query($mysqli, $sql);$file = fopen('./country.xls', 'w');fwrite($file, "code\tname\tpopulation\t\n");if(mysqli_num_rows($res) > 0) { while($row = mysqli_fetch_array($res)) { fwrite($file, $row['code']."\t".$row['name']."\t".$row['population']."\t\n");//這裡寫得不好,應該把所有檔案內容組裝到一個字串中然後一次性寫入檔案。 }}fclose($file);echo 'http://www.jtw.com/....../country.xls';//這裡返迴文件路徑給js
兩種方法很類似,都能實現將資料庫中的資料匯出到excel檔案中並下載檔案,最終檔案如下:
如果有需要,還可以使用原生php對excel檔案內容進行讀取操作,這主要用於需要將excel檔案中的資料匯入到資料庫中的情況。
代碼如下:(這裡僅展示將檔案資料讀取到一個數組中)
$path = './country.xls';$file = fopen($path, 'r');//標題列讀取(第一行)$row = fgets($file);$row = explode("\t", $row);$title = array();foreach($row as $k => $v) { $title[$k] = str_replace("\n", '', $v);}//內容讀取$data = array();$count = 0;while(!feof($file)) { $row = fgets($file); $row = explode("\t", $row); if(!$row[0]) continue;//去除最後一行 foreach($title as $k => $v) { $data[$count][$title[$k]] = $row[$k]; } $count ++;}fclose($file);echo '<pre>';print_r($data);
不過,使用原生php產生的excel檔案,存在一個問題,就是每次編輯檔案之後儲存檔案的時候總是會出現如下的問題:
也不知道是什麼原因,大概是產生的檔案本身存在一些問題吧。。。
而且使用原生php對產生的excel檔案進行讀取的時候會出現中文亂碼等一些奇葩情況。所以,使用原生php產生excel檔案最好僅在某種情況下使用:只是單純地將資料從資料庫匯出到檔案中方便查看,無需對檔案進行修改,也無需對檔案進行讀取。這種情況使用原生php來產生excel足以滿足需求,免去使用第三方類庫來操作excel的麻煩。不過,若是產生之後的檔案還有修改儲存、讀取資料的需求,那還是老老實實使用phpexcel等第三方類庫來進行讀寫操作吧,可以避免很多讓人糾結的問題。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
laravel操作簡訊發送驗證碼功能實現步驟詳解
PHP單例模式使用案例詳解