加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php读取excel文件(.csv)实例说明

发布时间:2023-08-22 17:20:11 所属栏目:PHP教程 来源:
导读:csv文件是一种纯文本文件,但利用excel文件打开可以当作excel文件使用,下面我来总结几个常用的读取excel的php实例.

PHP有自带的分析.csv函数:fgetcsv

array fgetcsv ( int $handle [, int $length [, string $
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_www.Cuoxin.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,",")) 
{//开源代码Cuoxin.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 = www.Cuoxin.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); 
?> 
 

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章