TP5使用PHPExcel的教材案例

2017年08月06日 2,837 次阅读 0 条评论 266 人点赞
最近很多人在问TP5如何通过PHPExcel组件做导入,下面这部分代码是最近做的一个案例,如果有问题请留言,我会在收到留言第一时间给予回复。

安装PHPExcel

网上很多版本都说要先从官网下载PHPExcel,然后放到vendor目录,这是TP5以前版本的用法。TP5版本直接可以使用composer安装(composer这一块不会的自己去找教程):
composer require phpoffice/phpexcel
1.自定义导入接口类PHPExcelApi

 * @copyright: copyright 2016-12-16 ysongyang all rights reserved.
 * @license http://www.apache.org/licenses/LICENSE-2.0
 */
namespace app\api\controller;

use think\Controller;
use PHPExcel_IOFactory;
use PHPExcel;

class PHPExcelApi extends Controller
{
    public function _initialize()
    {
        parent::_initialize();
    }
    /**
     * 导入方法
     * @param $filename
     * @param string $exts
     * @return array
     * @throws \PHPExcel_Exception
     */
    public function importExcel($filename, $exts)
    {
        //$PHPExcel = $exts == 'xls' ? new \PHPExcel_Reader_Excel5() : new \PHPExcel_Reader_Excel2007();
        $PHPExcel = $exts == 'xls' ? PHPExcel_IOFactory::createReader("Excel5") : PHPExcel_IOFactory::createReader("Excel2007");
        //载入文件
        $PHPSheet = $PHPExcel->load($filename);
        //获取表中的第一个工作表,如果要获取第二个,把0改为1,依次类推
        $currentSheet = $PHPSheet->getSheet(0);
        //获取总列数
        $allColumn = $currentSheet->getHighestColumn();
        //获取总行数
        $allRow = $currentSheet->getHighestRow();
        $data = array();
        //循环获取表中的数据,$currentRow表示当前行,从哪行开始读取数据,索引值从0开始
        for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {
            //从哪列开始,A表示第一列
            for ($currentColumn = 'A'; $currentColumn <= $allColumn; $currentColumn++) {
                //数据坐标
                $address = $currentColumn . $currentRow;
                //读取到的数据,保存到数组$arr中
                $cell = $currentSheet->getCell($address)->getValue();
                //$cell = $data[$currentRow][$currentColumn];
                if ($cell instanceof \PHPExcel_RichText) {
                    $cell = $cell->__toString();
                }
                $data[$currentRow][$currentColumn] = $cell;
            }
        }
        return $data;
    }
    
}
2.在执行导入的操作方法里添加一下代码,具体根据自己情况修改:
$php_excel = new PHPExcelApi();
$data = $this->request->param();
/*$data['xls'] = "/uploads/file/20170421/fa11aea0bb7730fc19c94dd5c58d160c.xls";*/
$ext = explode('.', $data['xls']);
$result = $php_excel->importExcel("." . $data['xls'], $ext[1]);
$res = importData($result); //调用数据处理方法
3.将导入的数据进行处理并做入库处理
/**
 * 处理导入的数据
 * @param $data
 * @return bool
 */
public function importData($data)
{
    $arr = $info = array();
    foreach ($data as $key => $val) {
        $rows = $key;
        foreach ($val as $k => $v) {
            //将$k 转换为数据库对应的列字段
            switch ($k) {
                case "A" :
                    $k = "name";
                    break;
                case "B" :
                    $k = "sex";
                    break;
                case "C" :
                    $k = "id_card";
                    break;
                case "D" :
                    $k = "student_id";
                    break;
                case "E" :
                    $k = "guardian_name";
                    break;
                case "F" :
                    $k = "guardian_mobile";
                    break;
            }
            $info[$k] = $v;
            $info['type'] = 1;
        }
        $arr[$rows] = $info;
        var_dump($arr); //查看数组,然后对数组进行入库处理
    }
}
 

讲梦想、讲奋斗可以,前提是钱要给够。

文章评论(0

接收回复邮件通知
非注册会员初次评论需要审核,审核时间(09:00-18:00),请耐心等待...