PHPExcel導入導出常用方法總結


最近公司后台管理系統需求,要用PHP導出excel表格數據,所以特整理了一下常用的方法供大家參考:

PHPExcel擴展包地址:https://github.com/wanqianworld/phpexcel-1.8

大致的分為幾個部分:

一、導出的方法及步驟

1.引入PHPExcel文件:require_once("../Classes/PHPExcel.php");
2.實例化PHPExcel:$ObjPHPExcel = new PHPExcel();
3.獲取當前工作sheet:$ObjPHPExcel->getACtiveSheet();
4.給當前工作表設置名稱:$ObjPHPExcel->setTitle('sheet表名稱');
5.添加數據,賦值:$ObjPHPExcel->setCellValue('單元格坐標','值');
6.按照指定格式生成excel文件: $ObjPHPExcel->PHPExcel_IOFactory::createWriter($ObjPHPExcel,'Excal5');
7.保存Excel文件:$ObjPHPExcel->save('保存路徑及文件名');
8.如果要將生成的Excel文件輸出到瀏覽器:
        Excel5需要添加以下代碼:
         header("Content-type:application/vnd.ms-excel");//輸出Excel03文件
         header("Content-Disposition:attachment;filename=test.xls');
         header("Content-Control:max-age = 0");
        $ObjPHPExcel->save("php://output");
        Excel7需要添加以下代碼:
         header("Content-type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");//輸出Excel07文件
         header("Content-Disposition:attachment;filename=test.xlsx');//瀏覽器輸出文件名稱
         header("Content-Control:max-age = 0");//禁止瀏覽器緩存
        $ObjPHPExcel->save("php://output");

二、Excel樣式控制

1.合並單元格:$ObjPHPExcel->getActiveSheet()->mergeCells('A18:E22');
2.拆分單元格:$ObjPHPExcel->getActiveSheet()->unmergeCells('A18:E22');
3.設置默認單元格水平方向居中:$ObjPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal( PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
4.設置默認單元格垂直方向居中:$ObjPHPExcel->getDefaultStyle()->getAlignment()->setvertical( PHPExcel_Style_Alignment::VERTICAL_CENTER);
5.設置默認字體樣式:字體類型: $ObjPHPExcel->getDefaultStyle()->getFont()->setName('微軟雅黑');
        字體大小:$ObjPHPExcel->getDefaultStyle()->getFont()->setSize(14);
6.設置指定字體樣式:$ObjPHPExcel->getStyle('A18:E22')->getFont()->setName('微軟雅黑');
        字體大小:$ObjPHPExcel->getStyle('A18:E22')->getFont()->setSize(14);
7.設置背景顏色:填充方式(完全填充):$ObjPHPExcel->getStyle('B2')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        填充顏色:$objPHPExcel->getStyle('B2')->getFill()->getStartColor()->setARGB('FFFF0000');
8.設置邊框:
    $styleArray = array(
        'borders' => array(
            'outline' => array(
                'style' => PHPExcel_Style_Border::BORDER_THICK,
                'color' => array('argb' => 'FFFF0000'),
            ),
        ),
    );
    $objWorksheet->getStyle('B2:G8')->applyFromArray($styleArray);
    調用getStyle()方法的,參數都可以通過數組的方式傳入。
9.自動換行:
  開啟自動換行:$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true); 在需要換行的值中添加\n,然后才能自動換行:$objPHPExcel->getActiveSheet()->getCell('A1')->setValue("hello\nworld"); 10.設置單元格格式:
  設置單元格格式為字符串(解決身份證活手機號格式為科學記數法):$objPHPExcel->getActiveSheet()->getCell('A1')->setValueExplicit('25', PHPExcel_Cell_DataType::TYPE_STRING);

 

三、添加圖片、標注

1.添加圖片:
        $ObjSheet = $ObjPHPExcel->getActiveSheet();////獲取當前sheet表
        $ObjDrawing = new PHPExcel_WorkSheet_Drawing();//獲取一個圖片的操作對象
        $ObjDrawing->setPath("圖片路徑");//加載圖片路徑
        $ObjDrawing->setCoordinates('F5');//設置圖片插入左上角坐標
        $ObjDrawing->setWidth(500);//設置圖片寬度(等比縮放)
        $ObjDrawing->setHeight(100);//設置圖片高度(等比縮放)如果寬度和高度同時設置,圖片會等比縮放兩次,這里需要注意
        $ObjDrawing->setOffsetX(20);//設置單元格內偏移量,不能超過單元格寬度,否則無效
        $ObjDrawing->setOffsetY(20);//設置單元格內偏移量,不能超過單元格高度,否則無效
        $ObjDrawing->setWorkSheet($ObjSheet);//將圖片插入到sheet中
2.添加豐富文字塊(即單元格內文字設置不同的樣式)
        $ObjRichtext = new PHPExcel_RichText();//獲得一個文字塊操作對象
        $ObjRichtext->createText('文字內容');//添加正常的文字
        $ObjStyleFont = $ObjRichtext->createTextRun("需要修改格式的文字內容");//添加需要修改樣式的文字
        $ObjStyleFont->getFont()->setSize(16)->setBold(True);//設置文字樣式
        $ObjRichtext->createText('文字內容');//添加正常的文字
        $ObjSheet->getCell('A4')->setValue($ObjRichtext);//將文字塊插入sheet中
3.添加批注:(注:合並單元格添加注釋功能Excel2007以上才支持)
        $ObjSheet->getComment("F4")->gettext()->createTextRun('批注內容');
4.超鏈接:
        $ObjSheet->setCellValue('B1','百度');
        $ObjSheet->getCell('B1')->getHyperlink()->setUrl("https://www.baidu.com");

 

四、生成圖形報表(折線、餅狀、柱狀、區域等等)
    這塊的內容比較多,日常用到可能比較少,我就沒有給大家總結,不過可以詳見PHPExcel擴展包中Examples目錄下的實例PHP文件,有很多demo,注釋也很清楚。
 
五、Excel導入文件(全部加載)
1.引入PHPExcel導出文件:require_once("../Classes/PHPExcel/IOFactory.php");
2.加載需要Excel的Excel文件:$ObjPHPExcel->PHPExcel_IOFactory::load($filename);
3.獲取excel文件中有多少個sheet:$sheetCount = $ObjPHPExcel->getSheetCount();
4.遍歷sheet,將所有sheet中的數據組成數組:
    for($i=0;$i<$sheetCount;$i++){
        $dataArray = $ObjPHPExcel->getSheet($i)->toArray();
    }
5.上邊方法只能獲取Excel中所有數據,如過需要篩選數據,方法如下:
    foreach$ObjPHPExcel->getWorksheetIterator  as  $sheet){
            foreach($ObjPHPExcel->getRowIterator  as  $row ){
                    if($row->getRowIndex() < 3){
                            continue;
                    }//獲取行號,只獲取第三行之后的數據
                    foreach($ObjPHPExcel->getCellIterator  as $cell){
                            $data = $cell->getValue();//獲取單元格數據
                    }
            }
    }

 

六、Excel導入文件(部分加載)

1.獲取excel文件類型(xls\xlsx...):$file_type = PHPExcel_IOFactory::identify($filename);
2.獲取文件讀取操作對象:$objReader = PHPExcel_IOFactory::createReader($file_type);
3.指定需要加載sheet的名稱:$sheetName = arrat('sheet1','sheet2');
4.根據sheet名稱加載數據:$objReader->setLoadSheetsOnly($sheetName);

 

必須要注意的的是PHPExcel對內存占用很大,在不進行特殊設置的情況下,phpExcel將讀取的單元格信息保存在內存中,一個單元格大概占用1KB。

為了應對內存占用的問題:

1.可以使用PHPExcel_Settings::setCacheStorageMethod() 來設置不同的緩存方式,已達到降低內存消耗的目的!需要注意的是:必須在new PHPExcel對象之前添加。
2.將單元格數據序列化后保存在內存中     
  PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; 3.將單元格序列化后再進行Gzip壓縮,然后保存在內存中
  PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip; 4.緩存在臨時的磁盤文件中,速度可能會慢一些
  PHPExcel_CachedObjectStorageFactory::cache_to_discISAM; 5.保存在php://temp   PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; 6.保存在memcache中
  PHPExcel_CachedObjectStorageFactory::cache_to_memcache。

舉兩個應對內存占用問題的小例子:

eg1:
        $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;//選擇緩存方式
        $cacheSettings = array('memoryCacheSize'=>'16MB');//緩存設置
        PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);//設置緩存
        $objPHPExcel = new PHPExcel();
eg2:
    $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;//選擇緩存方式
    $cacheSettings = array(
            'memcacheServer' => 'localhost',
            'memcachePort' => 11211,
            'cacheTime' => 600
    );//memcache緩存設置
    PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);//設置緩存

 

這些基本能滿足日常開發需要,如果要更復雜的需求,大家可以詳見PHPExcel擴展包中Examples目錄下的實例PHP文件,有很多demo,注釋也很清楚。或者翻閱PHPExcel的官方文檔。

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM