php读取excel文件(.csv)实例介绍

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 字段的数组,不会被当成错误.

例,代码如下:

  1. <?php
  2. $row = 1;
  3. $handle = fopen("test.csv","r");
  4. while ($data = fgetcsv($handle, 1000, ",")) {
  5. $num = count($data);
  6. echo "
  7. $num fields in line $row:n";
  8. $row++;
  9. for ($c=0; $c < $num; $c++) {
  10. echo $data[$c] . "n";
  11. }
  12. }
  13. fclose($handle);
  14. ?>

例2,在百度统计和站长工具使用过程中会涉及到很多csv文件,比如我们下载百度站长工具的404统计数据,直接可以使用以下php脚本来读取csv文件然后更新提交。

php读取excel文件(.csv)参考代码:

  1. <?php
  2. function getCSVdata($filename)
  3. {
  4. $row = 1;//第一行开始
  5. if(($handle = fopen($filename, "r")) !== false)
  6. {
  7. while(($dataSrc = fgetcsv($handle)) !== false)
  8. {
  9. $num = count($dataSrc);
  10. for ($c=0; $c < $num; $c++)//列 column
  11. {
  12. if($row === 1)//第一行作为字段
  13. {
  14. $dataName[] = $dataSrc[$c];//字段名称
  15. }
  16. else
  17. {
  18. foreach ($dataName as $k=>$v)
  19. {
  20. if($k == $c)//对应的字段
  21. {
  22. $data[$v] = $dataSrc[$c];
  23. }
  24. }
  25. }
  26. }
  27. if(!emptyempty($data))
  28. {
  29. $dataRtn[] = $data;
  30. unset($data);
  31. }
  32. $row++;
  33. }
  34. fclose($handle);
  35. return $dataRtn;
  36. }
  37. }
  38. $aData = getCSVdata('all_www.phpfensi.com .csv');
  39. foreach ($aData as $k=>$v ){
  40. echo "http://".$v['a']."<br>";
  41. }
  42. ?>

PHP自定义类

优点:跨平台,某些类支持写操作,支持.xls二进制文件,常用的类有phpExcelReader、PHPExcel,其中后者支持读写,但是需要php5.2以上版本.

phpExcelReader是专门用来读取文件的,返回一个数组,包含表格的所有内容,该 class 使用的方法可以参考网站下载回来的压缩档中的 example.php.

例3.php数据导入导出之excel

上传cvs并导入到数据库中,测试成功,部分代码不规范,如PHP_SELF那里要改写成:$_SERVER["PHP_SELF"] )

PHP实例代码如下:

  1. <?php
  2. $fname = $_FILES['MyFile']['name'];
  3. $do = copy($_FILES['MyFile']['tmp_name'],$fname);
  4. if ($do)
  5. {
  6. echo"导入数据成功
  7. ";
  8. } else {
  9. echo "";
  10. }
  11. ?>
  12. <form ENCTYPE="multipart/form-data" ACTION="<?php echo"".$PHP_SELF.""; ?>" METHOD="POST">
  13. 导入CVS数据 <input NAME="MyFile" TYPE="file"> <input VALUE="提交" TYPE="submit">
  14. </form>
  15. <?
  16. error_reporting(0);
  17. //导入CSV格式的文件
  18. $connect=mysql_connect("localhost","a0530093319","123456") or die("could not connect to database");
  19. mysql_select_db("a0530093319",$connect) or die (mysql_error());
  20. $fname = $_FILES['MyFile']['name'];
  21. $handle=fopen("$fname","r");
  22. while($data=fgetcsv($handle,10000,","))
  23. {//开源代码phpfensi.com
  24. $q="insert into test (code,name,date) values ('$data[0]','$data[1]','$data[2]')";
  25. mysql_query($q) or die (mysql_error());
  26. }
  27. fclose($handle);
  28. ?>

用php将数据库导出成excel,测试完全成功,PHP代码如下:

  1. <?php
  2. $DB_Server = www.phpfensi.com;//这里是你的数据连接
  3. $DB_Username = "a0530093319";
  4. $DB_Password = "123456";
  5. $DB_DBName = "a0530093319";
  6. $DB_TBLName = "member";
  7. $savename = date("YmjHis");
  8. $Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password)
  9. or die("Couldn't connect.");
  10. mysql_query("Set Names 'gb2312'");
  11. $file_type = "vnd.ms-excel";
  12. $file_ending = "xls";
  13. header("Content-Type: application/$file_type");
  14. header("Content-Disposition: attachment; filename=".$savename.".$file_ending");
  15. header("Pragma: no-cache");
  16. header("Expires: 0");
  17. $now_date = date("Y-m-j H:i:s");
  18. $title = "数据库名:$DB_DBName,数据表:$DB_TBLName,备份日期:$now_date";
  19. $sql = "Select * from $DB_TBLName";
  20. $ALT_Db = @mysql_select_db($DB_DBName, $Connect)
  21. or die("Couldn't select database");
  22. $result = @mysql_query($sql,$Connect)
  23. or die(mysql_error());
  24. echo("$title ");
  25. $sep = " ";
  26. for ($i = 0; $i < mysql_num_fields($result); $i++) {
  27. echo mysql_field_name($result,$i) . " ";
  28. }
  29. print(" ");
  30. $i = 0;
  31. while($row = mysql_fetch_row($result)) {
  32. $schema_insert = "";
  33. for($j=0; $j<mysql_num_fields($result);$j++) {
  34. if(!isset($row[$j]))
  35. $schema_insert .= "NULL".$sep;
  36. elseif ($row[$j] != "")
  37. $schema_insert .= "$row[$j]".$sep;
  38. else
  39. $schema_insert .= "".$sep;
  40. }
  41. $schema_insert = str_replace($sep."$", "", $schema_insert);
  42. $schema_insert .= " ";
  43. print(trim($schema_insert));
  44. print " ";
  45. $i++;
  46. }
  47. return (true);
  48. ?>