Thinkphp5 phpexcel导入导出笔记

首先需要去官网https://github.com/PHPOffice/PHPExcel/下载PHPExcel,下载后只需要Classes目录下的文件即可。

(一)导入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文件进行文件的处理

/**
 * excel数据导出
 */
public function excel() {
    //判断是否是post提交方式
    if(request()->isPost()) {
        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' && strtolower ( $file_type ) != 'xlsx'){
                $this->error('不是Excel文件,请重新上传');
            }
            /*设置上传路径*/
            $savePath = ROOT_PATH . 'public' . DS . 'uploads/attachment/';
            /*以时间来命名上传的文件*/
            $str = date ( 'Ymdhis' );
            $file_name = $str . "." . $file_type;
            /*是否上传成功*/
            if (! copy ( $tmp_file, $savePath . $file_name )) {
                $this->error ( '上传失败' );
            }
            // 调用excel数据导入函数
       $data = import_excel($savePath . $file_name,0);
            echo "<pre>";
            var_dump($data);exit;
        } else {
            $this->error('没有导入excel文件!');
        }
    }

    //模板渲染
    return $this->fetch();
}


第三,编写excel数据导入函数

/**
 *  数据导入
 * @param string $file excel文件,详细地址
 * @param string $sheet
 * @return string   返回解析数据
 * @throws PHPExcel_Exception
 * @throws PHPExcel_Reader_Exception
 */
function import_excel($file='', $sheet=0){
    $file = iconv("utf-8", "gb2312", $file);   //转码
    if(empty($file) OR !file_exists($file)) {
        die('file not exists!');
    }
    // 1.引入excel外部插件
    require_once('../vendor/phpexcel/phpexcel.php');
    //include('PHPExcel.php');  //引入PHP EXCEL    $objRead = new PHPExcel_Reader_Excel2007();   //建立reader对象
    if(!$objRead->canRead($file)){
        $objRead = new PHPExcel_Reader_Excel5();
        if(!$objRead->canRead($file)){
            die('No Excel!');
        }
    }

    $cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');

    $obj = $objRead->load($file);  //建立excel对象
    $currSheet = $obj->getSheet($sheet);   //获取指定的sheet    $columnH = $currSheet->getHighestColumn();   //取得最大的列号
    $columnCnt = array_search($columnH, $cellName);
    $rowCnt = $currSheet->getHighestRow();   //获取总行数

    $data = array();
    for($_row=1; $_row<=$rowCnt; $_row++){  //读取内容
        for($_column=0; $_column<=$columnCnt; $_column++){
            $cellId = $cellName[$_column].$_row;
            $cellValue = $currSheet->getCell($cellId)->getValue();
            //$cellValue = $currSheet->getCell($cellId)->getCalculatedValue();  #获取公式计算的值
            if($cellValue instanceof PHPExcel_RichText){   //富文本转换字符串
                $cellValue = $cellValue->__toString();
            }

            $data[$_row][$cellName[$_column]] = $cellValue;
        }
    }
    //返回excel数据
    return $data;
}


(二)导出Excel

/**
 * 数据 Excel导出
 */
public function excel() {

    //封装自己需要的数组
    $info[0]['order_number'] = 123456;

    // 1.引入excel外部插件
    require_once('../vendor/phpexcel/phpexcel.php');

    // 2.创建一个excel对象
    $objPHPExcel = new \PHPExcel();
    $objPHPExcel->setActiveSheetIndex(0); //切换到新创建的工作表
    // 获取单元格对象
    $activeSheet = $objPHPExcel->getActiveSheet()->setTitle('订单数据');

    // 3.输出第一列数据
    $first_data = array('A'=>'订单号');

    foreach ($first_data as $first_key => $first_value) {
        // 设置 A1,B1,C1等单元格的内容
        $activeSheet->setCellValue("{$first_key}1", $first_value);
        // 设置单元格的样式为居中
        $activeSheet->getStyle("{$first_key}1")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        // 设置单元格的宽度为15
        switch ($first_key) {
            case 'A':
                $activeSheet->getColumnDimension("{$first_key}")->setWidth(20);
                break;
        }
    }

    // 4.从第2行开始插入数据
    $lie_name = array('0'=>'A'); //excel第一列名称
    $lie_num = 0;       //excel列数,从零开始
    $second = 2;        //excel第二行

    foreach ($info as $k => $v) {
        foreach ($v as $e => $f) {
            $activeSheet->setCellValue("{$lie_name[$lie_num]}{$second}", $f);
            // 自动居中
            $activeSheet->getStyle("{$lie_name[$lie_num]}{$second}")->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $lie_num++;
        }
        $activeSheet->getRowDimension("{$second}")->setRowHeight(80);
        $second++;
        $lie_num = 0;
    }

    $objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);
    // 直接输出到浏览器
    header("Pragma:public");
    header("Expires:0");
    header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
    header("Content-Type:application/force-download");
    header("Content-Type:application/vnd.ms-execl");
    header("Content-Type:application/octet-stream");
    header("Content-Type:application/download");
    header("Content-Disposition:attachment;filename=订单数据.xls");
    header("Content-Transfer-Encoding:binary");
    $objWriter->save("php://output");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值