Maison  >  Article  >  développement back-end  >  Un article explique comment utiliser PHP nativement pour exporter des fichiers Excel et CSV

Un article explique comment utiliser PHP nativement pour exporter des fichiers Excel et CSV

藏色散人
藏色散人avant
2021-07-23 14:11:474628parcourir
pour contrôler les cellules.

Le pseudo code exporté est le suivant :
/**
 * 导出excel文件
 *
 * @param string $excelFileName 导出的文件名
 * @param array $title excel的标题列
 * @param array $data 导出的数据
 */
public function exportExcel($excelFileName, $title, $data)
{
    $str = "<html xmlns:o=\"urn:schemas-microsoft-com:office:office\"\r\nxmlns:x=\"urn:schemas-microsoft-com:office:excel\"\r\nxmlns=\"http://www.w3.org/TR/REC-html40\">\r\n<head>\r\n<meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">\r\n</head>\r\n<body>";
    $str .="<table border=1 align=center cellpadding=0 cellspacing=0>";
    // 拼接标题行
    $str .= &#39;<tr style="height:25px;font-size:13px;font-weight: bold;">&#39;;
    foreach ($title as $key => $val) {
        $str .= &#39;<td>&#39;.$val.&#39;</td>&#39;;
    }
    $str .= &#39;</tr>&#39;;
    // 拼接数据
    foreach ($data as $key => $val) {
        $str .= &#39;<tr style="text-align: left;height:25px;font-size:13px;">&#39;;
        foreach ($val as $v) {
            if (is_numeric($v) && $v > 100000000) {
                $str .= "<td style=&#39;vnd.ms-excel.numberformat:@&#39;>".$v."</td>";
            } elseif (is_numeric($v) && preg_match(&#39;/^[0-9]+(\.[0-9]{2})+$/&#39;, $v)) {
                // 是两位小数的保留2位显示
                $str .= "<td style=&#39;vnd.ms-excel.numberformat:0.00&#39;>".$v."</td>";
            } elseif (preg_match(&#39;/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (0[0-9]|1[0-9]|2[0-4]):(0[0-9]|[1-5][0-9]):(0[0-9]|[1-5][0-9])$/&#39;, $v)) {
                // 是日期
                $str .= "<td style=&#39;vnd.ms-excel.numberformat:yyyy-mm-dd\ hh\:mm\:ss&#39;>".$v."</td>";
            } else {
                $str .= "<td>".$v."</td>";
            }
        }
        $str .= "</tr>\n";
    }
    $str .= "</table></body></html>";
    // 实现文件下载
    header("Content-Type: application/vnd.ms-excel; name=&#39;excel&#39;");
    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=" . $excelFileName);
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Pragma: no-cache");
    header("Expires: 0");
    exit($str);
}

J'ai simplement écrit quelques styles et quelques vérifications régulières, vous pouvez les supprimer s'ils ne sont pas nécessaires. Parlez principalement des instructions de formatage de certaines cellules.

tdL'exportation ci-dessus aura plusieurs problèmes courants :

1 Pour le numéro d'identification, le numéro de téléphone portable et autres nombres excessivement grands, ils seront affichés en notation scientifique. Si l'affichage de la chaîne ne vous dérange pas, vous pouvez le contrôler en définissant le style de

Cela signifie l'afficher sous forme de texte

2 Pour les nombres, si vous devez conserver les décimales, vous pouvez définir

Si vous en avez besoin. conservez le nombre de décimales, écrivez simplement quelques 0. Notez que si vous transmettez une valeur avec plus de décimales que ce qui peut être conservé, la valeur sera arrondie. Par exemple, si l'entrée est 87,98 et que le paramètre décimal est

, alors il sera affiché comme 88,0tdstyle='vnd.ms-excel.numberformat:@'3 Pour le paramètre de format de date

, les espaces, les deux-points, etc. doivent être échappés. Si vous utilisez la table de caractères d'espace en HTML, ce sera un peu différent. Les combinaisons de formats ci-dessus sont couramment utilisées et vous pouvez effectuer la conversion vous-même. Il existe d'autres conversions

Celles-ci seront affichées sous la forme style='vnd.ms-excel.numberformat:0.00' ; elles seront affichées sous la forme vnd.ms-excel.numberformat:0.0

4. Si vous souhaitez afficher le pourcentage, vous pouvez utiliser le format style='vnd.ms-excel.numberformat:yyyy-mm-dd hh:mm:ss' Une chose à noter est que votre valeur sera amplifiée 100 fois lors de son affichage. Autrement dit, si vous souhaitez l'afficher sous la forme style='vnd.ms-excel.numberformat:"Short Date"', la valeur que vous transmettez doit être 2019/7/1style='vnd.ms-excel.numberformat:"Medium Date"'1-Jul-195, séparateur de milliers. Si vous devez afficher des nombres avec des séparateurs de milliers, vous pouvez définir

Par exemple,

sera affiché comme style='vnd.ms-excel.numberformat:0%'2%0.02Les plus couramment utilisés sont ceux ci-dessus. Il existe également une liste couramment utilisée ici, mais le mot-clé qu'il utilise est.

. J'ai essayé d'utiliser

dans style='vnd.ms-excel.numberformat:#,###' Les deux 123456 et 123,456 vont bien.

mso-number-formatstylePHP exporte CSVmso-number-formatvnd.ms-excel.numberformatLe fichier CSV est en fait un fichier à usage général, parfois également appelé fichier texte. Par conséquent, le fichier de datagramme CSV exporté ne peut pas définir le style de cellule et le fichier xls est un fichier binaire et doit être ouvert à l'aide d'outils tels qu'Excel. S'il n'y a pas d'exigence stricte pour exporter cela plus rapidement, je vois que certaines exportations sur Alibaba Cloud sont au format CSV, mais ce dont nous avons besoin ici doivent être des fichiers Excel

Le pseudo code est le suivant :
/**
 * 导出CSV标准文件
 *
 * @param string $fileName 导出的文件名
 * @param array $title 标题列
 * @param array $data 导出的数据
 */
function exportCsv($fileName, $title, $data)
{
    // 清空输出流,防止有别的信息
    ob_end_clean();
    // 打开一个输出流
    ob_start();
    // 设置header信息
    header("Content-Type: text/csv");
    header("Content-Disposition:filename=". $fileName);
    // 打开文件流
    $fileHandle = fopen(&#39;php://output&#39;, &#39;w&#39;);
    //转码 防止乱码
    fwrite($fileHandle, chr(0xEF).chr(0xBB).chr(0xBF));
    // 先把标题写进去
    fputcsv($fileHandle, $title);
    $index = 0;
    foreach ($data as $item) {
        // 每2000条释放一次资源
        if ($index == 2000) {
            $index = 0;
            ob_flush();
            flush();
        }
        $index++;
        fputcsv($fileHandle, $item);
    }
    // 释放资源
    ob_flush();
    flush();
    ob_end_clean();
}

Etude recommandée : "

Tutoriel vidéo PHP

》                                                                                                                                                          ' ' ' à

             à travers ' ' à ' ‐ à ' ‐ ‐ ‐ ‐ ‐ ,​

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer