zoukankan      html  css  js  c++  java
  • thinkphp3.23整合phpexcel

    HINKPHP3.2.3整合PHPexcel实现数据的导入导出。可以上传excel文件后批量导入到数据库,兼容.xls和.xlsx格式;数据库里的数据可以按照搜索条件和分页导出为excel文件。
    最近接了一个小活,客户要求实现既可以手工录入数据又可以excel文件上传后批量导入到数据库,要求兼容.xls和.xlsx格式;数据库里的数据可以按照搜索条件和分页导出为excel文件。比较麻烦的是excel里的一个机型字段是一对多的,即一个产品对应多个机型,是按照逗号分隔的,导入时要先将机型分隔成数组,然后再判断该机型是否存在,不存在就插入到机型表里,存在则获取到该机型对应的id,然后将id用逗号拼接成字符串存入数据库中。特将代码公开,以方便大家学习。
    源码里包含PHPExcel组件,一个控制器文件和一个视图文件,PHPExcel和PHPExcel.class.php放入thinkphp的Library/Org/Util/目录下。

    一:去官网http://phpexcel.codeplex.com/下载最新PHPExcel

    文件存放

    ExcelReader类:

    <?php
    namespace Lib;
    import("Org.Util.PHPExcel");
    import("Org.Util.PHPExcel.Reader.Excel5");
    import("Org.Util.PHPExcel.Reader.Excel2007");
    class ExcelReader {
    	/**
    	 * 读取excel
    	 * @param unknown_type $excelPath:excel路径
    	 * @param unknown_type $allColumn:读取的列数
    	 * @param unknown_type $sheet:读取的工作表
    	 */
    	public static function reader_excel($excelPath, $allColumn = 0, $sheet = 0) {
    		$excel_arr = array();
    
    		//默认用excel2007读取excel,若格式 不对,则用之前的版本进行读取
    		$PHPReader = new PHPExcel_Reader_Excel2007();
    		if(!$PHPReader->canRead($excelPath)) {
    			$PHPReader = new PHPExcel_Reader_Excel5();
    			if(!$PHPReader->canRead($excelPath)) {
    				//返回空的数组
    				return $excel_arr;	
    			}
    		}
    		
    		//载入excel文件
    		$PHPExcel  = new PHPExcel();
    		$PHPExcel  = $PHPReader->load($excelPath);
    		
    		//获取工作表总数
    		$sheetCount = $PHPExcel->getSheetCount();
    		
    		//判断是否超过工作表总数,取最小值
    		$sheet = $sheet < $sheetCount ? $sheet : $sheetCount;
    		
    		//默认读取excel文件中的第一个工作表
    		$currentSheet = $PHPExcel->getSheet($sheet);
    		
    		if(empty($allColumn)) {
    			//取得最大列号,这里输出的是大写的英文字母,ord()函数将字符转为十进制,65代表A
    			$allColumn = ord($currentSheet->getHighestColumn()) - 65 + 1;
    		}
    		
    		//取得一共多少行
    		$allRow = $currentSheet->getHighestRow();
    		
    		//从第二行开始输出,因为excel表中第一行为列名
    		for($currentRow = 2; $currentRow <= $allRow; $currentRow++) {
    			for($currentColumn = 0; $currentColumn <= $allColumn - 1; $currentColumn++) {
    				$val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();
    				$excel_arr[$currentRow - 2][$currentColumn] = $val;
    			}
    		}
    		
    		//返回二维数组
    		return $excel_arr;
    	}
    }
    
    ?>
    

      

     导出

    $resultPHPExcel = new PHPExcel();
    //设置参数
    //设值
    $resultPHPExcel->getActiveSheet()->setCellValue('A1', 'id');
    $resultPHPExcel->getActiveSheet()->setCellValue('B1', '省');
    $resultPHPExcel->getActiveSheet()->setCellValue('C1', '市');
    $resultPHPExcel->getActiveSheet()->setCellValue('D1', '区');
    $i = 2;
    foreach($data as $item){
        $resultPHPExcel->getActiveSheet()->setCellValue('A' . $i, $item['id']);
        $resultPHPExcel->getActiveSheet()->setCellValue('B' . $i, $item['province']);
        $resultPHPExcel->getActiveSheet()->setCellValue('C' . $i, $item['city']);
        $resultPHPExcel->getActiveSheet()->setCellValue('C' . $i, $item['district']);
        $i ++;
    }
    //设置导出文件名
    $outputFileName = 'total.xls';
    $xlsWriter = new PHPExcel_Writer_Excel5($resultPHPExcel);
    //ob_start(); ob_flush();
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header('Content-Disposition:inline;filename="'.$outputFileName.'"');
    header("Content-Transfer-Encoding: binary");
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Pragma: no-cache");
    $xlsWriter->save("20160623.xls");
    

      

  • 相关阅读:
    CentOS7最小化安装后要做的事
    Django 2.0 新特性
    Django2.+ path配置
    Django 安装
    Django基础
    http协议
    Centos7 下mysql大小写敏感问题
    CentOS 设置mysql的远程访问
    Linux下彻底卸载mysql详解
    静态库和动态库
  • 原文地址:https://www.cnblogs.com/CHEUNGKAMING/p/5619493.html
Copyright © 2011-2022 走看看