phpexcel组件编程spl,PHPExcel

发布时间:2022-11-26

本文目录一览:

  1. 如何在Yii Framework中使用PHPExcel组件
  2. PHP-ExcelReader 怎样才能支持读取excel2007文档
  3. thinkphp怎么用phpexcel导出数据到excel

如何在Yii Framework中使用PHPExcel组件

如果是Yii2的话,可以使用composer安装phpexcel库,具体搜索。 安装后,use 这个phpexcel,然后就可以使用这个库了,不use导入进来也可以,不过用的时候要把namespace也写进来才能正确找到这个类。对于phpexcel的方法就不说了,网上有。 如果是yii1版本的话,你搜搜看有没有phpexcel的插件之类的吧,一般都会有,你可以到官方那搜索。使用方法插件作者都有说。(没在yii1.x用过,只在yii2用过) 对于phpexcel的使用就不多说了,官方和网上都有很多说明。

PHP-ExcelReader 怎样才能支持读取excel2007文档

php-excel-reader是一个读取excel的类,可以很轻松的使用它读取excel文件非常方便。 下载地址: php代码如下:

<?php
/*by */
header("Content-Type:text/html;charset=utf-8");
require_once 'excel_reader2.php';
//创建对象
$data = new Spreadsheet_Excel_Reader();
//设置文本输出编码
$data->setOutputEncoding('UTF-8');
//读取Excel文件
$data->read("example.xls");
//$data->sheets[0]['numRows']为Excel行数
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
    //$data->sheets[0]['numCols']为Excel列数
    for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
        //显示每个单元格内容
        echo $data->sheets[0]['cells'][$i][$j].' ';
    }
    echo '<br>';
}
?>

读取结果截图如下:

thinkphp怎么用phpexcel导出数据到excel

(一)导入Excel

第一,在前台html页面进行上传文件:如:

<form method="post" action="php文件" enctype="multipart/form-data">
    <h3>导入Excel表:</h3>
    <input type="file" name="file_stu" />
    <input type="submit" value="导入" />
</form>

第二,在对应的php文件进行文件的处理

if (!empty($_FILES['file_stu']['name'])) {
    $tmp_file = $_FILES['file_stu']['tmp_name'];
    $file_types = explode(".", $_FILES['file_stu']['name']);
    $file_type = $file_types[count($file_types) - 1];
    /*判别是不是.xls文件,判别是不是excel文件*/
    if (strtolower($file_type) != "xls") {
        $this->error('不是Excel文件,重新上传');
    }
    /*设置上传路径*/
    $savePath = SITE_PATH . '/public/upfile/Excel/';
    /*以时间来命名上传的文件*/
    $str = date('Ymdhis');
    $file_name = $str . "." . $file_type;
    /*是否上传成功*/
    if (!copy($tmp_file, $savePath . $file_name)) {
        $this->error('上传失败');
    }
    /*
     * 对上传的Excel数据进行处理生成编程数据,这个函数会在下面第三步的ExcelToArray类中
     注意:这里调用执行了第三步类里面的read函数,把Excel转化为数组并返回给$res,再进行数据库写入
     */
    $res = Service('ExcelToArray')->read($savePath . $file_name);
    /*
     重要代码 解决Thinkphp M、D方法不能调用的问题
     如果在thinkphp中遇到M、D方法失效时就加入下面一句代码
     */
    //spl_autoload_register(array('Think', 'autoload'));
    /*对生成的数组进行数据库的写入*/
    foreach ($res as $k => $v) {
        if ($k != 0) {
            $data['uid'] = $v[0];
            $data['password'] = sha1('111111');
            $data['email'] = $v[1];
            $data['uname'] = $v[3];
            $data['institute'] = $v[4];
            $result = M('user')->add($data);
            if (!$result) {
                $this->error('导入数据库失败');
            }
        }
    }
}

第三:ExcelToArrary类,用来引用phpExcel并处理Excel数据的

class ExcelToArrary extends Service {
    public function __construct() {
        /*导入phpExcel核心类 注意 :你的路径跟我不一样就不能直接复制*/
        include_once('./Excel/PHPExcel.php');
    }
    /**
     * 读取excel $filename 路径文件名 $encode 返回数据的编码 默认为utf8
     * 以下基本都不要修改
     */
    public function read($filename, $encode = 'utf-8') {
        $objReader = PHPExcel_IOFactory::createReader('Excel5');
        $objReader->setReadDataOnly(true);
        $objPHPExcel = $objReader->load($filename);
        $objWorksheet = $objPHPExcel->getActiveSheet();
        $highestRow = $objWorksheet->getHighestRow();
        $highestColumn = $objWorksheet->getHighestColumn();
        $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
        $excelData = array();
        for ($row = 1; $row <= $highestRow; $row++) {
            for ($col = 0; $col < $highestColumnIndex; $col++) {
                $excelData[$row][] = (string)$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
            }
        }
        return $excelData;
    }
}

第四,以上就是导入的全部内容,phpExcel包附在最后。

(二)Excel的导出(相对于导入简单多了)

第一,先查出数据库里面要生成Excel的数据,如:

$data = M('User')->findAll(); //查出数据
$name = 'Excelfile'; //生成的Excel文件文件名
$res = service('ExcelToArrary')->push($data, $name);

第二,ExcelToArrary类,用来引用phpExcel并处理数据的

class ExcelToArrary extends Service {
    public function __construct() {
        /*导入phpExcel核心类 注意 :你的路径跟我不一样就不能直接复制*/
        include_once('./Excel/PHPExcel.php');
    }
    /* 导出excel函数*/
    public function push($data, $name = 'Excel') {
        error_reporting(E_ALL);
        date_default_timezone_set('Europe/London');
        $objPHPExcel = new PHPExcel();
        /*以下是一些设置 ,什么作者 标题啊之类的*/
        $objPHPExcel->getProperties()
            ->setCreator("转弯的阳光")
            ->setLastModifiedBy("转弯的阳光")
            ->setTitle("数据EXCEL导出")
            ->setSubject("数据EXCEL导出")
            ->setDescription("备份数据")
            ->setKeywords("excel")
            ->setCategory("result file");
        /*以下就是对处理Excel里的数据, 横着取数据,主要是这一步,其他基本都不要改*/
        foreach ($data as $k => $v) {
            $num = $k + 1;
            $objPHPExcel->setActiveSheetIndex(0)
                //Excel的第A列,uid是你查出数组的键值,下面以此类推
                ->setCellValue('A' . $num, $v['uid'])
                ->setCellValue('B' . $num, $v['email'])
                ->setCellValue('C' . $num, $v['password']);
        }
        $objPHPExcel->getActiveSheet()->setTitle('User');
        $objPHPExcel->setActiveSheetIndex(0);
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="' . $name . '.xls"');
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
        $objWriter->save('php://output');
        exit;
    }
}

第三,以上就是导出的全部内容,phpExcel包附在最后。