ThinkPHP+JUI(DWZ)实现excel导入

浏览:4302 发布日期:2014/04/13 分类:技术分享 关键字: thinkphp jui dwz excel
前端界面代码:<div class="pageContent">
    <form enctype="multipart/form-data" method="post" action="{:U(GROUP_NAME.'/School/importHandle')}" class="pageForm required-validate" onsubmit="return iframeCallback(this,navTabAjaxDone);">
        <div class="pageFormContent" layoutH="58">
            <div class="unit">
                            <label>选择Excel文件:</label>
                                <input type="file" name="file_stu"/>
            </div>
                    <span style="color: #0000FF;margin-left: 80px;">备注:可以上传Microsoft Excel 2003格式的文件(文件名为*.xls),文件大小小于1M。</span>                   
        </div>
        <div class="formBar">
            <ul>
                <li><div class="buttonActive"><div class="buttonContent"><button type="submit">保存</button></div></div></li>
                <li><div class="button"><div class="buttonContent"><button type="button" class="close">取消</button></div></div></li>
            </ul>
        </div>
    </form>
服务器上的处理代码://导入学校名单
    public function import(){
        $this->display();
    }
    //处理导入学校名单
    public function importHandle(){
        if (IS_POST){
            import('ORG.Net.UploadFile');
            $savePath='./data/school/';//上传目录
            @chmod("$savePath",0777);//设置目录可写
            $upload=new UploadFile();
            $upload->maxSize=1000000;//上传附件大小,1M=1000000
            $upload->allowExts=array('xls');//上传附件格式
            $upload->savePath=$savePath;//上传目录,相对于单入口文件
            $upload->saveRule='time';//上传文件命名规则
            
            if($upload->upload()){
                $info=$upload->getUploadFileInfo();
                $file_name=$info[0]['savename'];//获取上传后的新文件名
            }else{
                echo json_encode(array(
                    'statusCode'=>'300',
                    'message'=>'文件上传失败',
                    'navTabId'=>'school',
                    'callbackType'=>'',
                    'forwardUrl'=>''
                ));
            }
            /*
        
               *对上传的Excel数据进行处理生成编程数据,这个函数会在下面第三步的ExcelToArray类中
        
              注意:这里调用执行了第三步类里面的read函数,把Excel转化为数组并返回给$res,再进行数据库写入
        
            */
          $res = $this->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 ['areaid'] = $v[0];
                  $data ['school'] = $v[1];
                  $data ['schoolid'] = $v[2];
                  $result = M ( 'School' )->add ( $data );
                 if (!$result) 
                 {
                    echo json_encode(array(
                        'statusCode'=>'300',
                        'message'=>'导入数据库失败',
                        'navTabId'=>'school',
                        'callbackType'=>'',
                        'forwardUrl'=>''
                    ));
                  }
              }
           }
            echo json_encode(array(
                'statusCode'=>'200',
                'message'=>'操作成功,请关闭上传窗口',
                'navTabId'=>'school',
                'callbackType'=>'',
                'forwardUrl'=>''
            ));
        }
    }
    //读取excel表
    public function read($filename,$encode='utf-8'){
        vendor('Excel.PHPExcel');
        $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; 
    } 
希望对大家有帮助,共同支持thinkphp发展,创造好的技术交流平台。
最佳答案
评论( 相关
后面还有条评论,点击查看>>