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

*文
Libérer: 2023-03-18 09:16:02
original
3813 Les gens l'ont consulté

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
Copier après la connexion

2.2. Sortie d'en-tête

header
iconv
Copier après la connexion

3. Utilisez la fonction ob pour exporter depuis Excel

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

进行缓存的设置
读取缓存
写入文件
Copier après la connexion

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;
    }
}
Copier après la connexion


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;;
    
}
?>
Copier après la connexion


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" );  //指定下载文件名
Copier après la connexion

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 '';
?>
Copier après la connexion


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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal