PHPExcel的使用過程介紹

來源:互聯網
上載者:User
我使用的是thinkphp架構

遇到個一情境,發貨員發貨之後需要一個一個給使用者發通知簡訊,效率太低,所以我就想到了模板簡訊,

降到效率問題,我是這樣設計的,他把Excel匯入,我通過phpExcel進行解析,匹配到姓名,電話,和訂單號,訂單類型

然後向使用者發送通知簡訊,根據訂單類型發送不同的訂單查詢地址和通知資訊

------------------------------------------------------------------------------------------------------------------------------------------

這篇主要記錄下我使用PHPExcel的過程

這篇不是遠創,是看了好多大神的文章後整理的,甚至說複製的代碼,但是具體的原文我沒有做記錄,就不一點一點貼出來了

寫此文僅供自己記錄學習之用

----------------------------------------------------------------------------------------------------------------------------------------

1:下載PHPExcel

可以從官網下載,我也把文檔上傳了http://download.csdn.net/detail/fei003/9851672

2 把PHPExcel放入項目中

把PHPExcel解壓後的檔案放入Thinkphp/Library/Vendor中

3.把操作方法封裝成函數(或者類庫),方便自己使用

excel.PHP 函數

<?php/** * Created by PhpStorm. * User: 飛 * Date: 2017/6/13 * Time: 10:20 * 匯入excel檔案,對錶格進行解析 */function importExecl($file,$filetype){    if(!file_exists($file)){        return array("error"=>0,'message'=>'file not found!');    }    // 判斷文件類型,使用相應的方法,可以解析多種檔案,這隻是判斷兩個,其餘的自己判斷    if($filetype == 'xlsx'){        $filetype = 'Excel2007';    }elseif($filetype == 'xls'){        $filetype = 'Excel5';    }    // 引入擴充    Vendor("PHPExcel.PHPExcel.IOFactory");    $objReader = \PHPExcel_IOFactory::createReader($filetype);    try{        $PHPReader = $objReader->load($file);    }catch(Exception $e){}    if(!isset($PHPReader)) return array("error"=>0,'message'=>'read error!');    // 獲得所有的sheets表格    $allWorksheets = $PHPReader->getAllSheets();    $i = 0;    //對sheet表格遍曆分析    foreach($allWorksheets as $objWorksheet){        // 獲得sheet表格的標題        $sheetname=$objWorksheet->getTitle();        // 獲得總行數        $allRow = $objWorksheet->getHighestRow();        $highestColumn = $objWorksheet->getHighestColumn();        // 獲得總列數        $allColumn = \PHPExcel_Cell::columnIndexFromString($highestColumn);        $array[$i]["Title"] = $sheetname;        $array[$i]["Cols"] = $allColumn;        $array[$i]["Rows"] = $allRow;        $arr = array();        // 對合并的儲存格進行分析        $isMergeCell = array();        foreach ($objWorksheet->getMergeCells() as $cells) {//merge cells            foreach (\PHPExcel_Cell::extractAllCellReferencesInRange($cells) as $cellReference) {                $isMergeCell[$cellReference] = true;            }        }        for($currentRow = 1 ;$currentRow<=$allRow;$currentRow++){            $row = array();            for($currentColumn=0;$currentColumn<$allColumn;$currentColumn++){;                $cell =$objWorksheet->getCellByColumnAndRow($currentColumn, $currentRow);                $afCol = \PHPExcel_Cell::stringFromColumnIndex($currentColumn+1);                $bfCol = \PHPExcel_Cell::stringFromColumnIndex($currentColumn-1);                $col = \PHPExcel_Cell::stringFromColumnIndex($currentColumn);                $address = $col.$currentRow;                $value = $objWorksheet->getCell($address)->getValue();                if(substr($value,0,1)=='='){                    return array("error"=>0,'message'=>'can not use the formula!');                    exit;                }                if($cell->getDataType()==\PHPExcel_Cell_DataType::TYPE_NUMERIC){                    // $cellstyleformat=$cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat();                    // $formatcode=$cellstyleformat->getFormatCode();                    if (preg_match('/^([$[A-Z]*-[0-9A-F]*])*[hmsdy]/i', $formatcode)) {                        $value=gmdate("Y-m-d", \PHPExcel_Shared_Date::ExcelToPHP($value));                    }else{                        $value=\PHPExcel_Style_NumberFormat::toFormattedString($value,$formatcode);                    }                }                if($isMergeCell[$col.$currentRow]&&$isMergeCell[$afCol.$currentRow]&&!empty($value)){                    $temp = $value;                }elseif($isMergeCell[$col.$currentRow]&&$isMergeCell[$col.($currentRow-1)]&&empty($value)){                    $value=$arr[$currentRow-1][$currentColumn];                }elseif($isMergeCell[$col.$currentRow]&&$isMergeCell[$bfCol.$currentRow]&&empty($value)){                    $value=$temp;                }                $row[$currentColumn] = $value;            }            $arr[$currentRow] = $row;        }        $array[$i]["Content"] = $arr;        $i++;    }    // spl_autoload_register('Think');//must, resolve ThinkPHP and PHPExcel conflicts    unset($objWorksheet);    unset($PHPReader);    unset($PHPExcel);    unlink($file);    return array("error"=>1,"data"=>$array);}


注意:執行個體化時命名空間要加\


使用的時候就簡單了,下面是使用代碼

<?phpnamespace PhpExcel\Controller;use Think\Controller;/** * Created by PhpStorm. * User: 飛 * Date: 2017/6/7 * Time: 11:26 */class IndexController extends Controller{    public function index()    {        $this->display();    }    public function importExcel()    {        // 表單提交檔案過來        // 獲得檔案路徑        $file = $_FILES[excel][tmp_name];        if(!file_exists($file)){            echo '檔案不存在';            exit;        }        //        $fileMessage = explode('.',$_FILES[excel][name]);        // $filename = $fileMessage[0];        // 獲得副檔名        $filetype = $fileMessage[1];        //使用函數,獲得excel資料        $re = importExecl($file,$filetype);        $content = $re['data'][0]['Content'];        // P助手函數,自己擴充        P($content);exit; /*邏輯代碼*/    }}

然後在頁面中列印如下

從頁面上來看,資料解析的很不錯

當然,拿到資料後,是不是想幹什麼就幹什麼呢。。。嘿嘿

---------------------------------------------------------------------------------------------------

另外一種情境就是把自己的資料產生excel表格

代碼如下

public function outPortExcel(){    // 引入檔案    Vendor("PHPExcel.PHPExcel");    vendor('PHPExcel/PHPExcel/Writer/Excel2007.php');    $phpExcel = new \PHPExcel();    $phpExcel->getProperties()->setTitle("Office 2007 XLSX Test Document title");    $phpExcel->getProperties()->setSubject("Office 2007 XLSX Test Document subject");    //單獨添加資料    $phpExcel->setActiveSheetIndex(0);    $phpExcel->getActiveSheet()->setCellValue('A1', '姓名');//可以指定位置    $phpExcel->getActiveSheet()->setCellValue('B1', '年齡');    $phpExcel->getActiveSheet()->setCellValue('C1', '性別');    $phpExcel->getActiveSheet()->setCellValue('D1', '家庭');    //迴圈添加資料(根據自己的邏輯)    for($i = 2;$i<200;$i++) {        $phpExcel->getActiveSheet()->setCellValue('A' . $i, '張鵬飛'.$i);        $phpExcel->getActiveSheet()->setCellValue('B' . $i, rand(25,28));        $phpExcel->getActiveSheet()->setCellValue('C' . $i, rand(0,1));        $phpExcel->getActiveSheet()->setCellValue('D' . $i, 'yes');    }    $objWriter = new \PHPExcel_Writer_Excel2007($phpExcel);    // 檔案名稱    $filename = './a.xlsx';    // 隱藏檔    $objWriter->save($filename);    // 下載檔案    // 強制下載函數 代碼請轉至 http://blog.csdn.net/fei003/article/details/54614097    download('./a.xlsx');}

ok,這就是PHPExcel的使用過程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.