Maison >développement back-end >tutoriel php >Méthode d'implémentation native d'exportation et de téléchargement d'Excel avec PHP

Méthode d'implémentation native d'exportation et de téléchargement d'Excel avec PHP

*文
*文original
2017-12-22 16:17:413873parcourir

Je pense que de nombreux amis utiliseront la fonction d'exportation de données vers EXCEL, alors comment utiliser PHP pour exporter EXCEL ? En plus des bibliothèques de classes telles que PHPExcel, une implémentation native est également possible. Cet article utilise du code natif pour implémenter l'exportation EXCEL.

1. Préface

Parfois, il est nécessaire d'exporter les ressources des tables de base de données vers Excel pour créer des données de rapport.

Il existe plusieurs façons d'exporter Excel en PHP :

Utilisez la bibliothèque de classes PHP pour exporter, telle que PHPExcel

Utilisez la méthode native de PHP pour exporter

Cet article présente comment exporter Excel via des méthodes natives


2 Fonctions clés

2.1, sortie ob

ob_start();
ob_get_contents
ob_end_clean
fopen
fwrite
fclose
iconv

2.2. Sortie d'en-tête

header
iconv

3. Utilisez la fonction ob pour exporter depuis Excel

La fonction ob est principalement divisée en trois étapes :

进行缓存的设置
读取缓存
写入文件

Publié ci-dessous L'exporté classe excel

<?php
class 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权限
    public static function setDir($dirName = &#39;excel&#39;)
    {
        if(!is_dir($dirName)) {
            mkdir($dirName);
        }
        return $dirName;
    }
}


4. Code de page complet


<?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;;
?>
<?php
if(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;;
    
}
?>


5. Utilisez l'en-tête pour télécharger Excel

L'utilisation de la fonction ob pour exporter Excel ne peut être enregistrée que sur le serveur et ne peut pas être téléchargée (c'est toujours possible sous traitement spécial) ; Ce qui suit décrit comment utiliser la fonction header() pour exporter et télécharger Excel


Les deux principales fonctions header()

header("Content-type:application/vnd.ms-excel");//指定文件类型    
header("Content-Disposition:filename=a.xls" );  //指定下载文件名

Les autres méthodes sont les idem que l'export de la fonction ob (à compléter ci-dessous le Code)


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 '';
?>


6. Conclusion

Ici nous ne présentons que brièvement l'exportation et le téléchargement d'Excel, l'une consiste à utiliser la fonction ob() et l'autre à utiliser la fonction header(). Les deux méthodes sont similaires, mais il convient de noter qu'Excel nécessite un encodage GBK. , et la fonction iconv doit être utilisée pour le transcodage afin de garantir qu'aucun caractère tronqué n'apparaisse.


Cet article ne le présente que brièvement, des méthodes plus avancées doivent être explorées par vous-même.

Recommandations associées :

Comment utiliser PHPExcel pour télécharger des tables par lots

[Cours] Tutoriel vidéo PHP Excel Control

Comment implémenter la fonction de classement dans Excel en PHP


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn