excel表格生成與匯入

技術小胖子發表於2017-11-16

1、生成excel表格

<?php

header(“content-type:text/html;charset=utf-8”);

$dsn = “mysql:dbname=news;host=127.0.0.1”;

$user = “root”;

$pwd = “”;

$pdo = new PDO($dsn,$user,$pwd);

//$sql = “select id,name.content,descs from brand”;

$res = $pdo->query(“select id,name,content,descs from brand”);

$arr = $res->fetchAll(PDO::FETCH_ASSOC);

//$res = $pdo->exec(“select id,name,content,descs from brand”);

//$data = $res->execute();

//$arr = $res->fetchAll(PDO::FETCH_ASSOC);

//print_r($arr);die;

//引入類檔案

require_once `./Classes/PHPExcel.php`;

require_once `./Classes/PHPExcel/IOFactory.php`;

require_once `./Classes/PHPExcel/Reader/Excel5.php`;


//建立新的PHPExcel物件

$objPHPExcel = new PHPExcel();

$objProps = $objPHPExcel->getProperties();

//設定表頭

//ord():ord() 函式返回字串第一個字元的 ASCII 值。 語法 ord(string) 引數描述 string 必需。要從中獲得 ASCII 值的字串

$i = 0;

foreach($arr as $k=>$v){

    //print_r($v);die;

    if($i<1){

        $obj=array_keys($v);//array_keys() 函式返回包含陣列中所有鍵名的一個新陣列

        //print_r($obj);die;

        $key = ord(“A”);

        //print_r($key);die;

        foreach($obj as $ke=>$va){

            //print_r($va);die;

           $colum = chr($key);//輸出excel表格中的行的(ABCD….),如果顯示B,則迴圈$key+1,

           //print_r($colum);//獲取excel表格中的行的ABCD

           $objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.`1`, $va);//setCellValue()單元格賦值;

           $key+=1;

        }

    }

    $i++;

}


    $column = 2;

    $objActSheet = $objPHPExcel->getActiveSheet();

    //print_r($objActSheet);die;

    foreach($arr as $key => $rows){ //行寫入

        //print_r($rows);die;

        $span = ord(“A”);

        foreach($rows as $keyName=>$value){// 列寫入

            //print_r($value);die;//獲取本條資料的id

            $h = chr($span);

            //print_r($h);die;

            $objActSheet->setCellValue($h.$column, $value);

            $span++;

        }

        $column++;

    }


    //生成excel檔案

    //$fileName=”excel.xls”;

     $fileName = iconv(“utf-8”, “gb2312”, “shengcheng.xls”);

    //重新命名錶

    $objPHPExcel->getActiveSheet()->setTitle(`Simple`);

    //設定活動單指數到第一個表,所以Excel開啟這是第一個表

    $objPHPExcel->setActiveSheetIndex(0);

    //將輸出重定向到一個客戶端web瀏覽器(Excel2007)

      header(`Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`);

      header(“Content-Disposition: attachment; filename=”$fileName””);

      header(`Cache-Control: max-age=0`);

      $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, `Excel2007`);

      $objWriter->save(`php://output`); //檔案通過瀏覽器下載

      exit;

?>


2、將生成的execl表格的資料入庫

2.1、首先寫一個form表單  

<META NAME=”” CONTENT=”” charset=”utf-8″>

<form name=”frm1″ enctype=”multipart/form-data” action=”daoru.php” method=”post”>

   <input name=”filename” type=”file” /><input name=”submit” type=”submit” value=”上傳” />

</form>

2.2、通過form 表單跳到指定的目錄

<?php

header(“content-type:text/html;charset=utf-8”);


session_start();

//全域性變數

$succ_result=0;

$error_result=0;

$file=$_FILES[`filename`];

$max_size=”2000000″; //最大檔案限制(單位:byte)

$fname=$file[`name`];

$ftype=strtolower(substr(strrchr($fname,`.`),1));

 //檔案格式

 $uploadfile=$file[`tmp_name`];

 if($_SERVER[`REQUEST_METHOD`]==`POST`){

     if(is_uploaded_file($uploadfile)){

          if($file[`size`]>$max_size){

         echo “Import file is too large”; 

         exit;

         }

          if($ftype!=`xls`){

         echo “Import file type is error”;

          exit;   

         }

     }else{

     echo “The file is not empty!”;

      exit; 

     } 

 }

  //連線mysql資料庫

$dsn = “mysql:dbname=news;host=127.0.0.1”;

$user = “root”;

$pwd = “”;

$pdo = new PDO($dsn,$user,$pwd);




//呼叫phpexcel類庫

/*

require_once `phpexcel.php`; 

require_once `PHPExcelIOFactory.php`;

require_once `PHPExcelReaderExcel5.php`;

*/

//引入類檔案

require_once `./Classes/PHPExcel.php`;

require_once `./Classes/PHPExcel/IOFactory.php`;

require_once `./Classes/PHPExcel/Reader/Excel5.php`;




$objReader = PHPExcel_IOFactory::createReader(`Excel2007`);//use excel2007 for 2007 format 

$objPHPExcel = $objReader->load($uploadfile); 

$sheet = $objPHPExcel->getSheet(0); 

$highestRow = $sheet->getHighestRow(); // 取得總行數 

$highestColumn = $sheet->getHighestColumn(); // 取得總列數

  $arr_result=array();

  $strs=array();


for($j=2;$j<=$highestRow;$j++)

 { 

    unset($arr_result);

    unset($strs);

 for($k=`A`;$k<= $highestColumn;$k++)

    { 

     //讀取單元格

  @$arr_result  .= $objPHPExcel->getActiveSheet()->getCell(“$k$j”)->getValue().`,`;

    }

 $strs=explode(“,”,$arr_result);

 $sql=”insert into brand(id,name,content,descs) values ($strs[0],`$strs[1]`,`$strs[2]`,`$strs[3]`)”;

 echo $sql.”<br/>”; 

// mysql_query(“set names utf8”);

 $result=$pdo->exec($sql) or die(“執行錯誤”);


// $insert_num=mysql_affected_rows();

  if($result>0){

        $succ_result+=1;

    }else{

        $error_result+=1;

   }


}


echo “插入成功”.$succ_result.”條資料!!!<br>”;

echo “插入失敗”.$error_result.”條資料!!!”;


?>


      本文轉自噼裡啪啦啦 51CTO部落格,原文連結:http://blog.51cto.com/pilipala/1639873,如需轉載請自行聯絡原作者





相關文章