首页 > php与数据库 > php读取excel文件(.csv)实例介绍

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

<?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 (!empty($data)) {
                $dataRtn[] = $data;
                unset($data);
            }
            $row++;
        }
        fclose($handle);
        return $dataRtn;
    }
}
$aData = getCSVdata('all_www.phprm.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>
<?php
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代码

<?php
$DB_Server = 'www.phprm.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);
?>


文章网址:http://www.phprm.com/database/54797.html

随意转载^^但请附上教程地址。

标签:foreach select fopen

相关文章

发表留言