Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in den Nutzungsprozess von PHPExcel

Einführung in den Nutzungsprozess von PHPExcel

dream
dreamOriginal
2017-07-02 09:48:592112Durchsuche

Ich verwende das Thinkphp-Framework

Ich bin auf ein Szenario gestoßen, in dem der Zusteller nach der Zustellung der Waren eine nach der anderen Benachrichtigungstextnachrichten an Benutzer senden musste. Die Effizienz war zu gering, also dachte ich an Vorlagentext Nachrichten,

Auf die Frage der Effizienz reduziert, habe ich es so entworfen. Er hat Excel importiert, ich habe es über phpExcel analysiert, den Namen, die Telefonnummer, die Bestellnummer, den Bestelltyp abgeglichen

und Anschließend wird eine Benachrichtigungstextnachricht an den Benutzer gesendet. Je nach Bestelltyp werden unterschiedliche Bestellanfrageadressen und Benachrichtigungsinformationen gesendet.

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

Dieser Artikel beschreibt hauptsächlich meinen Prozess der Verwendung von PHPExcel

Dieser Artikel ist nicht Yuanchuang, er wurde kompiliert Nachdem ich viele Beiträge großer Meister gelesen und sogar den Code kopiert hatte, habe ich den spezifischen Originaltext nicht aufgezeichnet, also habe ich ihn nicht Stück für Stück gepostet

Ich habe diesen Artikel nur für meine eigene Aufnahme geschrieben und lernen

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

1: PHPExcel herunterladen

kann von der offiziellen Website heruntergeladen werden. Ich habe auch das Dokument hochgeladen: http://download.csdn.net/detail/fei003/9851672

2 Fügen Sie PHPExcel in das Projekt ein

Legen Sie die dekomprimierte Datei von PHPExcel in Thinkphp/Library/Vendor ab

3. Kapseln Sie die Operationsmethode in eine Funktion (oder Klassenbibliothek), um Ihre eigene Verwendung zu erleichtern

Excel .PHP-Funktion

<?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,&#39;message&#39;=>&#39;file not found!&#39;);
    }
    // 判断文档类型,使用相应的方法,可以解析多种文件,这只是判断两个,其余的自己判断
    if($filetype == &#39;xlsx&#39;){
        $filetype = &#39;Excel2007&#39;;
    }elseif($filetype == &#39;xls&#39;){
        $filetype = &#39;Excel5&#39;;
    }
    // 引入扩展
    Vendor("PHPExcel.PHPExcel.IOFactory");
    $objReader = \PHPExcel_IOFactory::createReader($filetype);

    try{
        $PHPReader = $objReader->load($file);
    }catch(Exception $e){}
    if(!isset($PHPReader)) return array("error"=>0,&#39;message&#39;=>&#39;read error!&#39;);
    // 获得所有的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)==&#39;=&#39;){
                    return array("error"=>0,&#39;message&#39;=>&#39;can not use the formula!&#39;);
                    exit;
                }
                if($cell->getDataType()==\PHPExcel_Cell_DataType::TYPE_NUMERIC){
                    // $cellstyleformat=$cell->getParent()->getStyle( $cell->getCoordinate() )->getNumberFormat();
                    // $formatcode=$cellstyleformat->getFormatCode();
                    if (preg_match(&#39;/^([$[A-Z]*-[0-9A-F]*])*[hmsdy]/i&#39;, $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(&#39;Think&#39;);//must, resolve ThinkPHP and PHPExcel conflicts
    unset($objWorksheet);
    unset($PHPReader);
    unset($PHPExcel);
    unlink($file);
    return array("error"=>1,"data"=>$array);
}


Hinweis: Fügen Sie beim Instanziieren


um es zu verwenden

<?php
namespace 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 &#39;文件不存在&#39;;
            exit;
        }
        //
        $fileMessage = explode(&#39;.&#39;,$_FILES[excel][name]);
        // $filename = $fileMessage[0];
        // 获得文件扩展名
        $filetype = $fileMessage[1];
        //使用函数,获得excel数据
        $re = importExecl($file,$filetype);
        $content = $re[&#39;data&#39;][0][&#39;Content&#39;];
        // P助手函数,自己扩展
        P($content);exit; /*逻辑代码*/
    }
}
und dann wie folgt auf die Seite gedruckt

Einführung in den Nutzungsprozess von PHPExcel

Von Auf der Seite ist die Datenanalyse sehr gut

Sobald Sie die Daten erhalten, können Sie natürlich tun und lassen, was Sie wollen. . . Hehe

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

Ein anderes Szenario besteht darin, Ihre eigenen Daten in einer Excel-Tabelle zu generieren

Der Code lautet wie folgt

public function outPortExcel()
{
    // 引入文件
    Vendor("PHPExcel.PHPExcel");
    vendor(&#39;PHPExcel/PHPExcel/Writer/Excel2007.php&#39;);
    $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(&#39;A1&#39;, &#39;姓名&#39;);//可以指定位置
    $phpExcel->getActiveSheet()->setCellValue(&#39;B1&#39;, &#39;年龄&#39;);
    $phpExcel->getActiveSheet()->setCellValue(&#39;C1&#39;, &#39;性别&#39;);
    $phpExcel->getActiveSheet()->setCellValue(&#39;D1&#39;, &#39;家庭&#39;);
    //循环添加数据(根据自己的逻辑)
    for($i = 2;$i<200;$i++) {
        $phpExcel->getActiveSheet()->setCellValue(&#39;A&#39; . $i, &#39;张鹏飞&#39;.$i);
        $phpExcel->getActiveSheet()->setCellValue(&#39;B&#39; . $i, rand(25,28));
        $phpExcel->getActiveSheet()->setCellValue(&#39;C&#39; . $i, rand(0,1));
        $phpExcel->getActiveSheet()->setCellValue(&#39;D&#39; . $i, &#39;yes&#39;);
    }
    $objWriter = new \PHPExcel_Writer_Excel2007($phpExcel);
    // 文件名
    $filename = &#39;./a.xlsx&#39;;
    // 存储文件
    $objWriter->save($filename);

    // 下载文件
    // 强制下载函数 代码请转至 http://blog.csdn.net/fei003/article/details/54614097
    download(&#39;./a.xlsx&#39;);
}
ok , das ist der Prozess der Verwendung von PHPExcel

Das obige ist der detaillierte Inhalt vonEinführung in den Nutzungsprozess von PHPExcel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn