ADUNIT000

PHP生成Excel

 

延續上篇的php讀取Excel
這邊提到的是php生成Excel
生成Excel檔的時候,使用了CodePlex套件 (下載:http://phpexcel.codeplex.com/releases/view/107442)
這個套件生成Excel的優點在於較像寫程式也比較簡單
(有用過上一種套件寫法的人就知道,需要使用很多tr、td,對工程師而言...很累XDD)

但這款套件的缺點是它的函式庫很龐大
如果你的程式運算量或是資料輸出量太大可能反應就有點慢
雖然如此,只要適當簡化功能,效果還是很好的
下面實作一個簡單的範例
從資料庫撈出會員資料後,直接輸出成excel檔

$connection=mysql_connect("localhost","root","111111");
//下面兩個決定輸出中文不會變亂碼
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER_SET utf8");
mysql_select_db("map");
  
  //從資料庫讀取資料
  $sql_member = "SELECT * FROM `members`";
  $query_member = mysql_query($sql_member);
  $data_member = array();
  $j=0;
    //從這裡開始就是生成Excel檔的方法,首先必須引入Excel轉換的class檔案
require_once ('C:www\phpExcelReader\phpexcel_doc\Classes\PHPExcel.php');
    //新增PHPexcel物件
    $objPHPExcel = new PHPExcel();
       //作者(注意:以下一長串後面都沒分號結束)
    $objPHPExcel->getProperties()->setCreator("史丹利")
       //上次修改者
       ->setLastModifiedBy("Stanley")
       //檔案標題
       ->setTitle("會員名單")
       //檔案子標題
       ->setSubject("會員名單子標題")
       //檔案描述
       ->setDescription("檔案描述")
       //檔案標記
       ->setKeywords("檔案標記")
       //檔案類別
       ->setCategory("檔案類別");
    //許多資料都提到是顯示目前資料表,但把0改成1就會error,是否有大神願意求解
    $objPHPExcel->setActiveSheetIndex(0)

       ->setCellValue('A1', '使用者序號')
       ->setCellValue('B1', '使用者名稱')
       ->setCellValue('C1', '使用者email')
       ->setCellValue('D1', '使用者資訊');
         
  while($res_member = mysql_fetch_array($query_member)){
  
   //從資料庫取出的資料
   $data_member[$j]['uid'] = $res_member['uid'];
   $data_member[$j]['uname'] = $res_member['uname'];
   $data_member[$j]['u_mail'] = $res_member['u_mail'];
   $data_member[$j]['u_info'] = $res_member['u_info'];
   
   //把值放進對應的欄位
   $k = $j+2;    //因為第一列已經放入欄位標題,陣列從0開始,所以必須+2開始
   $objPHPExcel->setActiveSheetIndex(0)
    ->setCellValue('A'.$k, $data_member[$j]['uid'])
    ->setCellValue('B'.$k, $data_member[$j]['uname'])
    ->setCellValue('C'.$k, $data_member[$j]['u_mail'])
    ->setCellValue('D'.$k, $data_member[$j]['u_info']);
         
   $j++;
  }

  $objPHPExcel->setActiveSheetIndex(0);
  $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
  //建議輸出xls檔,較無相容性問題    
  //$objWriter->save(str_replace('.php', '.xls', __FILE__));
  $objWriter->save(str_replace('.php', '.xlsx', __FILE__)); 

 

 下圖是剛剛提到k必須加2的原因
 k+2後,資料從A2(1)->B2(stanley543)->C2(@hotmail.com)->D2(0)->A3(2)依序存入Excel

excel_out

 

 

如果覺得對你有幫助的話. 請幫小弟按個讚吧~

 

相關文章:PHP讀取excel 

文章標籤
創作者介紹

史丹利愛碎念

newaurora 發表在 痞客邦 PIXNET 留言(1) 人氣()


留言列表 (1)

發表留言
  • ∥x笨蕩﹋紅豆x∥
  • 主要原因是因為少了$objPHPExcel->createSheet();
    所以無法操作$objPHPExcel->setActiveSheetIndex(1)
    感謝您的文章 讓我很快就上手了!!
  • 不客氣~
    如果有哪個部分寫不清楚的也可以提出
    我們可以一起研究研究^^

    newaurora 於 2014/03/08 11:35 回覆

找更多相關文章與討論