abei1982 2017-03-21 14:04:49 7336次浏览 3条回复 11 2 0

Excel 如果你做商务类或办公类的程序,操作Excel是你避免不了要做的一个功能,我们总不能自己去研究Excel吧,找轮子~~~

phpoffice/phpexcel https://github.com/phpoffice/phpexcel

是的,这货帮我们完成了一切,它是一个很老牌很强大的Excel操作类,可以轻松生成一个电子表(csv、xls、xlsx),还能导入并分析电子表格,当然还有其他比如生成pdf等等,我们慢慢说。

本文目录

  1. 使用Composer安装一个phpexcel
  2. 导入分析一个电子表格
  3. 生成一个电子表格

安装phpexcel

如果你是用composer安装的yii2,那么这个步骤再简单不了,一行代码

composer require phpoffice/phpexcel

安装成功后程序 vendor里应该多了一个phpoffice文件夹,就是它了。

导入一个电子表格

我们计划将yii2程序中的/web/data.xls文件导入并且输出所有数据放到一个二维数组内。 Snip20170321_1.png

在一个控制器的action内完成。

use PHPExcel; // 首先要引入PHPExcel库

public function actionRead(){
	$file = Yii::getAlias("@webroot")."/data.xls";
	$objReader = new \PHPExcel_Reader_Excel5();
	$objPHPExcel = $objReader->load($file);
	
	$objWorksheet = $objPHPExcel->getSheet(0);
	$highestRow = $objWorksheet->getHighestRow();//最大行数,为数字
	$highestColumn = $objWorksheet->getHighestColumn();//最大列数 为字母
	$highestColumnIndex = \PHPExcel_Cell::columnIndexFromString($highestColumn); //将字母变为数字
	
	$tableData = [];
	for($row = 1;$row<=$highestRow;$row++){
		for($col=0;$col< $highestColumnIndex;$col++){
			$tableData[$row][$col] = $objWorksheet->getCellByColumnAndRow($col,$row)->getValue();
		}
	}
	var_dump($tableData);
}

就这样容易,结果出来了。

Snip20170321_2.png

这是最简单的分析,PHPExcel还支持对csv、xlsx等不同后缀电子表格的操作,还能对一个电子表格里不同的sheet进行分析,强大到不要不要的~,后续会逐一讲解。

生成一个电子表格

我们生成一个电子表格,浏览器打开会直接下载。少言,直接代码说话。

use PHPExcel;
$headerArr = ['编号','用户名','生成时间'];

$fileName = "abc.xls";
$objPHPExcel = new PHPExcel();
$objProps = $objPHPExcel->getProperties();

$key = ord('A');
foreach($headerArr as $v){
	$colum = chr($key);
	$objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum.'1',$v);
	$key += 1;
}

$objPHPExcel->getActiveSheet()->setTitle('Simple');
$objPHPExcel->setActiveSheetIndex(0);

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-Disposition: attachment; filename=\"$fileName\"");
header('Cache-Control: max-age=0');

$writer = \PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');
$writer->save('php://output');

当然这个例子也很简单,生成的excel只有表头,无内容。

我们仅仅是展示两个例子告诉大家phpexcel能满足你对excel的所有操作,而本专题会对此扩展进行一一讲解。

工兵连PHPExcel专题

觉得很赞
  • 回复于 2017-03-27 15:22 举报

    Argument 1 passed to PHPExcel_Style::setFont() must be an instance of PHPExcel_Style_Font, null given, called in C:\phpStudy\WWW\advanced\vendor\phpoffice\phpexcel\Classes\PHPExcel\Reader\Excel5.php on line 2027 and defined
    报这个错,什么原因啊楼主,求助

    3 条回复
    回复于 2017-03-27 15:56 回复

    参数错误,先把PHPExcel_Style_Font打印出来,应该没有值。

    回复于 2017-03-27 16:24 回复

    恩 感谢楼主,刚才有问题 我就把$objReader = new \PHPExcel_Reader_Excel5();换成$objReader = new \PHPExcel_Reader_CSV(); 读取csv文件 用这个了,这个是正常的。

    回复于 2017-03-27 16:36 回复

    PHPExcel_Reader_Excel5是读取.xls结尾的,PHPExcel_Reader_Excel2007读取.xlsx,PHPExcel_Reader_CSV读取csv文件。

    觉得很赞
  • 回复于 2017-06-16 15:38 举报

    不是composer安装的怎么弄了

  • 回复于 2017-08-09 11:15 举报

    建议大家去看看 https://github.com/phpoffice/phpexcel 这里面的example。
    但是人家作者也说了,在php 5.6.27下有bug,所以不会维护了, 下一个新版本是 phpspreadsheet 但是还没发布。

您需要登录后才可以回复。登录 | 立即注册