Heim  >  Artikel  >  Backend-Entwicklung  >  PHP verwendet eine native Methode zum Exportieren der Excel-Instanzfreigabe

PHP verwendet eine native Methode zum Exportieren der Excel-Instanzfreigabe

黄舟
黄舟Original
2017-08-23 09:40:055311Durchsuche

1. Vorwort

Manchmal ist es notwendig, Datenbanktabellenressourcen nach Excel zu exportieren, um einige Berichtsdaten zu erstellen.

Es gibt mehrere Möglichkeiten, Excel aus PHP zu exportieren:

  1. Verwenden Sie zum Exportieren die Klassenbibliothek von PHP, z. B. PHPExcel

  2. Verwenden Sie die native PHP-Methode zum Exportieren

In diesem Artikel wird erläutert, wie Sie Excel mithilfe der nativen Methode exportieren

2.1, ob-Ausgabe

    ob_start();
  • ob_get_contents
  • ob_end_clean
  • fopen
  • fwrite
  • fclose
  • iconv
  • 2.2, Header-Ausgabe

    Header
  1. iconv
  2. 3 ob-Funktion zum Exportieren von Excel

Die ob-Funktion ist hauptsächlich in drei Schritte unterteilt:

    Cache-Einstellungen
  1. Cache lesen
  2. Datei schreiben
  3. Fügen Sie die exportierte Excel-Klasse unten ein


4 . Vollständiger Seitencode
<?phpclass Excel 
{    // ob函数缓存的开始
    public static function start ()
    {
        ob_start();
    }    // 获取缓存内容
    public static function save ($path) 
    {
        $data = ob_get_contents();
        ob_end_clean();
        self::writeToExcel($path, $data);
    }    //写到文件
    private static function writeToExcel ($fn, $data) 
    {
        $dir = self::setDir();
        $fp = fopen($dir . &#39;/&#39;. $fn, &#39;wb&#39;);
        fwrite($fp, $data);
        fclose($fp);
    }    //excel默认是GKB,所有要转码
    public static function setChar ($value, $inchar = &#39;utf-8&#39;, $outchar =&#39;gbk&#39;)
    {        
    return  iconv($inchar, $outchar, $value);//转化编码    
    }    
    //创建目录,linux系统一般要写到文件,目录需要w谦虚,而文件需要x权限,为了省事直接建立子文件夹,可以不需要修改谦虚
    public static function setDir($dirName = &#39;excel&#39;)
    {        if(!is_dir($dirName)) {
            mkdir($dirName);
        }        return $dirName;
    }
}


5. Verwenden Sie den Header, um Excel herunterzuladen.
<?php
    header(&#39;Content-Type: text/html; charset=GBK&#39;); //excel需要GBK编码,为了防止转码产生的乱码,需要设置成GBK
    require &#39;coon.php&#39;;
    require &#39;excel.class.php&#39;;

    $sql = &#39;select * from user&#39;;
    $res = $link->query($sql);    //判断是否有发送get数据
    if(isset($_GET[&#39;id&#39;])){
        $name = empty($_GET[&#39;id&#39;]) ? &#39;a&#39; . rand(1000,9999) : $_GET[&#39;id&#39;] ;
        $filename = $name . &#39;.xls&#39;;        //设置缓存的开始        Excel::start();
    }?>
<?php    //页面输出一般是不需要转码的,excel输出才需要转码
    echo &#39;<table width=500 height=25 border=0 align=center cellpadding=0 cellspacing=0>&#39;;
    echo &#39;<thead><tr>&#39;;    //设置thead输出
    echo &#39;<td style="border-bottom:1px solid black;padding:10px;text-align:center;">&#39; . Excel::setChar(&#39;编号&#39;) . &#39;</td>&#39;;
    echo &#39;<td style="border-bottom:1px solid black;padding:10px;text-align:center;">&#39; . Excel::setChar(&#39;用户名&#39;) . &#39;</td>&#39;;
    echo &#39;<td style="border-bottom:1px solid black;padding:10px;text-align:center;">&#39; . Excel::setChar(&#39;密码&#39;) . &#39;</td>&#39;;
    echo &#39;</thead></tr>&#39;;?>
<?php
    echo &#39;<tbody>&#39;;    //设置tbody输出
    while($re = $res->fetch(PDO::FETCH_ASSOC)){
        echo &#39;<tr>&#39;;
        echo &#39;<td style="border-bottom:1px solid black;padding:10px;text-align:center;">&#39; . Excel::setChar($re[&#39;id&#39;]) . &#39;</td>&#39;;
        echo &#39;<td style="border-bottom:1px solid black;padding:10px;text-align:center;">&#39; . Excel::setChar($re[&#39;user&#39;]) . &#39;</td>&#39;;
        echo &#39;<td style="border-bottom:1px solid black;padding:10px;text-align:center;">&#39; . Excel::setChar($re[&#39;pwd&#39;]) . &#39;</td>&#39;;
        echo &#39;</tr>&#39;;
    }
    echo &#39;</tbody></table>&#39;;?>
<?phpif(isset($_GET[&#39;id&#39;])){    //保存文件    Excel::save($filename);
}if(isset($_GET[&#39;id&#39;])){
    echo &#39;<a href="obexcel.php">&#39; .Excel::setChar(&#39;完成&#39;) .&#39;</a>&#39;;
}else{
    echo &#39;<a href="obexcel.php?id">&#39; . Excel::setChar(&#39;导出&#39;) .&#39;</a>&#39;;
    
}?>

Die Verwendung der ob-Funktion zum Exportieren von Excel kann nur auf dem Server gespeichert werden. Das Herunterladen kann nicht bereitgestellt werden (unter besonderer Verarbeitung ist es weiterhin möglich). Im Folgenden wird die Verwendung der Header()-Funktion zum Exportieren und Herunterladen von Excel beschrieben

Die beiden wichtigsten Header()-Funktionen


Andere Methoden sind die gleichen wie der Export der ob-Funktion (vollständiger Code unten)
header("Content-type:application/vnd.ms-excel");//指定文件类型    
header("Content-Disposition:filename=a.xls" );  //指定下载文件名


Fazit
query($sql);?>

';
    echo '';    //设置thead输出
    echo '' . Excel::setChar('编号') . '';
    echo '' . Excel::setChar('用户名') . '';
    echo '' . Excel::setChar('密码') . '';
    echo '';?>

';    //设置tbody输出
    while($re = $res->fetch(PDO::FETCH_ASSOC)){
        echo '';
        echo '' . Excel::setChar($re['id']) . '';
        echo '' . Excel::setChar($re['user']) . '';
        echo '' . Excel::setChar($re['pwd']) . '';
        echo '';
    }
    echo '';?>

Hier wird nur kurz der Export und Download von Excel vorgestellt. Eine davon ist die Verwendung der Funktion ob() und die andere die Verwendung der Funktion header(). Die beiden Methoden sind ähnlich, es sollte jedoch beachtet werden Excel erfordert eine GBK-Kodierung und muss zum Transkodieren die Funktion iconv verwenden. Stellen Sie sicher, dass keine verstümmelten Zeichen angezeigt werden.

Das obige ist der detaillierte Inhalt vonPHP verwendet eine native Methode zum Exportieren der Excel-Instanzfreigabe. 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