phpexcel

来源:互联网 发布:优米网倒闭知乎 编辑:程序博客网 时间:2024/05/21 18:33

1,前台简单的form或者是ajaxfileupload.js提交

<head>    <meta charset="UTF-8">    <title></title>    <script src="js/jquery-1.7.2.min.js"></script>    <script src="js/ajaxfileupload.js"></script></head><body><script>    jQuery(function(){        $("#buttonUpload").click(function(){            //加载图标            /* $("#loading").ajaxStart(function(){             $(this).show();             }).ajaxComplete(function(){             $(this).hide();             });*/            //上传文件            $.ajaxFileUpload({                url: 'excelOperate.php',//处理脚本                secureuri: false,                fileElementId: 'fileToUpload',//file控件id                dataType: 'json',                success: function (data, status) {                    if (typeof(data.error) != 'undefined') {                        if (data.error != '') {                            alert(data.error);                            if(data.responsefile){                                window.location.href = data.responsefile;                            }                        } else {                            alert(data.message);                            //window.location.href = data.responsefile;                        }                    }                },                error: function (data, status, e) {                    alert(e);                }            });            return false;        })    })</script><!--jqueryUpload 适合上传成功和失败的文件(已经在服务器上的,然后window.location.href 重定向下载)--><div id="upload">    <input id="fileToUpload" type="file" size="20" name="fileToUpload" class="input">    <button id="buttonUpload">上传</button></div><!--form 则可以提交给隐藏的iframe,传递数据流下载(也就是不保存excel文件直接向浏览器返回excel数据流)--><div>    <form method="post" action="excelOperate.php" enctype="multipart/form-data">        <h3>导入Excel表:</h3><input  type="file" name="fileToUpload" />        <input type="submit"  value="导入" />    </form>  <!-- target="excelDownload" <iframe src="" name="excelDownload" frameborder="0" ></iframe>--></div>

2,后台处理(关键)
处理一:

<?php/** * Date: 11/13/2015 * Time: 9:57 AM */$result = array(    "error" => "",    "message" => "",    "responsefile" => "");$fileElementName = 'fileToUpload';//html中上传文件的input的name$allowType = array(".xls",".xlsx",".csv"); //允许上传的文件类型$num      = strrpos($_FILES[$fileElementName]['name'] ,'.');$fileSuffixName    = strtolower(substr($_FILES[$fileElementName]['name'],$num,8));//此数可变$upFilePath             = 'd:/'; //最终存放路径if(!empty($_FILES[$fileElementName]['error'])) {    switch ($_FILES[$fileElementName]['error']) {        case '1':            $error = '传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';            break;        case '2':            $error = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';            break;        case '3':            $error = '文件只有部分被上传';            break;        case '4':            $error = '没有文件被上传';            break;        case '6':            $error = '找不到临时文件夹';            break;        case '7':            $error = '文件写入失败';            break;        default:            $error = '未知错误';    }    $result['error'] = $error;    exit(json_encode($result));}if(empty($_FILES[$fileElementName]['tmp_name']) || $_FILES['fileToUpload']['tmp_name'] == 'none') {    $result['error']  = '没有上传文件.';    exit(json_encode($result));}if(!in_array($fileSuffixName,$allowType)) {    $result['error']  = '不允许上传的文件类型';    exit(json_encode($result));}/* * 如果需要上传文件到指定指定则指向下面的$upFilePath,如果只是处理数据则 $data->read($_FILES[$fileElementName]['tmp_name']);//读取excel累世这种直接读取缓存文件中的数据是一样的if(@move_uploaded_file($_FILES[$fileElementName]['tmp_name'],$upFilePath) === FALSE){    $error = '上传失败';    exit(json_encode($result));}*///开始处理excel//excel验证(标识符)todo//读取excel//将include设置为./Classses/ 路径set_include_path(get_include_path() . PATH_SEPARATOR . './Classes/');include 'PHPExcel/IOFactory.php';//读出excel数据$exceldata = excelRead(($_FILES[$fileElementName]['tmp_name']));//读出错返回错误json//你自己对应的数据处理和筛选//如果要保存或者是输出对应反馈excelexcelWrite('data',$a = array(), $exceldata, false, 5);/** * @param $filename * @return array * @throws PHPExcel_Exception * @throws PHPExcel_Reader_Exception */function excelRead($filename){    $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();        }        /*可筛选固定的列       $excelData[$row]['id'] = $objPHPExcel->getActiveSheet()->getCell("A".$row)->getValue();//ID       $excelData[$row]['name'] = $objPHPExcel->getActiveSheet()->getCell("D".$row)->getValue();//姓名        */    }    return $excelData;}/** * @param array $data  一个二维数组,结构如同从数据库查出来的数组 * @param array $title excel的第一行标题,一个数组,如果为空则没有标题 * @param string $filename  下载的文件名 * 但是对07以上的excel出错 * * exportexcel($arr,array('id','账户','密码','昵称'),'文件名!'); */function excelWrite1($data=array(),$title=array(),$filename='report'){    header("Content-type:application/octet-stream");    header("Accept-Ranges:bytes");    header("Content-type:application/vnd.ms-excel");    header("Content-Disposition:attachment;filename=".$filename.".xls");    header("Pragma: no-cache");    header("Expires: 0");    //导出xls 开始    if (!empty($title)){        foreach ($title as $k => $v) {            $title[$k]=iconv("UTF-8", "GB2312",$v);        }        $title= implode("\t", $title);        echo "$title\n";    }    if (!empty($data)){        foreach($data as $key=>$val){            foreach ($val as $ck => $cv) {                $data[$key][$ck]=iconv("UTF-8", "GB2312", $cv);            }            $data[$key]=implode("\t", $data[$key]);        }        echo implode("\n",$data);    }}/*列索引*/function getExcelColumnValue($index){    $array = range('A', 'Z');    $columnValue = '';    if ($index >= 26) {        $columnValue = getExcelColumnValue(intval($index / 26) - 1) . $array[$index % 26];    } else {        $columnValue = $array[$index] . $columnValue;    }    return $columnValue;}/** * @param $fileName * @param $headArr * @param $data    excel数据 * @param bool|false $colNum  默认不限制列数,防止有些很末尾的列数隐藏数值而中间都是空的 * @param bool|false $local  默认浏览器下载excel * @throws PHPExcel_Exception */function excelWrite($fileName, $headArr, $data,$local = false, $colNum = false){    if (empty($data) || !is_array($data)) {        die("data must be a array");    }    if (empty($fileName)) {        exit;    }    if(is_numeric($colNum) && is_int($colNum+0) && ((int)$colNum > 0) ) {        $colNumCount = true;    }    $date = date("Y_m_d", time());    /* if($local) {    //03兼容格式         $fileName .= "_{$date}.xls";     }else{         $fileName .= "_{$date}.xlsx";     }*/    $fileName .= "_{$date}.xls";    //创建新的PHPExcel对象    $objPHPExcel = new PHPExcel();    $objProps = $objPHPExcel->getProperties();    if(is_array($headArr) && !empty($headArr)){        //设置表头        $columindex = 0;        foreach ($headArr as $key => $v) {            if($colNumCount ) {                if(((int)$columindex < (int)$colNum)) {                    $colum = getExcelColumnValue($columindex);                    $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);                    $columindex++;                }            }else{                $colum = getExcelColumnValue($columindex);                $objPHPExcel->setActiveSheetIndex(0)->setCellValue($colum . '1', $v);                $columindex++;            }        }        $row = 2;    }else{        $row = 1;    }    $objActSheet = $objPHPExcel->getActiveSheet();    $objPHPExcel->getActiveSheet()->getStyle( 'A1:E1')->getFill()->getStartColor()->setARGB('FF0094FF');    //$objPHPExcel->getActiveSheet()->getStyle( 'A1:E1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);    /*$objPHPExcel->getActiveSheet()->getStyle( 'A3:A10')->applyFromArray(        array(            'font'    => array (                'bold'      => true            ),            'alignment' => array (                'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT ,            ),            'borders' => array (                'top'     => array (                    'style' => PHPExcel_Style_Border::BORDER_THIN                )            ),            'fill' => array (                'type'       => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR ,                'rotation'   => 90,                'startcolor' => array (                    'argb' => 'FFA0A0A0'                ),                'endcolor'   => array (                    'argb' => 'FF0094FF'                )            )        )    );*/    foreach ($data as $key => $rows) { //行写入        $columindex = 0;        foreach ($rows as $keyName => $value) {// 列写入            if($colNumCount){                if(((int)$columindex < (int)$colNum)) {                    $colum = getExcelColumnValue($columindex);                    //宽度                    //$objActSheet->getColumnDimension($colum)->setAutoSize(true);                    //颜色                    $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('FF808080');                    $objActSheet->setCellValue($colum . $row, $value);                    $columindex++;                }            } else {                $colum = getExcelColumnValue($columindex);                //宽度                //$objActSheet->getColumnDimension($colum)->setAutoSize(true);                //颜色                //$objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('FF808080');                $objActSheet->setCellValue($colum . $row, $value);                $columindex++;            }        }        $row++;    }    $fileName = iconv("utf-8", "gb2312", $fileName);    //重命名表    $objPHPExcel->getActiveSheet()->setTitle('Simple');    //设置活动单指数到第一个表,所以Excel打开这是第一个表    $objPHPExcel->setActiveSheetIndex(0);    //将输出重定向到一个客户端web浏览器(Excel2007)    $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);    if($local) {        $objWriter->save($fileName); //脚本方式运行,保存在当前目录    }else{        //$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');这个中可以输出xlsx        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');        header("Content-Disposition: attachment; filename=\"$fileName\"");        header('Cache-Control: max-age=0');        $objWriter->save('php://output');    }    exit;}

处理二:

<?php/** * Date: 2015/11/16 * Time: 18:20 */$result = array(    "error" => "",    "message" => "",    "responsefile" => "");$fileElementName = 'fileToUpload';//html中上传文件的input的name$allowType = array(".xls",".xlsx",".csv"); //允许上传的文件类型$num      = strrpos($_FILES[$fileElementName]['name'] ,'.');$fileSuffixName    = strtolower(substr($_FILES[$fileElementName]['name'],$num,8));//此数可变$upFilePath             = 'd:/'; //最终存放路径if(!empty($_FILES[$fileElementName]['error'])) {    switch ($_FILES[$fileElementName]['error']) {        case '1':            $error = '传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';            break;        case '2':            $error = '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';            break;        case '3':            $error = '文件只有部分被上传';            break;        case '4':            $error = '没有文件被上传';            break;        case '6':            $error = '找不到临时文件夹';            break;        case '7':            $error = '文件写入失败';            break;        default:            $error = '未知错误';    }    $result['error'] = $error;    exit(json_encode($result));}if(empty($_FILES[$fileElementName]['tmp_name']) || $_FILES['fileToUpload']['tmp_name'] == 'none') {    $result['error']  = '没有上传文件.';    exit(json_encode($result));}if(!in_array($fileSuffixName,$allowType)) {    $result['error']  = '不允许上传的文件类型';    exit(json_encode($result));}/* * 如果需要上传文件到指定指定则指向下面的$upFilePath,如果只是处理数据则 $data->read($_FILES[$fileElementName]['tmp_name']);//读取excel累世这种直接读取缓存文件中的数据是一样的if(@move_uploaded_file($_FILES[$fileElementName]['tmp_name'],$upFilePath) === FALSE){    $error = '上传失败';    exit(json_encode($result));}*///开始处理excel//excel验证(标识符)todo//读取excel//将include设置为./Classses/ 路径set_include_path(get_include_path() . PATH_SEPARATOR . './Classes/');include 'PHPExcel/IOFactory.php';include('PHPExcel.php');$excelData = excelRead(($_FILES[$fileElementName]['tmp_name']));$excelHeader = array('a1','a2','a3','a4','a5','a6','a7','a8','a9','a10');excelWrite('aaa', $excelData,$excelHeader, false);function excelRead($excelfile){    if(is_null($excelfile)){       exit('excel文件不存在');   }    $exceldata = array();    $reader         =  PHPExcel_IOFactory::createReaderForFile($excelfile); #Excel2007    $reader->setReadDataOnly(true);    $excel= $reader->load($excelfile);    $sheet=$excel->getActiveSheet();    $highestRow = $sheet->getHighestRow(); // 取得总行数,从一开始    $highestColumm = $sheet->getHighestColumn(); // 取得总列数,从0开始    //检查excel存在于AZ位置上的密码是否为20021514    /*$key = $sheet -> getCellByColumnAndRow( 51 , 1 ) -> getValue();//按照索引取    if( $key != '20021514' ){}else{}*/    //不包含excel头行    for($row = 2 ;$row <= $highestRow ;$row++){        //直接选择列        $i = $row - 2;        $exceldata[$i][] = trim($sheet->getCellByColumnAndRow(0 , $row)->getValue());        $exceldata[$i][] = trim($sheet->getCellByColumnAndRow(1 , $row)->getValue());        $exceldata[$i][] = trim($sheet->getCellByColumnAndRow(2 , $row)->getValue());        $exceldata[$i][] = trim($sheet->getCellByColumnAndRow(3 , $row)->getValue());        $exceldata[$i][] = trim($sheet->getCellByColumnAndRow(4 , $row)->getValue());        $exceldata[$i][] = trim($sheet->getCellByColumnAndRow(5 , $row)->getValue());        $exceldata[$i][] = trim($sheet->getCellByColumnAndRow(6 , $row)->getValue());        $exceldata[$i][] = trim($sheet->getCellByColumnAndRow(7 , $row)->getValue());        $exceldata[$i][] = trim($sheet->getCellByColumnAndRow(8 , $row)->getValue());        $exceldata[$i][] = trim($sheet->getCellByColumnAndRow(9 , $row)->getValue());    }    //对数据做相应处理    return $exceldata;}function excelWrite($filename, $exceldata, $excelHeader, $local =false, $uploadPath = './upload/41'){    $writer =  new PHPExcel();    $writer -> setActiveSheetIndex(0);    $writer_sheet = $writer-> getActiveSheet();    $writerow = 1;    if(is_array($excelHeader) && !empty($excelHeader)){      foreach($excelHeader as $k => $v){          $writer_sheet ->setCellValueByColumnAndRow($k, $writerow, $v);      }        $writerow++;    }    foreach($exceldata as $data){        foreach($data as $k =>$v){            $writer_sheet -> setCellValueByColumnAndRow($k, $writerow, $v);        }        $writerow++;    }    //假设,之后加个默认上传路径    $filename = $filename.".xls" ;    $filename = iconv("utf-8", "gb2312", $filename);    if($local){        $output = $uploadPath."/".$filename ;        $PHPExcelWriter = PHPExcel_IOFactory::createWriter($writer, 'Excel5');        $PHPExcelWriter -> save($output);       /* header("Content-type: application/force-download");        header("Content-Disposition: attachment; Filename=\"$filename\"");        header("Content-Length: ".Filesize($output));        @readFile($output);*/    }else{        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');        header("Content-Disposition: attachment; filename=\"$filename\"");        header('Cache-Control: max-age=0');        $PHPExcelWriter = PHPExcel_IOFactory::createWriter($writer, 'Excel5');        $PHPExcelWriter->save('php://output');    }}

代码下载链接
http://download.csdn.net/detail/u012329424/9267103

0 0