最新的PHPExcel下载地址已经迁移到github上,网址:https://github.com/PHPOffice/PHPExcel,
可以克隆也可以直接下载zip压缩包。
下载好的压缩包解压好后的文件夹里面有一个Classes文件夹,这个文件夹里面放的就是PHPExcel的源码,使用PHPExcel之前需要引用Classes文件夹里面的PHPExcel.php,然后在实例化PHPExcel类
$dir = dirname(__FILE__);//查找当前脚本所在路径
require_once $dir."/Classes/PHPExcel.php";//引入PHPExcel,读取excel文件时需要引入另一个文件
// require $dir."/PHPExcel/PHPExcel/IOFactory.php";//引入读取excel的类文件
$objPHPExcel = new PHPExcel();//实例化PHPExcel类, 等同于在桌面上新建一个excel
读取Excel文件需要引入另一个文件。
require $dir."/Classes/PHPExcel/IOFactory.php";//引入读取excel的类文件
$filename=$dir."/export_1.xls";// 指定要读取的文件
全部加载指的是加载整个Excel文件,不管Excel文件有多少sheet,也不管每个sheet是不是有用的都要加载,这样就容易造成内存浪费。如果想全部加载Excel文件,直接调用PHPExcel_IOFactory::load($filename)方法就行。
$objPHPExcel=PHPExcel_IOFactory::load($filename);//加载文件
和全部加载相比部分加载显得有点复杂,首先获取需要读取的Excel文件的类型然后再获取需要读取的Excel文件的操作对象,然后指定想要获取那些sheet,最后加载文件。
$fileType=PHPExcel_IOFactory::identify($filename);//自动获取文件的类型提供给phpexcel用
$objReader=PHPExcel_IOFactory::createReader($fileType);//获取文件读取操作对象
$sheetName=array("sheet1","sheet2");
$objReader->setLoadSheetsOnly($sheetName);//只加载指定的sheet
$objPHPExcel=$objReader->load($filename);//加载文件
一次性读取数据就是将每个sheet数据使用toArray方法转换成数组。
$sheetCount=$objPHPExcel->getSheetCount();//获取excel文件里有多少个sheet
for($i=0;$i<$sheetCount;$i++){
$data=$objPHPExcel->getSheet($i)->toArray();//读取每个sheet里的数据 全部放入到数组中
print_r($data);
}
逐行读取数据就是使用迭代的方法进行读取数据,getWorksheetIterator()方法是迭代sheet表,getRowIterator()方法是迭代每行,getCellIterator()方法是迭代每列。
foreach($objPHPExcel->getWorksheetIterator() as $sheet){//循环取sheet
foreach($sheet->getRowIterator() as $row){//逐行处理
foreach($row->getCellIterator() as $cell){//逐列读取
$data=$cell->getValue();//获取单元格数据
echo $data." ";
}
echo '
';
}
echo '
';
}
生成Excel文件需要以下几步:
$dir=dirname(__FILE__);//查找当前脚本所在路径
require $dir."/Classes/PHPExcel.php";//引入PHPExcel
$objPHPExcel=new PHPExcel();//实例化PHPExcel类, 等同于在桌面上新建一个excel
for($i=1;$i<=3;$i++){
if($i>1){
$objPHPExcel->createSheet();//创建新的内置表
}
$objPHPExcel->setActiveSheetIndex($i-1);//把新创建的sheet设定为当前活动sheet
$objSheet=$objPHPExcel->getActiveSheet();//获取当前活动sheet
$objSheet->setTitle("sheet".$i);//给当前活动sheet起个名称
$data=array(
array('username'=>'zhangsan','score'=>'88','class'=>1),
array('username'=>'lisi','score'=>'66','class'=>2),
array('username'=>'wangwu','score'=>'99','class'=>3)
);
$objSheet->setCellValue("A1","姓名")->setCellValue("B1","分数")->setCellValue("C1","班级");//填充数据
$j=2;
foreach($data as $key=>$val){
$objSheet->setCellValue("A".$j,$val['username'])->setCellValue("B".$j,$val['score'])->setCellValue("C".$j,$val['class']."班");
$j++;
}
}
$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');//生成excel文件
$objWriter->save($dir."/export_1.xls");//保存文件
在填充数据时使用setCellValue()方法可为以每个单元格逐个的设置值,还有一种方法使用fromArray方法可以快速设置单元格的值,但是当数据过大时可能导致出错。
$data=array(
array('username'=>'zhangsan','score'=>'88','class'=>1),
array('username'=>'lisi','score'=>'66','class'=>2),
array('username'=>'wangwu','score'=>'99','class'=>3)
);
$objSheet->fromArray($data);
$objSheet->mergeCells("A2:B2");//合并A2B2单元格
$objSheet->getDefaultStyle()->getAlignment()
->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)//设置excel文件默认垂直方向居中
->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置excel文件默认水平方向居中
$objSheet->getDefaultStyle()->getFont()->setSize(14)->setName("微软雅黑");//设置默认字体大小和格式
$objSheet->getStyle("A2:Z2")->getFont()->setSize(20)->setBold(true);//设置第二行字体大小和加粗
$objSheet->getStyle("A2:C2")->getFill()
->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
->getStartColor()->setRGB('c1b644');//填充年级背景颜色
$objSheet->getDefaultRowDimension()->setRowHeight(30);//设置默认行高
$objSheet->getRowDimension(2)->setRowHeight(50);//设置第二行行高
$objPHPExcel->getActiveSheet()->getDefaultColumnDimension()->setWidth(12);// 设置默认列宽
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);// 设置列宽
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);// 设置自动列宽
在设置单元格的值的同时指定值得类型,第三个参数根据不同的常数来指定不同类型。
$objSheet->getStyle('A1')->getNumberFormat()
->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1);
$objSheet->setCellValueExplicit('A1',"12321321321321312",PHPExcel_Cell_DataType::TYPE_STRING);//填充学生信息