1. 程式人生 > >[PHP] PHP操作Excel匯出和匯入,使用PHPExcel第三方類操作

[PHP] PHP操作Excel匯出和匯入,使用PHPExcel第三方類操作



下載的官方文件,如上圖。對於專案真正有用的事Classes資料夾,將Classes更名為PHPExcel放到自己專案類庫中,以下是Thinkphp框架下的類庫存放目錄。


2.      下面匯出的使用與實踐

            //將資料匯出到Excel表
            引入必須的檔案
            require '../ThinkPHP/Library/Vendor/PHPExcel/PHPExcel.php';
            require '../ThinkPHP/Library/Vendor/PHPExcel/PHPExcel/IOFactory.php';
            $res=M('stock_transshipment')->where(array('id'=>$id))->find();
            //建立一個PHPExcel物件
            $objPHPExcel = new \PHPExcel();
            //設定檔案的屬性設定
            $objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
            							 ->setLastModifiedBy("Maarten Balliauw")
            							 ->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");
            //設定表格樣式
            $objPHPExcel->getActiveSheet()->mergeCells('A1:G1');
            $objPHPExcel->getActiveSheet()->mergeCells('A11:G11');
            $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20);
            $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12);
            $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
            $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
            $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
            $objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
            $objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            $objPHPExcel->getActiveSheet()->getStyle('A11')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
            for($i=2;$i<=10;++$i){
                $str="A".$i;
                $objPHPExcel->getActiveSheet()->getStyle($str)->getFont()->setBold(true);
            }
            $objPHPExcel->getActiveSheet()->getStyle('A12')->getFont()->setBold(true);
            $objPHPExcel->getActiveSheet()->getStyle('B12')->getFont()->setBold(true);
            $objPHPExcel->getActiveSheet()->getStyle('C12')->getFont()->setBold(true);
            $objPHPExcel->getActiveSheet()->getStyle('D12')->getFont()->setBold(true);
            $objPHPExcel->getActiveSheet()->getStyle('E12')->getFont()->setBold(true);
            
            //為表格新增資料
            $objPHPExcel->setActiveSheetIndex(0)
                        ->setCellValue('A1', '調撥單明細')
                        ->setCellValue('A2', '調撥單號')
                        ->setCellValue('B2', $res['code'])
                        ->setCellValue('A3', '調撥型別')
                        ->setCellValue('B3', $res['type'])
                        ->setCellValue('A4', '單據日期')
                        ->setCellValue('B4', date("Y-m-d",$res['bill_date']))
                        ->setCellValue('A5', '單據狀態')
                        ->setCellValue('B5', $res['status']==1?'已稽核':'未稽核')
                        ->setCellValue('A6', '從門店') 
                        ->setCellValue('B6', get_warehouse_name($res['from_storage']))
                        ->setCellValue('A7', '調至門店')
                        ->setCellValue('B7',  get_warehouse_name($res['to_storage']))
                        ->setCellValue('A8', '資訊備註')
                        ->setCellValue('B8', $res['remarks'])
                        ->setCellValue('A9', '建立人')
                        ->setCellValue('B9', $res['creater'])
                        ->setCellValue('A10', '建立日期')
                        ->setCellValue('B10', date("Y-m-d",$res['create_time']));
        
            $objPHPExcel->setActiveSheetIndex(0)->setCellValue('A11', '商品明細');
            $filename='調撥單';//檔名
           
            // 檔案中的第一個表格的名
            $objPHPExcel->getActiveSheet()->setTitle('調撥單');
            
            // 設定操作的表是第一個表
            $objPHPExcel->setActiveSheetIndex(0);
    
            // 直接在瀏覽器中輸出檔案(Excel2007)
            header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            header('Content-Disposition: attachment;filename='.$filename.'.xlsx');
            header('Cache-Control: max-age=0');
            // If you're serving to IE 9, then the following may be needed
            header('Cache-Control: max-age=1');
            
            // If you're serving to IE over SSL, then the following may be needed
            header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
            header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
            header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
            header ('Pragma: public'); // HTTP/1.0
            $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
            $objWriter->save('php://output');
            exit;


3.     匯入Excel檔案

表格格式

網頁顯示效果圖:

實現程式碼:

 header("Content-type:text/html;charset=utf-8");
        //讀取Excel
        require './ThinkPHP/Library/Vendor/PHPExcel/PHPExcel/IOFactory.php';
        $inputFileName="D:/readExcel.xlsx";
        if (!file_exists($inputFileName)) {
            exit("please check the file exist or not first ." . EOL);
        }
        $inputFileType = 'Excel2007';
        $objPHPExcel = \PHPExcel_IOFactory::load("D:/readExcel.xlsx");
        $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
        echo "<pre>";
        //var_dump($sheetData);
        echo "<table>";
        foreach ($sheetData as $key=>$val){
            if($key==0){
                echo "<tr><th>",$val['A'],"</th><th>",$val['B'],"</th><th>",$val['C'],"</th><th>",$val['D'],"</th><th>",$val['E'],"</th></tr>";
            }
            else{
                echo "<tr><td>",$val['A'],"</td><td>",$val['B'],"</td><td>",$val['C'],"</td><td>",$val['D'],"</td><td>",$val['E'],"</td></tr>";
            }
        }
        echo "</table>"; 


這裡只是很籠統的介紹,更多的功能參考PHPExcel中文使用文件