PHPExcel快速入门

下载及使用

下载

最新的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文件

读取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文件

生成Excel文件需要以下几步:

  • 引入PHPExcel.php文件
  • 实例化PHPExcel();创建一个Excel文件
  • createSheet();创建一个sheet
  • setActiveSheetIndex($index);设置当前活动表
  • getActiveSheet();获取当前活动表对象,可以进行下一步操作
  • setTitle(“sheetName”);设置当前sheet的标题
  • setCellValue(“A1”,”姓名”);为每一个单元设置值
  • PHPExcel_IOFactory::createWriter($objPHPExcel,’Excel5’);设置excel文件类型
  • save($path);设置保存路径
$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);//填充学生信息

你可能感兴趣的:(PHP)