csv檔案是一種純文字檔案,但利用excel檔案開啟可以當作excel檔案使用,下面我來總結幾個常用的讀取excel的php執行個體。
PHP有內建的分析.csv函數:fgetcsv
array fgetcsv ( int $handle [, int $length [, string $delimiter [, string $enclosure]]] )
handle 一個由 fopen()、popen() 或 fsockopen() 產生的有效檔案指標。
length (可選)必須大於 CVS 檔案內最長的一行。在 PHP 5 中該參數是可選的。如果忽略(在 PHP 5.0.4 以後的版本中設為 0)該參數的話,那麼長度就沒有限制,不過可能會影響執行效率。
delimiter (可選)設定欄位分界符(只允許一個字元),預設值為逗號。
enclosure (可選)設定欄位環繞符(只允許一個字元),預設值為雙引號。該參數是在 PHP 4.3.0 中添加的。 和 fgets() 類似,只除了 fgetcsv() 解析讀入的行並找出 CSV 格式的欄位然後返回一個包含這些欄位的數組。
fgetcsv() 出錯時返回 FALSE,包括碰到檔案結束時。
注意: CSV 檔案中的空行將被返回為一個包含有單個 null 欄位的數組,不會被當成錯誤。
例
| 代碼如下 |
複製代碼 |
$row = 1; $handle = fopen("test.csv","r"); while ($data = fgetcsv($handle, 1000, ",")) { $num = count($data); echo " $num fields in line $row:n"; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . "n"; } } fclose($handle); ?> |
例2
在百度統計和站長工具使用過程中會涉及到很多csv檔案,比如我們下載百度站長工具的404統計資料,直接可以使用以下php指令碼來讀取csv檔案然後更新提交。
php讀取excel檔案(.csv)參考代碼:
| 代碼如下 |
複製代碼 |
function getCSVdata($filename) { $row = 1;//第一行開始 if(($handle = fopen($filename, "r")) !== false) { while(($dataSrc = fgetcsv($handle)) !== false) { $num = count($dataSrc); for ($c=0; $c < $num; $c++)//列 column { if($row === 1)//第一行作為欄位 { $dataName[] = $dataSrc[$c];//欄位名稱 } else { foreach ($dataName as $k=>$v) { if($k == $c)//對應的欄位 { $data[$v] = $dataSrc[$c]; } } } } if(!empty($data)) { $dataRtn[] = $data; unset($data); } $row++; } fclose($handle); return $dataRtn; } } $aData = getCSVdata('all_www.bKjia.c0m .csv'); foreach ($aData as $k=>$v ){ echo "http://".$v['a']." "; } ?> |
PHP自訂類
優點:跨平台。某些類支援寫操作。支援.xls二進位檔案
常用的類有phpExcelReader、PHPExcel。其中後者支援讀寫,但是需要php5.2以上版本。
phpExcelReader是專門用來讀取檔案的。返回一個數組,包含表格的所有內容。
該 class 使用的方法可以參考網站下載回來的壓縮檔中的 example.php。
例3.php資料匯入匯出之excel
上傳cvs並匯入到資料庫中,測試成功(部分代碼不規範,如PHP_SELF那裡要改寫成
| 代碼如下 |
複製代碼 |
$_SERVER["PHP_SELF"] ) PHP代碼 $fname = $_FILES['MyFile']['name']; $do = copy($_FILES['MyFile']['tmp_name'],$fname); if ($do) { echo"匯入資料成功 "; } else { echo ""; } ?>
error_reporting(0); //匯入CSV格式的檔案 $connect=mysql_connect("localhost","a0530093319","123456") or die("could not connect to database"); mysql_select_db("a0530093319",$connect) or die (mysql_error()); $fname = $_FILES['MyFile']['name']; $handle=fopen("$fname","r"); while($data=fgetcsv($handle,10000,",")) { $q="insert into test (code,name,date) values ('$data[0]','$data[1]','$data[2]')"; mysql_query($q) or die (mysql_error()); } fclose($handle); ?> |
用php將資料庫匯出成excel,測試完全成功
PHP代碼
| 代碼如下 |
複製代碼 |
$DB_Server = www.bKjia.c0m;//這裡是你的資料連線 $DB_Username = "a0530093319"; $DB_Password = "123456"; $DB_DBName = "a0530093319"; $DB_TBLName = "member"; $savename = date("YmjHis"); $Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect."); mysql_query("Set Names 'gb2312'"); $file_type = "vnd.ms-excel"; $file_ending = "xls"; header("Content-Type: application/$file_type"); header("Content-Disposition: attachment; filename=".$savename.".$file_ending"); header("Pragma: no-cache"); header("Expires: 0"); $now_date = date("Y-m-j H:i:s"); $title = "資料庫名:$DB_DBName,資料表:$DB_TBLName,備份日期:$now_date"; $sql = "Select * from $DB_TBLName"; $ALT_Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database"); $result = @mysql_query($sql,$Connect) or die(mysql_error()); echo("$title "); $sep = " "; for ($i = 0; $i < mysql_num_fields($result); $i++) { echo mysql_field_name($result,$i) . " "; } print(" "); $i = 0; while($row = mysql_fetch_row($result)) { $schema_insert = ""; for($j=0; $jif(!isset($row[$j])) $schema_insert .= "NULL".$sep; elseif ($row[$j] != "") $schema_insert .= "$row[$j]".$sep; else $schema_insert .= "".$sep; } $schema_insert = str_replace($sep."$", "", $schema_insert); $schema_insert .= " "; print(trim($schema_insert)); print " "; $i++; } return (true); ?> |
http://www.bkjia.com/PHPjc/632917.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632917.htmlTechArticlecsv檔案是一種純文字檔案,但利用excel檔案開啟可以當作excel檔案使用,下面我來總結幾個常用的讀取excel的php執行個體。 PHP有內建的分析.csv函數...