Heim  >  Artikel  >  Backend-Entwicklung  >  phpexcel入门

phpexcel入门

WBOY
WBOYOriginal
2016-06-23 13:34:421387Durchsuche

最近接触了一下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负责查找和插入:

<title>  号码管理系统</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><center>  <h1>号码管理系统<h1></h1>
</h1>
</center><h4>  注意如果需要插入操作,需要姓名和号码都不为空</h4>
">
姓名 :
号码 :
备注 :
     

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 ""; echo ""; echo ""; } } //号码匹配 else if (!empty($_POST["number"])) { if (0 != substr_count($phone_item, $_POST["number"])) { echo ""; echo ""; echo ""; echo ""; } } } echo "
姓名号码
".$data_phone[$i][0]."".$data_phone[$i][1]."
".$data_phone[$i][0]."".$data_phone[$i][1]."
";}//如果是插入操作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, 代码如下:

<title>号码删除页面</title><meta http-equiv="Content-Type" content="text/html; charset=utf8">
" >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 '
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP 实现 IOC set 注入Nächster Artikel:php下载优酷视频