phpexcle 数据导入导出

   /**
     * 导出未回答的问题
     * @date   2017-09-13
     * @return bool or string
     */
    function  onexport(){
         set_time_limit(0);
         $sql = 'select a.*,b.description from '. DB_TABLEPRE .'answer as a left join '.DB_TABLEPRE.'question as b on a.qid=b.id where a.content =""';
         $export_data = $this->db->fetch_all($sql);
         if(is_array($export_data)){
             include_once ('./plugin/PHPExcel/PHPExcel/IOFactory.php');
             // Create new PHPExcel object
             $objPHPExcel = new PHPExcel();
             // Set properties
             $objPHPExcel->getProperties()->setCreator("ctos")
                 ->setLastModifiedBy("ctos")
                 ->setTitle("Office 2007 XLSX Test Document")
                 ->setSubject("Office 2007 XLSX Test Document")
                 ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
                 ->setKeywords("office 2007 openxml php")
                 ->setCategory("Test result file");

             // set width
             $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
             $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(10);
             $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
             $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(40);
             $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(40);
             $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(40);

             // 设置行高度
             $objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);
             $objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);

             // 字体和样式
             $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);
             $objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getFont()->setBold(true);
             $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);

             $objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
             $objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

             // 设置水平居中
             $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
             $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
             $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
             $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
             $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
             $objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
             $objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

             // 表头
             $elx_title ='未回答的问题';
             $objPHPExcel->setActiveSheetIndex(0)
                 //->setCellValue('A1', $elx_title)
                 ->setCellValue('A1', '回答ID')
                 ->setCellValue('B1', '问题ID')
                 ->setCellValue('C1', '提问者')
                 ->setCellValue('D1', '问题')
                 ->setCellValue('E1', '问题补充')
                 ->setCellValue('F1', '回答');
             // 内容
             for ($i = 0, $len = count($export_data); $i < $len; $i++) {
                 $objPHPExcel->getActiveSheet(0)->setCellValue('A' . ($i + 2), $export_data[$i]['id']);
                 $objPHPExcel->getActiveSheet(0)->setCellValue('B' . ($i + 2), $export_data[$i]['qid']);
                 $objPHPExcel->getActiveSheet(0)->setCellValue('C' . ($i + 2), $export_data[$i]['author']);
                 $objPHPExcel->getActiveSheet(0)->setCellValue('D' . ($i + 2), $export_data[$i]['title']);
                 $objPHPExcel->getActiveSheet(0)->setCellValue('E' . ($i + 2), $export_data[$i]['description']);
                 $objPHPExcel->getActiveSheet(0)->setCellValue('F' . ($i + 2), $export_data[$i]['content']);
                 $objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 2) . ':F' . ($i + 2))->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
                 $objPHPExcel->getActiveSheet()->getStyle('A' . ($i + 2) . ':F' . ($i + 2))->getBorders()->getAllBorders()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
                 $objPHPExcel->getActiveSheet()->getRowDimension($i + 2)->setRowHeight(16);
             }

             // Rename sheet
             //$objPHPExcel->getActiveSheet()->setTitle($elx_title);

             // Set active sheet index to the first sheet, so Excel opens this as the first sheet
             $objPHPExcel->setActiveSheetIndex(0);
             // 输出
             header('Content-Type: application/vnd.ms-excel');
             header('Content-Disposition: attachment;filename="' . $elx_title . '.xls"');
             header('Cache-Control: max-age=0');
             $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
             $objWriter->save('php://output');
         }
    }
   /**
     * 导入回复问题的答案
     * @date   2017-09-13
     * @return bool or string
     * 数据格式:
     * array(5) {
                [0]=>问题ID
                [1]=>提问者
                [2]=>问题
                [3]=>问题补充
                [4]=>回答
      }
     */
    protected function importAnswerUpdateData($files){
        header("Content-type: text/html; charset=utf-8");
        if (!isset($files['importdata']['tmp_name']) && !$files['importdata']['tmp_name']) {
            echo  '请选择导入的文件';exit();
        }
        $path = './importdata/' . date('Ymd',time());
        if(!is_dir($path)){
            mkdir($path,0777,true);
        }
        $file_name = $path.'/'.date('YmdHis',time()).'.xls';
        $flag = move_uploaded_file($files['importdata']['tmp_name'],$file_name);
        if($flag){
            set_time_limit(0); //设置页面等待时间
            include_once ('./plugin/PHPExcel/PHPExcel/IOFactory.php');
            //文件的扩展名
            $ext = strtolower(pathinfo($file_name,PATHINFO_EXTENSION));
            if($ext == 'xlsx'){
                $reader = PHPExcel_IOFactory::createReader('Excel2007');
            }elseif($ext == 'xls'){
                $reader = PHPExcel_IOFactory::createReader('Excel5');
            }
            $PHPExcel = $reader->load($file_name); // 文档名称
            $objWorksheet = $PHPExcel->getActiveSheet();
            $highestRow   = $objWorksheet->getHighestRow();       // 取得总行数
            // 一次读取一列
            $res = array();
            for ($row = 2; $row <= $highestRow; $row++) {
                for ($column = 0; $column<6; $column++) {
                    $val = $objWorksheet->getCellByColumnAndRow($column, $row)->getValue();
                    if($val){
                         $res[$row-2][$column] = $val;
                    }
                }
            }
            //更改每条数据
            $count = 0;
            foreach ($res as $value){
                    try{
                        $this->db->query('set autocommit=0');
                        $this->db->query('start transaction');
                        //更新answer 表的 回答
                        if($value[5]){
                            $this->db->query("UPDATE " . DB_TABLEPRE . "answer   SET content='".$value[5]."', time=".time()." WHERE id=$value[0] ");
                        }
                        //更新question 表的 问题补充
                        if ($value[4]) {
                            $this->db->query("UPDATE " . DB_TABLEPRE . "question SET description='" . $value[4] . "' WHERE id=$value[1] ");
                        }
                        $this->db->query('commit');
                        $this->db->query('set autocommit=1');
                        $count ++;
                    }catch (Exception $e){
                        $this->db->query('ROLLBACK');
                        echo $e->getMessage();
                    }
            }
            echo '<script>alert("总共更新了 : 【'.$count.'】条数据");</script>';
        }
    }


猜你喜欢

转载自blog.csdn.net/u011341352/article/details/77979432