1. 程式人生 > >使用PHPExcel實現資料批量匯出為excel表格的方法(必看)

使用PHPExcel實現資料批量匯出為excel表格的方法(必看)

/**
     * 批量匯出資料
     * @param $arr 從資料庫查詢出來,即要匯出的資料
     *  $name excel表歌名
     */
    function expExcel($arr,$name){

        //require_once 'PHPExcel.php';
        Vendor('PHPExcel.PHPExcel');
        Vendor('PHPExcel.Autoloader');

        //例項化
        $objPHPExcel = new \PHPExcel();
        /*右鍵屬性所顯示的資訊*/
        $objPHPExcel->getProperties()->setCreator("zxf")  //作者
        ->setLastModifiedBy("zxf")  //最後一次儲存者
        ->setTitle('資料EXCEL匯出')  //標題
        ->setSubject('資料EXCEL匯出') //主題
        ->setDescription('匯出資料')  //描述
        ->setKeywords("excel")   //標記
        ->setCategory("result file");  //類別


        //設定當前的表格
        $objPHPExcel->setActiveSheetIndex(0);
        // 設定表格第一行顯示內容
        $objPHPExcel->getActiveSheet()
            ->setCellValue('A1', '產品id')
            ->setCellValue('B1', '報價id')
            ->setCellValue('C1', '庫存')
            ->setCellValue('D1', '供應商')
            //設定第一行為紅色字型
            ->getStyle('A1:D1')->getFont()->getColor()->setARGB(\PHPExcel_Style_Color::COLOR_RED);

        $key = 1;
        /*以下就是對處理Excel裡的資料,橫著取資料*/
        foreach($arr as $v){

            //設定迴圈從第二行開始
            $key++;
            $objPHPExcel->getActiveSheet()

                //Excel的第A列,name是你查出陣列的鍵值欄位,下面以此類推
                ->setCellValue('A'.$key, $v['procode'])
                ->setCellValue('B'.$key, $v['bjid'])
                ->setCellValue('C'.$key, $v['realkucun'])
                ->setCellValue('D'.$key, $v['supplier']);

        }
        //設定當前的表格
        $objPHPExcel->setActiveSheetIndex(0);
        ob_end_clean();  //清除緩衝區,避免亂碼
        header('Content-Type: application/vnd.ms-excel'); //檔案型別
        header('Content-Disposition: attachment;filename="'.$name.'.xls"'); //檔名
        header('Cache-Control: max-age=0');
        header('Content-Type: text/html; charset=utf-8'); //編碼
        //解決報錯的問題:Class 'Warehouse\Controller\PHPExcel_IOFactory' not found
        //$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//原始路徑
        //$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');  //excel 2003
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//新路徑

        $objWriter->save('php://output');
        exit;
    }
/***********呼叫**********************/
header("Content-type:text/html;charset=utf-8");
 
//連結資料庫
$link = @mysql_connect('localhost','root','') or die('連線資料庫失敗');
mysql_select_db('test',$link);
mysql_query('set names utf8');
 
//先獲取資料
$sql = "select * from house";
$res = mysql_query($sql);
$arr = array();
//把$res=>$arr,把結果集內容轉移到一個數組中
while ($row = mysql_fetch_assoc($res)){
 $arr[] = $row;
}
 
//excel表格名
$name = "使用者表";
 
//呼叫
expExcel($arr,$name)

ps:

// 匯出檔案
    function Manage_exportfile($fields,$data,$name){
        Vendor('PHPExcel.PHPExcel');
        Vendor('PHPExcel.Autoloader');
        $file_name = $name.'_'.uniqid();
        // 首先建立一個新的物件  PHPExcel object
        $objPHPExcel = new \PHPExcel();

        // 設定檔案的一些屬性,在xls檔案——>屬性——>詳細資訊裡可以看到這些值,xml表格裡是沒有這些值的
        $objPHPExcel
            ->getProperties()  //獲得檔案屬性物件,給下文提供設定資源
            ->setCreator( "Itsean")                 //設定檔案的建立者
            ->setLastModifiedBy( "Itsean")          //設定最後修改者
            ->setTitle($name)    //設定標題
            ->setSubject($name)  //設定主題
            ->setDescription(iconv('utf-8', 'gb2312', "The File Great By Xvdesign.Com !The Site:http://www.xvdesign.com/")) //設定備註
            ->setKeywords($name.' Itsean')        //設定標記
            ->setCategory($name.' Itsean');                //設定類別
        // 位置aaa  *為下文程式碼位置提供錨
        // 給表格新增資料
        $objActSheet = $objPHPExcel->setActiveSheetIndex(0);             //設定第一個內建表(一個xls檔案裡可以有多個表)為活動的
        $excel_col = 'A';
        $excel_row = 1;
        //dump($data);die;
        //dump($fields);die;
        foreach ($fields as $key => $field) {
            $objActSheet->setCellValue($excel_col.$excel_row, $field[1]);
            if($field[2]){
                $objActSheet->getColumnDimension($excel_col) -> setWidth($field[2]/10);
            }
            //$objActSheet->getStyle($excel_col.$excel_row)->getAlignment()->setHorizontal('center');
            $objActSheet->getStyle($excel_col.$excel_row)->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID);
            $objActSheet->getStyle($excel_col.$excel_row)->getFill()->getStartColor()->setARGB('ffcccccc');
            //$objActSheet->getColumnDimension($excel_col)->setWidth(20);

            $objActSheet->getStyle($excel_col.$excel_row)->getAlignment()->setHorizontal('left');
            //$objActSheet->getStyle('B'.$excel_row)->getAlignment()->setHorizontal('left');
            //$objActSheet->getStyle('E'.$excel_row)->getAlignment()->setHorizontal('left');


            $excel_col++;
        }

        //設定寬度
        $objActSheet->getColumnDimension('C')->setWidth(30);
        $objActSheet->getColumnDimension('D')->setWidth(30);
        $objActSheet->getColumnDimension('F')->setWidth(15);
        $objActSheet->getColumnDimension('G')->setWidth(50);

        //dump($objActSheet);die;
        $excel_row++;
        foreach ($data as $k => $v) {
            $excel_col = 'A';
            foreach ($fields as $key => $field) {
                /*$objActSheet->getStyle('A'.$excel_row)->getAlignment()->setHorizontal('left');
                $objActSheet->getStyle('B'.$excel_row)->getAlignment()->setHorizontal('left');
                $objActSheet->getStyle('E'.$excel_row)->getAlignment()->setHorizontal('left');*/
                $objActSheet->setCellValue( $excel_col.$excel_row, $v[$field[0]]);
                //設定換行
                //$objActSheet->getStyle($excel_col)->getAlignment()->setWrapText(true);

                $excel_col++;
            }
            $excel_row++;
        }

        $objDrawing = new \PHPExcel_Worksheet_Drawing();
        $objDrawing->setName('Paid');
        $objDrawing->setDescription('Paid');
//	$objDrawing->setPath('./Public/Images/login/loginlogo.png'); //圖片引入位置
//	$objDrawing->setCoordinates('A'.$excel_row); //圖片新增位置
        $objDrawing->setOffsetX(10);
        $objDrawing->setRotation(0);
        $objDrawing->setHeight(100);
        $objDrawing->getShadow()->setVisible (true);
        $objDrawing->getShadow()->setDirection(20);
        $objDrawing->setWorksheet($objActSheet);

        //得到當前活動的表,注意下文教程中會經常用到$objActSheet
        // $objActSheet = $objPHPExcel->getActiveSheet();
        // 位置bbb  *為下文程式碼位置提供錨
        // 給當前活動的表設定名稱
        $objActSheet->setTitle($name);

        // 生成2003excel格式的xls檔案
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="'.$file_name.'.xls"');
        header('Cache-Control: max-age=0');
        //解決報錯的問題:Class 'Warehouse\Controller\PHPExcel_IOFactory' not found
        //$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//原始路徑
        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');//新路徑

        // 生成2007excel格式的xlsx檔案
//	header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
//	header('Content-Disposition: attachment;filename="'.$name.'.xlsx"');
//	header('Cache-Control: max-age=0');
//	$objWriter = \PHPExcel_IOFactory:: createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save('php://output');
        exit;
    }