phpExcel读取表格数据和向表格填充数据

1 .下载phpexcel 下载地址:https://github.com/PHPOffice/PHPExcel/archive/1.8.zip.

2 .引入 PHPExcel.php文件。

3.下面就将excel数据导入到mysql数据库和把数据从mysql导出到excel两种方式来介绍。

3.1 将数据导入到mysql中。

//第一种导入方式,该方式要求导入的excel表格表头列数要和对应数据表字段一致

$dir=dirname(__FILE__); //获取当前路径 
$filename=$dir.'/excel_upload/'.$res; //excle表路径

$fileType=PHPExcel_IOFactory::identify($filename);//自动获取文件的类型提供给phpexcel用
    $objReader=PHPExcel_IOFactory::createReader($fileType);//获取文件读取操作对象
    $objReader->setLoadSheetsOnly($sheetName);//只加载指定的sheet
    $objPHPExcel=$objReader->load($filename);//加载文件

 //获取表格的当前sheet中B2里面的值开始
        $objWorksheet = $objPHPExcel->getActiveSheet(); //获取导入表格的当前sheet
        $resl3=trim($objWorksheet->getCell('B2')->getValue()); //获取指定单元格的值,请去除前后空格。
 
    //获取表格的当前sheet中B2里面的值结束


//循环读取数据开始

foreach($objPHPExcel->getWorksheetIterator() as $sheet){//循环取sheet
    foreach($sheet->getRowIterator() as $row){//逐行处理

            if($row->getRowIndex()<2){
                continue;
            }
            $arr=[];
            $index=1;
            $arr2=[];
            foreach($row->getCellIterator() as $cell){//逐列读取
                    $data=$cell->getValue();//获取单元格数据
                  //  echo $data."";
               //if开始
                  if($index<18){
                    $index=$index+1;
                   // echo $index;
                 // echo "
"; //获取项目名称开始 $arr2[]=$data; $x_no_type2=gettype($arr2['0']); if($x_no_type2=gettype($arr2['0'])=='string'){ $row->getRowIndex(); //获取当前行数 if($row->getRowIndex()==2){ $zaname=$arr2['0']; } } //获取项目名称结束 // $arr["zs_name"]='测试测试'; $arr["zs_name"]=$zaname; $arr[$arrzd[$index]]=$data; //读每一行的每一列数据根据需要放入数组 } //if结束 } $x_no_type=gettype($arr['x_no']); if($x_no_type=gettype($arr['x_no'])=='double'){ $db->insert('butt',$arr); //把数据逐行写入数据表,写入语法根据数据库类来进行写入 } } echo ""; } //循环取数据结束 //第二种导入方式,该方式要求只要excel中表头的名称在对应数据表里面包含的有,就能导入,灵活性和适用性更好 $dir=dirname(__FILE__); //当前路径 if (!empty($_POST)) { // foreach($files as $v) { // if($v=="." || $v==".."){continue;} $xy_num=trim($_POST["xy_num"]); $jiedao=trim($_POST["jiedao"]); $attribute=trim($_POST["attribute"]); $roomtime=trim($_POST["roomtime"]); //文件上传开始 if ($_FILES){ $file = $_FILES['uploadFile']; vendor\FileUploader::setTypes(array('image/jpg', 'image/jpeg', 'image/pjpeg', 'image/png')); $res = vendor\FileUploader::uploadOne($file, 'excel_upload'); $filename=$dir.'/excel_upload/'.$res; // $filename = $realpath . '/' . $v; // var_dump($filename);exit; $fileType=PHPExcel_IOFactory::identify($filename);//自动获取文件的类型提供给phpexcel用 $objReader=PHPExcel_IOFactory::createReader($fileType);//获取文件读取操作对象 $objReader->setLoadSheetsOnly($sheetName);//只加载指定的sheet $objPHPExcel=$objReader->load($filename);//加载文件 //获取表格的当前sheet中B2里面的值开始 $objWorksheet = $objPHPExcel->getActiveSheet(); // $resl3=trim($objWorksheet->getCell('B2')->getValue()); $rows = array(); foreach ($objWorksheet->getRowIterator() as $key=>$row) { //遍历行 // if(count($rows) > 1) continue; $cellIterator = $row->getCellIterator(); //得到所有列 $cellIterator->setIterateOnlyExistingCells( false); // Loop all cells, even if it is not set foreach ($cellIterator as $cell) { //遍历列 if (!is_null($cell)) { //如果列不给空就得到它的坐标和计算的值 $rows[$key][] = $cell->getCalculatedValue(); } } // 如果1行最多只有1列,删除该行 $cols = 0; foreach($rows[$key] as $vv) { if (!empty($vv)) $cols++; } if ($cols <= 1) unset($rows[$key]); } foreach ($rows[2] as $kk => $vv) { $rows[2][$kk] = myTrim($vv); } // print_r($rows);exit; // if($resl3!="栋号"){ // alert("上传表格格式不对,请联系管理员","back"); // } //获取表格的当前sheet中B2里面的值结束 //获取数据表字段开始 $sql = "SHOW FULL COLUMNS FROM levy" ; $zdname = $db->fetchAll($sql); foreach($zdname as $row){ $arrzd[$row["Comment"]] = $row["Field"]; } // 人工修正字段 $arrzd['楼栋'] = 'room_dong'; $arrzd['楼层'] = 'room_ceng'; $arrzd['单元'] = 'room_dan'; //获取数据表字段结束 $titlenme=$objPHPExcel->getActiveSheet("A1:S1")->getCeLL()->getvalue(); //获取表格标题 // print_r($arrzd);exit; date_default_timezone_set("Asia/Shanghai"); $sql = "select * from levy where lp_name='$titlenme'"; $res = $db->fetchAll($sql); if($res){ alert('提交失败,您已经提交过了此文件','back'); } // 数据入库 $ordertime=time(); $rowTitles = array_shift($rows); foreach($rows as $row){ $arr = array(); $arr["lp_name"]=$titlenme; $arr["addtime"]=$ordertime; foreach($row as $ck => $col){ $rowTitle = $rowTitles[$ck]; if (isset($arrzd[$rowTitle])) { $fieldName = $arrzd[$rowTitle]; $arr[$fieldName] = trim($col,'/-'); } } // 统一提交数据开始 $arr["xy_num"]=$xy_num; $arr["jiedao"]=$jiedao; $arr["attribute"]=$attribute; $arr["roomtime"]=$roomtime; //对excel表格中时间格式值进行处理开始 时间格式2021/9/16 if($arr['allot_time']!=null){ $res1=PHPExcel_Shared_Date::ExcelToPHP($arr['allot_time']); $arr['allot_time']=date('Y-m-d', $res1); } if($arr['back_time']!=null){ $res2=PHPExcel_Shared_Date::ExcelToPHP($arr['back_time']); $arr['back_time']=date('Y-m-d', $res2); } if($arr['roomtime']!=null){ $res3=PHPExcel_Shared_Date::ExcelToPHP($arr['roomtime']); $arr['roomtime']=date('Y-m-d', $res3); } //对excel表格中时间格式值进行处理结束 // print_r($row);exit; // 序号如果为0跳转到下一行 if (empty($arr['lp_no']) || !is_numeric($arr['lp_no'])) continue; // 如果没有数据就删除该字段 foreach($arr as $kk => $vv) { if (empty($vv)) unset($arr[$kk]); } // print_r($arr);exit; $db->insert('levy',$arr); } alert('文件导入成功','jump','test.php'); } else{ echo "没有导入表格"; }

3.2从数据库读取数据写入excel表。

//数据导出开始


    $objPHPExcel=new PHPExcel();//实例化PHPExcel类, 等同于在桌面上新建一个excel

    $objActSheet=$objPHPExcel->getActiveSheet();

    $objActSheet->getDefaultStyle()->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置excel文件默认水平垂直方向居中

    $objActSheet->getStyle("A1:P1")->getFont()->setName("宋体")->setSize(16)->setBold(true);//设置第二行字体大小

    $objActSheet->getStyle("A2:P2")->getFont()->setName("宋体")->setSize(11);//设置第三号行字体大小

    $objActSheet->getStyle('A2:P2')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); //只设置第二行垂直居中

    $objActSheet->getRowDimension(1)->setRowHeight(50); //设置第1行的行高

    $objActSheet->getRowDimension(2)->setRowHeight(25);设置第2行的行高

    $objActSheet->getRowDimension(3)->setRowHeight(34.5);设置第3行的行高

    $objActSheet->getColumnDimension('F')->setWidth(30);设置第F列的列宽

    $letter = explode(",","A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P"); //根据需要设置相应列的字母

//查询数据表所有的字段和字段下面所有的中文注释并放入数组开始

   $sql =  "SHOW FULL COLUMNS FROM table" ; 

   $zdname = $db->fetchAll($sql);  //查询方法

   foreach($zdname as $row){

   $arrzd[]=$row["Field"];
   $arrzdname[]=$row["Comment"];

   }

   unset($arrzdname[0]);

   unset($arrzdname[1]);

   unset($arrzdname[18]); 

  $arrHeader=array_values($arrzdname);

   //获取数据表字段结束

//查询数据表所有的字段和字段下面所有的中文注释并放入数组结束

     $lenth = count($arrHeader);

    for ($i = 0; $i < $lenth; $i++) {

      //  echo $letter[$i]."1:".$arrHeader[$i];

     //    echo "
";     $objActSheet->setCellValue("$letter[$i]3","$arrHeader[$i]");     };   //  $sql = "select * from butt $str order by x_no asc";   $sql = "select * from butt x_no order by x_no asc";     $xlsData = $db->fetchAll($sql);     $num = count($xlsData);     $objActSheet->setCellValue('A1',"表头"); //填充表头信息     $objActSheet->setCellValue('A2',$xlsData[0]["zs_name"]); //填充表头信息     $objActSheet->mergeCells("A1:P1");//合并单元格     $objActSheet->mergeCells("A2:P2");//合并单元格          //填充表格信息         foreach ($xlsData as $k => $v) {             $k+= 4;             $k2=$k-1;             $index=1;             //表格内容             $gradeBorder=getBorderStyle("000000");//获取年级边框样式代码             for($i=65;$i<81;$i++){                 $index=$index+1;                           //  echo strtoupper(chr($i)).' ';//输出大写字母                   $aznum=strtoupper(chr($i));                              $exvalue=$v[$arrzd[$index]];                                            $objActSheet->setCellValue($aznum.$k, $exvalue);                     $objActSheet->getStyle($aznum."3:".$aznum."3")->applyFromArray($gradeBorder); //给表格加边框         $objActSheet->getStyle($aznum.$k.":".$aznum.$k)->applyFromArray($gradeBorder);  //给表格加边框    $objActSheet->getColumnDimension($aznum)->setWidth(20); //设置列宽           }               }      $objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');//生成excel文件     browser_export('Excel5',$xlsData[0]["zs_name"].'.xls');//输出到浏览器     $objWriter->save("php://output"); //数据导出结束

 

你可能感兴趣的:(php,php)