首页 > php教程 > php手册 > 正文

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

WBOY
发布: 2016-06-13 09:49:29
原创
1098 人浏览过

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);
?>

$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']."
";
}
?>  
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那里要改写成

 

$do = copy($_FILES['MyFile']['tmp_name'],$fname);
 代码如下
 代码如下 复制代码

$_SERVER["PHP_SELF"] )
PHP代码
$fname = $_FILES['MyFile']['name'];
$do = copy($_FILES['MyFile']['tmp_name'],$fname);
if ($do)
{
echo"导入数据成功
";
} else {
echo "";
}
?>

" METHOD="POST">
导入CVS数据


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);
?>

复制代码

$_SERVER["PHP_SELF"] )

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; $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);
?>

$fname = $_FILES['MyFile']['name'];
if ($do)

{<🎜> echo"导入数据成功<🎜> ";<🎜> } else {<🎜> echo "";<🎜> }<🎜> ?>
" METHOD="POST"> 导入CVS数据
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; $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);<🎜> ?>
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板