PHPExcel的使用方法和代码示例

1. 简介

PHPExcel是用来操作Office Excel文档的一个PHP类库,它基于微软的OpenXML标准和PHP语言。可以用它来读取或写入Excel电子表格。

也就是说,PHPExcel是一个操作Excel表格的类库。

2. 下载

GitHub上的源码地址:https://github.com/PHPOffice/PHPExcel

百度网盘地址:http://pan.baidu.com/s/1hsBS44W

3. 部署

下载 PHPExcel-1.8.zip 之后解压,里面的Classes文件夹就是我们所需要的类库。

这里,以ThinkPHP 3.2.3版本中的部署为例进行讲解。

将Classes文件夹拷贝出来,并重命名为PHPExcel。然后,将其拷贝到TP框架的Vendor目录(ThinkPHP/Library/Vendor/)下。

4. 示例

首先,封装一个函数,便于对所有的二维数组导出为Excel表格。

/**
 * 导出excel表格(适合没有单元格合并的情况)
 * @param array $data 二维数组
 * @param array $table_head 表头(即excel工作表的第一行标题)
 * @param string $file_name 文件名
 * @param string $sheet_name 工作表名
 */
function export_excel(array $data=array(), array $table_head=array(), $file_name='excel', $sheet_name='sheet') 
{
    vendor('PHPExcel.PHPExcel');   // 将Vendor目录中的PHPExcel/PHPExcel.php类文件引入

    $objPHPExcel = new PHPExcel();  // 创建PHPExcel对象

    // 设置excel文件的属性,在excel文件->属性->详细信息,可以看到这些值
    $objPHPExcel->getProperties()  //获得文件属性对象,给下文提供设置资源
                ->setCreator( "admin")     //设置文件的创建者
                ->setLastModifiedBy( "admin")    //最后修改者
                ->setTitle( "Office 2007 XLSX Record Document" )    //标题
                ->setSubject( "Office 2007 XLSX Record Document" )  //主题
                ->setDescription( "Record document for Office 2007 XLSX, generated using PHP classes.") //描述
                ->setKeywords( "office 2007 openxml php")    //关键字
                ->setCategory( "export file");               //类别

    // 设置Excel文档的第一张sheet(工作表)为活动表,即当前操作的表。
    $objPHPExcel->setActiveSheetIndex(0);

    // 获取当前操作的工作表
    $activeSheet = $objPHPExcel->getActiveSheet();

    // 设置工作表的名称
    $activeSheet->setTitle($sheet_name);

    // 返回字符A的  ASCII 码值
    $column = ord('A');    

    // 设置工作表的表头
    foreach ($table_head as $k=>$v) {
        // 字体大小
        $activeSheet->getStyle(chr($column)."1")->getFont()->setSize(13); 
        // 加粗
        $activeSheet->getStyle(chr($column)."1")->getFont()->setBold(true); 
        // 列宽
        $chars = strlen($v);   // 统计字节数
        $activeSheet->getColumnDimension(chr($column))->setWidth($chars*2);
        // 设置单元格的值
        $activeSheet->setCellValue(chr($column)."1", $v);
        // 设置左对齐
        $activeSheet->getStyle(chr($column))->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);

        $column++;
    }

    $column = ord('A');   // 返回字符的  ASCII 码值
    // 将$data中的数据填充到单元格中
    foreach ($data as $row=>$col) {
        $i=0;
        foreach ($col as $k=>$v ) {
            $activeSheet->setCellValue(chr($column+$i).($row+2), $v);
            $i++;
        }
    }

    // 导出Excel表格
    $file_name .= date('Ymd');   // 文件名
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename="'.$file_name.'.xls"');
    header('Cache-Control: max-age=0');
    $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
    $objWriter->save('php://output');
}

然后,在TP框架的控制器层进行测试。

<?php
namespace admin\Controller;

use Think\Controller;
class TestController extends Controller
{
    public function index()
    {
        $data = array(
                    array('id'=>1, 'name'=>'小三', 'id_card'=>'420928199003065555'),
                    array('id'=>2, 'name'=>'小四', 'id_card'=>'420928199003066666'),
                    array('id'=>3, 'name'=>'小五', 'id_card'=>'420928199003067777'),
                    array('id'=>4, 'name'=>'小六', 'id_card'=>'420928199003068888'),
        );

        $table_head = array('用户ID', '姓名', '身份证号');
        export_excel($data, $table_head);
    }
}

最后,在浏览器中访问该URL即可。实际项目中,是把导出按钮指向该地址。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 点我我会动 设计师:白松林 返回首页