PHPEXECEL技術總結

<?php

//前部分爲phpexecel使用方法,後部分爲phpexecel實例

//1.引用PHPExcel
    include 'PHPExcel.php';
    include 'PHPExcel/Writer/Excel2007.php';
    //或者include 'PHPExcel/Writer/Excel5.php'; 用於輸出.xls的
    $objPHPExcel = new PHPExcel(); //建立一個實例

//2.設置excel的屬性

//建立人
    $objPHPExcel->getProperties()->setCreator("Maarten Balliauw");
//最後修改人
    $objPHPExcel->getProperties()->setLastModifiedBy("Maarten Balliauw");
//標題
    $objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document");
//題目
    $objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Test Document");
//描述
    $objPHPExcel->getProperties()->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.");
//關鍵字
    $objPHPExcel->getProperties()->setKeywords("office 2007 openxml php");
//種類
    $objPHPExcel->getProperties()->setCategory("Test result file");

//也可用下面這種方式

$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"); 

//設置當前的sheet
    $objPHPExcel->setActiveSheetIndex(0);

//設置sheet的標題
    $objPHPExcel->getActiveSheet()->setTitle('Simple');

//設置單元格寬度
    $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);

//設置單元格高度
    $objPHPExcel->getActiveSheet()->getRowDimension($i)->setRowHeight(40);

//合併單元格
    $objPHPExcel->getActiveSheet()->mergeCells('A18:E22');

//拆分單元格
    $objPHPExcel->getActiveSheet()->unmergeCells('A28:B28');

//設置保護cell,保護工做表
    $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); 
    $objPHPExcel->getActiveSheet()->protectCells('A3:E13', 'PHPExcel');

//設置格式
    $objPHPExcel->getActiveSheet()->getStyle('E4')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
    $objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('E4'), 'E5:E13' );

//設置加粗
    $objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);

//設置水平對齊方式(HORIZONTAL_RIGHT,HORIZONTAL_LEFT,HORIZONTAL_CENTER,HORIZONTAL_JUSTIFY)
    $objPHPExcel->getActiveSheet()->getStyle('D11')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);

//設置垂直居中
    $objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

//設置字
    $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);

//設置邊框
    $objPHPExcel->getActiveSheet()->getStyle('A1:I20')->getBorders()->getAllBorders()->setBorderStyle(\PHPExcel_Style_Border::BORDER_THIN); 

//設置邊框顏色
    $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getLeft()->getColor()->setARGB('FF993300');
    $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
    $objPHPExcel->getActiveSheet()->getStyle('D13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
    $objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getTop()->getColor()->setARGB('FF993300');
    $objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getBottom()->getColor()->setARGB('FF993300');
    $objPHPExcel->getActiveSheet()->getStyle('E13')->getBorders()->getRight()->getColor()->setARGB('FF993300');

 

//插入圖像
    $objDrawing = new PHPExcel_Worksheet_Drawing();
    /*設置圖片路徑 切記:只能是本地圖片*/ 
    $objDrawing->setPath('圖像地址');
    /*設置圖片高度*/ 
    $objDrawing->setHeight(180);//照片高度
    $objDrawing->setWidth(150); //照片寬度
    /*設置圖片要插入的單元格*/
    $objDrawing->setCoordinates('E2');
     /*設置圖片所在單元格的格式*/
    $objDrawing->setOffsetX(5);
    $objDrawing->setRotation(5);
    $objDrawing->getShadow()->setVisible(true);
    $objDrawing->getShadow()->setDirection(50);
    $objDrawing->setWorksheet($objPHPExcel->getActiveSheet());

//設置單元格背景色
    $objPHPExcel->getActiveSheet(0)->getStyle('A1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
    $objPHPExcel->getActiveSheet(0)->getStyle('A1')->getFill()->getStartColor()->setARGB('FFCAE8EA');

//最後輸入瀏覽器,導出Excel
    $savename='導出Excel示例';
    $ua = $_SERVER["HTTP_USER_AGENT"];
    $datetime = date('Y-m-d', time());        
    if (preg_match("/MSIE/", $ua)) {
        $savename = urlencode($savename); //處理IE導出名稱亂碼
    } 

// excel頭參數  
    header('Content-Type: application/vnd.ms-excel');  
    header('Content-Disposition: attachment;filename="'.$savename.'.xls"');  //日期爲文件名後綴  
    header('Cache-Control: max-age=0'); 
    $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  //excel5爲xls格式,excel2007爲xlsx格式  
    $objWriter->save('php://output');
/*------------------------------------------------------ */
//-- phpexcel數據導出例子
/*------------------------------------------------------ */

if ($_REQUEST['act'] == 'gen_excel')
{   
     @set_time_limit(0);

    /* 得到此線下紅包類型的ID */
    $tid  = !empty($_GET['tid']) ? intval($_GET['tid']) : 0;
    $type_name = $db->getOne("SELECT type_name FROM ".$ecs->table('bonus_type')." WHERE type_id = '$tid'");

    /* 文件名稱 */
    $bonus_filename = $type_name .'_bonus_list';

    include_once(ROOT_PATH . 'phpExcel/Classes/PHPExcel.php');
    require_once(ROOT_PATH . 'phpExcel/Classes/PHPExcel/Writer/Excel5.php');  
    $objPHPExcel = new PHPExcel();

    //合併單元格:
    $objPHPExcel->getActiveSheet()->mergeCells('A1:E1');
    $objPHPExcel->getActiveSheet()->SetCellValue('A1', $_LANG['bonus_excel_file']);
    //垂直居中
    $objPHPExcel->getActiveSheet()->getStyle("A1")->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);

    //輸入單元格
    $objPHPExcel->setActiveSheetIndex(0);
    $objPHPExcel->getActiveSheet()->SetCellValue('A2', $_LANG['bonus_sn']);
    $objPHPExcel->getActiveSheet()->SetCellValue('B2', $_LANG['type_money']);
    $objPHPExcel->getActiveSheet()->SetCellValue('C2', $_LANG['type_name']);
    $objPHPExcel->getActiveSheet()->SetCellValue('D2', $_LANG['use_enddate']);
    $objPHPExcel->getActiveSheet()->SetCellValue('E2', '是否使用');


    $val = array();
    $sql = "SELECT ub.bonus_id,ub.used_time,ub.bonus_type_id, ub.bonus_sn, bt.type_name, bt.type_money, bt.use_end_date ".
           "FROM ".$ecs->table('user_bonus')." AS ub, ".$ecs->table('bonus_type')." AS bt ".
           "WHERE bt.type_id = ub.bonus_type_id AND ub.bonus_type_id = '$tid' ORDER BY ub.bonus_id DESC";
    $res = $db->query($sql);

    $code_table = array();
    $i=3;
    while ($val = $db->fetchRow($res))
    {
        $objPHPExcel->getActiveSheet()->SetCellValue('A'.$i, $val['bonus_sn']);
        $objPHPExcel->getActiveSheet()->SetCellValue('B'.$i, $val['type_money']);
        $objPHPExcel->getActiveSheet()->SetCellValue('C'.$i, $val['type_name']);
        $objPHPExcel->getActiveSheet()->SetCellValue('D'.$i, local_date('Y-m-d', $val['use_end_date']));
        $objPHPExcel->getActiveSheet()->SetCellValue('E'.$i, $val['used_time']==0?'未使用':'已使用');
        //對齊
        $objPHPExcel->getActiveSheet()->getStyle('A'.$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
        $objPHPExcel->getActiveSheet()->getStyle('B'.$i)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT);
        $objPHPExcel->getActiveSheet()->getStyle('C'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('D'.$i)->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
        //填充顏色
        if($val['used_time']!=0){
        $objPHPExcel->getActiveSheet()->getStyle('E'.$i)->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle('E'.$i)->getFill()->getStartColor()->setARGB('#FF0000');
        }
        $i++;
    }
    // 設置寬width
    $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(18);
    $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(18);
    $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(18);
    $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(18);
    // Rename sheet
     $objPHPExcel->getActiveSheet()->setTitle($bonus_filename);
     $objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
     $objWriter->save(str_replace('.php', '.xls', __FILE__));
     header("Pragma: public");
     header("Expires: 0");
     header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
     header("Content-Type:application/force-download");
     header("Content-Type:application/vnd.ms-execl");
     header("Content-Type:application/octet-stream");
     header("Content-Type:application/download");
     header("Content-Disposition: attachment; filename=$bonus_filename.xls");
     header("Content-Transfer-Encoding:binary");
     $objWriter->save("php://output");
}

//處理中文輸出問題
    //須要將字符串轉化爲UTF-8編碼,才能正常輸出,不然中文字符將輸出爲空白,以下處理:

     $str  =iconv('gb2312', 'utf-8', $str);

    //或者你能夠寫一個函數專門處理中文字符串:

    function convertUTF8($str)
    {
       if(empty($str)) return'';
       return iconv('gb2312', 'utf-8', $str);
    }

    //從數據庫輸出數據處理方式

    //從數據庫讀取數據如:

    $db = new Mysql($dbconfig);
    $sql = "SELECT * FROM  表名";
    $row = $db->GetAll($sql);  // $row爲二維數組

    $count = count($row);
    for ($i = 2; $i <= $count+1; $i++) {

     $objPHPExcel->getActiveSheet()->setCellValue('A'. $i, convertUTF8($row[$i-2][1]));
     $objPHPExcel->getActiveSheet()->setCellValue('B'. $i, convertUTF8($row[$i-2][2]));
     $objPHPExcel->getActiveSheet()->setCellValue('C'. $i, convertUTF8($row[$i-2][3]));
     $objPHPExcel->getActiveSheet()->setCellValue('D'. $i, convertUTF8($row[$i-2][4]));
     $objPHPExcel->getActiveSheet()->setCellValue('E'. $i, convertUTF8(date("Y-m-d", $row[$i-2][5])));
     $objPHPExcel->getActiveSheet()->setCellValue('F'. $i, convertUTF8($row[$i-2][6]));

     $objPHPExcel->getActiveSheet()->setCellValue('G'. $i, convertUTF8($row[$i-2][7]));
     $objPHPExcel->getActiveSheet()->setCellValue('H'. $i, convertUTF8($row[$i-2][8]));

    }
/*------------------------------------------------------ */
//-- 導入execel到數據庫中
/*------------------------------------------------------ */

if ($_REQUEST['act'] == 'send_by_import')
{
    if(empty($_FILES['inputExcel']['name'])){alert('請選擇excel文件','add');}  //驗證數據
    include_once (dirname ( __FILE__ ) .'/phpExcel/Classes/PHPExcel.php'); //加載excel相關文件
    include_once (dirname ( __FILE__ ) .'/phpExcel/Classes/PHPExcel/Writer/Excel2007.php');
    $objPHPExcel = new PHPExcel(); //實例化PHPExcel類
    $objPHPExcel = PHPExcel_IOFactory::load($_FILES["inputExcel"]["tmp_name"]);
    $indata = $objPHPExcel->getSheet(0)->toArray(); //內容轉換爲數組
    insertExcelComment($indata,$comment_configs);  //調用函數,導入數據
}

//導入excel數據 處理函數
function insertExcelComment($data,$bonus_type_id){

    global  $db,$ecs;
    if ( empty( $data ) ) alert('導入失敗,請檢查excel是否有數據','send&id=14&send_by=3&import=1');//驗證數據
    $new_arr = array();
    foreach($data as $key=>$into){
        if($into[1] != '' && $into[2] != ''){
            $endInto['xuId'] = $into[0];
            $endInto['bonus_type_id'] = intval($into[1]);
            $endInto['bonus_sn'] = intval($into[2]);
            $new_arr[]=$endInto;
        }
    }

    //去掉標題
    if($new_arr[0]['bonus_sn'] == '優惠碼'){
        unset($new_arr[0]);
        //統計excel內容總數量,成功導入數量,導入失敗數量
        $allNum = count($new_arr);
    }else{
        $allNum = count($new_arr);
    }
    //獲取數據庫優惠號
    $sql = "select bonus_sn from ".$ecs->table('user_bonus');
    $bonus_sn = $db->getAll($sql);
    $bonus_sn_arr = array();
    foreach ($bonus_sn as $key => $val) {
        $bonus_sn_arr[] = $val['bonus_sn'];
    }

    //判斷優惠卷ID是否存在與格式是否正確
    foreach($new_arr as $val){

        if($val['bonus_type_id'] != $bonus_type_id || strlen($val['bonus_sn'])<8 || in_array($val['bonus_sn'],$bonus_sn_arr)){

            if( intval($val['xuId']) != 0){
                $arra[] = $val['xuId'];
                $isType = 1;
            }
        }
    }

    if($isType == 1){
        $falseNums = count($arra);//統計失敗數量
        $falsexuId = implode(' ',$arra);
        alert("共 $falseNums 條數據導入失敗,序號是 " . $falsexuId . ' 請修改後再上傳','send&id=14&send_by=3&import=1');
    }else{
        foreach($new_arr as $val){

            unset($val['xuId']);
            //統計符合要求可導入數據庫的數量
            $trueNum[] = $val;
            $sql = "INSERT INTO ".$ecs->table('user_bonus')." (".implode(",", array_keys($val)).") VALUES ('".implode("','",$val)."')";
            $db->query($sql);
        }
        $trueNum = count($trueNum);
        alert("共 $allNum 條數據,成功導入 $trueNum 條",'list');
    }       
}

function alert($str, $act) {
echo "<script>alert('$str');location.href='bonus.php?act=$act';" . "</script>";
}
相關文章
相關標籤/搜索