PHP导入导出Excel代码
程序员文章站
2022-05-30 07:59:23
一.导入
导入需要使用能读取excel的组件,网上也有比较好的组件,这里分享我使用的:下载 提取码:vxyn。(注意两个文件有引用关系)
<...
一.导入
导入需要使用能读取excel的组件,网上也有比较好的组件,这里分享我使用的:下载 提取码:vxyn。(注意两个文件有引用关系)
<?php //传入要导入的excel的文件名 function import_to_db($filename) { require_once'reader.php'; $data = new spreadsheet_excel_reader(); //创建读取excel的对象 $data->setoutputencoding('utf-8'); //设置读取excel内容后输出的字符编码 $data->read("data/excel/{$filename}.xls"); $db = mysql_connect('localhost', '用户名', '密码') or die("could not connect to database."); //连接数据库 mysql_query("set names 'uft8'"); //输出中文 mysql_select_db('数据库名'); //选择数据库 error_reporting(e_all ^ e_notice); for ($i = 1; $i <= $data->sheets[0]['numrows']; $i++) { echo $data->sheets[0]['cells'][$i][列数]; //这里可以把每一行相应列的值插到数据库中,如: /* $sql="insert "表名" values(对应项...)"; mysql_query($sql); 可加上错误判断 */ } ?>
总之,能够读出表格中每一行中的相应列$data->sheets[0][行][列]的值,插入操作就好办了。
二.导出
导出可以利用mime协议轻松导出表格文件,不用依赖任何组件。按如下格式设置header即可导出excel,同时浏览器进行下载
header('content-type: text/html; charset=utf-8'); header("content-type:application/vnd.ms-excel;charset=utf-8"); //application/vnd.ms-excel指定输出excel格式 header("content-disposition:filename=表格文件名.xls"); //输出的表格名称
完整代码如下:
<?php header('content-type: text/html; charset=utf-8'); header("content-type:application/vnd.ms-excel;charset=utf-8"); header("content-disposition:filename=表格文件名.xls"); $conn = mysql_connect("localhost","root","数据库密码") or die("不能连接数据库"); mysql_select_db("数据库名", $conn); mysql_query("set names 'utf-8'"); $sql="select * from 表名 where 条件"; $result=mysql_query($sql); echo "表头1\t表头2\t表头3\n"; while($row=mysql_fetch_array($result)){ echo $row[0]."\t".$row[1]."\t".$row[2]."\n"; } ?>
这里其实\t就是换格,\n就是换行。在一个网页中设置这个php文件的链接,当点击时浏览器会自动把传过来的流保存为excel文件。
phpexcel 是用来操作office excel 文档的一个php类库,它基于微软的openxml标准和php语言。可以使用它来读取、写入不同格式的电子表格
导出类
phpexcel类导出excel,同时对phpexcel做了些精简处理,基本上可以满足数据导出excel的功能
代码如下:
<?php //载入phpexcel类 require './phpexcel/phpexcel.php'; //创建一个excel对象实例 $objphpexcel = new phpexcel(); //设置文档基本属性 $objprops = $objphpexcel->getproperties(); $objprops->setcreator("lao mao"); $objprops->setlastmodifiedby("lao mao"); $objprops->settitle("office xls test document"); $objprops->setsubject("office xls test document, demo"); $objprops->setdescription("test document, generated by phpexcel."); $objprops->setkeywords("office excel phpexcel"); $objprops->setcategory("test"); //设置当前的sheet索引,用于后续的内容操作。 //一般只有在使用多个sheet的时候才需要显示调用。 //缺省情况下,phpexcel会自动创建第一个sheet被设置sheetindex=0 $objphpexcel->setactivesheetindex(0); //设置当前活动sheet的名称 $objactsheet = $objphpexcel->getactivesheet(); $objactsheet->settitle('测试sheet'); //设置单元格内容www.jb51.net //这里的数据可以从数据库中读取,然后再做循环处理 $objphpexcel->getactivesheet()->setcellvalue('a1', 'a1'); $objphpexcel->getactivesheet()->setcellvalue('a2', 'a2'); $objphpexcel->getactivesheet()->setcellvalue('a3', 'a3'); $objphpexcel->getactivesheet()->setcellvalue('a4', 'a4'); $objphpexcel->getactivesheet()->setcellvalue('a5', 'a5'); $objphpexcel->getactivesheet()->setcellvalue('b1', 'b1'); $objphpexcel->getactivesheet()->setcellvalue('b2', 'b2'); $objphpexcel->getactivesheet()->setcellvalue('b3', 'b3'); $objphpexcel->getactivesheet()->setcellvalue('b4', 'b4'); $objphpexcel->getactivesheet()->setcellvalue('b5', 'b5'); $objphpexcel->getactivesheet()->setcellvalue('c1', 'c1'); $objphpexcel->getactivesheet()->setcellvalue('c2', 'c2'); $objphpexcel->getactivesheet()->setcellvalue('c3', 'c3'); $objphpexcel->getactivesheet()->setcellvalue('c4', 'c4'); $objphpexcel->getactivesheet()->setcellvalue('c5', 'c5'); //输出文档 $objwriter = new phpexcel_writer_excel5($objphpexcel); //设置header头部信息,并输出到浏览器 //header('content-type: application/vnd.ms-excel'); //header("content-disposition:attachment; filename=demo.xls"); //header('cache-control: max-age=0'); //$objwriter->save('php://output'); //保存至某一位置 $objwriter->save(dirname(__file__) . '/demo.xls');
导入excel的方法:
代码:
<?php //载入phpexcel类 include(dirname(__file__).'/phpexcel/phpexcel.php'); $obj = new phpexcel_reader_excel5(); $obj->setreaddataonly(true); //读取demo.xls文件 $phpexcel = $obj->load(dirname(__file__).'/output.xls'); //获取当前活动sheet $objworksheet = $phpexcel->getactivesheet(); //获取行数 $highestrow = $objworksheet->gethighestrow(); //获取列数 $highestcolumn = $objworksheet->gethighestcolumn(); $highestcolumnindex = phpexcel_cell::columnindexfromstring($highestcolumn); //循环输出数据 www.jb51.net $data = array(); for($row = 1; $row <= $highestrow; ++$row) { for($col = 0; $col < $highestcolumnindex; ++$col) { $val = $objworksheet->getcellbycolumnandrow($col, $row)->getvalue(); $data[$row][$col] = trim($val); } } echo '<pre>'; print_r($data); echo '</pre>';
但是这种方式有缺陷,老版本的excel有个数据上限,最多65536行数据,这时我们就无法通过excel来实现大数据的导出, 但我估计也没几个有这么我数据吧,当然如果有可以考虑使用csv来操作
以上所述就是本文的全部内容了,希望大家能够喜欢。