您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

phpexcel入门

2024/2/21 5:28:44发布37次查看
最近接触了一下php.发现入门倒还蛮容易的,毕竟和c++很像.但是入门的内容无非是一些最简单的基础,真正的难点在于php的很多拓展.
这几天概要的学习了一下phpexcel,之所以说自己是概要的学习,是因为主要是以看网上的例子作为学习的主线,结合官方pdf文档.
下面就简要的对于近期的学习做一个小结.
1. 结构:
phpexcel的构建具有很清晰的结构.明确了这个点,对于接下来的学习至关重要.
工作簿: 官方文档中叫workbook.对应phpexcel中的phpexcel类.
工作表: worksheet , 对应phpexcel中的sheet表格,具体类名我没有看,可以通过getsheet获取到.
单元格: cell .存储数据的最小单元.
以上的这三个概念是从上到下的包含关系,工作簿包含工作表,工作表包含单元格.
当然还有另外两个重要的抽象概念: 读和写.
在phpexcel中,读写这两个动作被抽象成了类.这个用法还是很方便的.当我们需要读一个表格的时候,我们使用reader类的对象加载文件.当我们需要写的时候,只要再用writer类打开对象即可.
2. 类与方法.
phpexcel里面的类有很多.我最近用到的没有几个.简单列举一下:
phpexcel
phpexcel_writer
phpexcel_reader
phpexcel_iofactory  (这就是传说中的工厂设计模式,根据调用的方法,来构造出writer类的对象或者reader类的对象.)
phpexcel的方法我目前接触到的如下:
phpexcel_iofactory::load   加载excel文件.默认调用了reader类的方法,返回的是phpexcel类的对象.
phpexcel_iofactory::createwriter(phpexcel, excel5)   这里用来创建一个已经存在的phpexcel类的对象的写类,后面的参数用来指定excel的后缀.常用的还有excel007.
phpexcel->getactivesheet   获取当前默认激活着的表格.
phpexcel->getsheet(index)   根据index获取sheet
phpexcel->removesheetbyindex   根据index删除sheet表格.
phpexcel->addsheet()   添加一个新的sheet表格
phpexcel->addexternalsheet()   添加一个外部表格,说到这个方法,就要提到另外一个关键字,clone.这个关键字可以克隆出一个表格的复制品.
sheet->getcellbycolumnandrow()   注意phpexcel中,column的下标是从0计算的,而row的下标是从1开始计算的.
sheet->gethighestrow()   获取当前表格的最大行数
sheet->gethighestcolumn()   获取当前表格的最大列数
phpexcel_cell::columnindexfromstring()    当前的列数获取到以后,这个列是以字母的形式存在的,用起来很不方便,所以就有了这个函数,他可以把字母的列转成数字.
sheet->getcell(a1)   它的参数类似这个样子.同样可以获取一个cell的内容.
sheet->setcellvaluebycolumnandrow(column, row, value)   给column和row指代的cell更新值为value
sheet->getrowiterator()   获取当前行的迭代器
sheet->insertnewrowbefore($currentrow, $rownum)   在当前行的前面插入$rownum个行.
phpexcel_cell->setvalue()   为当前的cell设置一个值.
需要留意的是,phpexcel并不仅仅只能输出excel文件,还可以输出pdf,html文件等.这个我没有了解过.不做讨论.
下面是我自己设计实现的一个小例子.电话簿管理系统.支持查找插入删除.当然并没有严格的限制一些方面.实现的只是基本的功能.不过相信可以帮助同学们理解phpexcel.
excel表格式如下:
名字      号码            备注
phone.php负责查找和插入:
号码管理系统 号码管理系统 注意如果需要插入操作,需要姓名和号码都不为空
姓名 :
号码 :
备注 :
      getactivesheet();//获取行数和列数$data_phone = array(array());$row_phone = $sheet->gethighestrow();$column_str = $sheet->gethighestcolumn();$column_phone = phpexcel_cell::columnindexfromstring($column_str);//建立一个表格用来打印电话号码和用户名function table(){ echo
; echo ; echo 姓名 ; echo 号码 ; echo
;}//用来打印有色字体function font($str, $color){ echo ; echo $str; echo ; echo ;}//判断如果是查找if (!empty($_post[search])){ for ($i = 1; $i getcellbycolumnandrow($j, $i)->getvalue(); } }// var_dump($data_phone); table(); for ($i = 1; $i ; echo .$data_phone[$i][0]. ; echo .$data_phone[$i][1]. ; echo ; } } //号码匹配 else if (!empty($_post[number])) { if (0 != substr_count($phone_item, $_post[number])) { echo ; echo .$data_phone[$i][0]. ; echo .$data_phone[$i][1]. ; echo
; } } } echo
;}//如果是插入操作else if (!empty($_post[insert])){ if (!empty($_post[name]) && !empty($_post[num])) { $had = false; $name; $num; //确保将要插入的条目当前系统中不存在 for ($i = 2; $i getcellbycolumnandrow(0, $i)->getvalue(); $num = $sheet->getcellbycolumnandrow(1, $i)->getvalue(); if (strcmp($_post[name], $name) == 0 && strcmp($_post[num], $num) == 0) { $had = true; break; } } table(); //如果不存在,则插入 if (false== $had) { font(插入成功, green); $sheet->insertnewrowbefore($row_phone + 1, 1); $sheet->setcellvaluebycolumnandrow(0, $row_phone + 1, $_post[name]); $sheet->setcellvaluebycolumnandrow(1, $row_phone + 1, $_post[num]); //此处纠结了好久,原来就只是用writer把当前对象加载一下,就可以保存了. $phpwriter = phpexcel_iofactory::createwriter($phpexcel, excel5); $phpwriter->save($filename); echo ; echo .$_post[name]. ; echo .$_post[num]. ; echo
; } //如果存在,则不执行任何动作 else { font(插入失败,条目已存在, red); echo ; echo .$name. ; echo .$num. ; echo
; } echo ; }}//删除操作else if (!empty($_post[delete])){ $had = false; if (!empty($_post[name]) && !empty($_post[num])) { for ($i = 2; $i getcellbycolumnandrow(0, $i)->getvalue(); $num = $sheet->getcellbycolumnandrow(1, $i)->getvalue(); if (strcmp($name, $_post[name]) == 0 && strcmp($num, $_post[num]) ==0) { $sheet->removerow($i, 1); $objwriter = phpexcel_iofactory::createwriter($phpexcel, excel5); $objwriter->save($filename); $had = true; } } } //加入用户名和号码有一个是空的,则执行这个分支 if ($had == false) { font(请输入正确的姓名和号码, red); font(如果不确定,可以通过查找先定位, red); font(即将跳转到删除页面,请稍后..., green); //延迟3秒显示上面的信息,然后跳转到删除页面 header(refresh:3;url=del.php); } else { font(用户删除成功, green); }}?>
如果当前页面的删除操作不满足输入条件,则跳转到专门的删除页面del.php, 代码如下:
号码删除页面
getactivesheet();$row_phone = $sheet->gethighestrow();$column = $sheet->gethighestcolumn();$column_phone = phpexcel_cell::columnindexfromstring($column);for ($i = 2; $i getcellbycolumnandrow(0, $i)->getvalue(); $num = $sheet->getcellbycolumnandrow(1, $i)->getvalue(); //将每一条电话信息用checkbox的方式列出来 if (!empty($name) || !empty($num)) { echo '.$name. .$num.
; }}?>getactivesheet();$row_phone = $sheet->gethighestrow();$column = $sheet->gethighestcolumn();$column_phone = phpexcel_cell::columnindexfromstring($column);//这个用法是网上借鉴的,还是蛮好用的$chk = $_post[chk];for ($i = $row_phone; $i >= 2; $i--){ $name = $sheet->getcellbycolumnandrow(0, $i)->getvalue(); $num = $sheet->getcellbycolumnandrow(1, $i)->getvalue(); if (empty($name) && empty($num)) { continue; } //在当前勾选的内容中查找,如果在数组中说明勾选了.则删除 if (in_array($i, $chk)) { $sheet->removerow($i, 1); $clicked = true; echo .$name. -- .$num.; echo . 已经成功删除
; sleep(1); }}//如果执行了至少一次删除操作,则刷新页面,保存修改后excel表格if (true == $clicked){ $objwriter = phpexcel_iofactory::createwriter($phpexcel, excel5); $objwriter->save($filename); $url=$server[php_self]; header(refresh:3;url=del.php);}?>
希望以上的这个例子能够对同学们有所启发.当然phpexcel和php本身而言,这里的内容简直太少.但是对于入门而言.这也不是一个中规中矩的参考.
'>
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product