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 字段的數組,不會被當成錯誤.
例,代碼如下:
- <?php
- $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)參考代碼:
- <?php
- 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(!emptyempty($data))
- {
- $dataRtn[] = $data;
- unset($data);
- }
- $row++;
- }
- fclose($handle);
- return $dataRtn;
- }
- }
- $aData = getCSVdata('all_m.survivalescaperooms.com .csv');
- foreach ($aData as $k=>$v ){
- echo "http://".$v['a']."<br>";
- }
- ?>
PHP自定義類
優點:跨平臺,某些類支持寫操作,支持.xls二進制文件,常用的類有phpExcelReader、PHPExcel,其中后者支持讀寫,但是需要php5.2以上版本.
phpExcelReader是專門用來讀取文件的,返回一個數組,包含表格的所有內容,該 class 使用的方法可以參考網站下載回來的壓縮檔中的 example.php.
例3.php數據導入導出之excel
上傳cvs并導入到數據庫中,測試成功,部分代碼不規范,如PHP_SELF那里要改寫成:$_SERVER["PHP_SELF"] )
PHP實例代碼如下:
- <?php
- $fname = $_FILES['MyFile']['name'];
- $do = copy($_FILES['MyFile']['tmp_name'],$fname);
- if ($do)
- {
- echo"導入數據成功
- ";
- } else {
- echo "";
- }
- ?>
- <form ENCTYPE="multipart/form-data" ACTION="<?php echo"".$PHP_SELF.""; ?>" METHOD="POST">
- 導入CVS數據 <input NAME="MyFile" TYPE="file"> <input VALUE="提交" TYPE="submit">
- </form>
- <?
- 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,","))
- {//開源代碼Vevb.com
- $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代碼如下:
- <?php
- $DB_Server = m.survivalescaperooms.com;//這里是你的數據連接
- $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; $j<mysql_num_fields($result);$j++) {
- if(!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);
- ?>
新聞熱點
疑難解答