Heim >Backend-Entwicklung >PHP-Tutorial >In einem Artikel wird erläutert, wie Sie PHP nativ zum Exportieren von Excel- und CSV-Dateien verwenden

In einem Artikel wird erläutert, wie Sie PHP nativ zum Exportieren von Excel- und CSV-Dateien verwenden

藏色散人
藏色散人nach vorne
2021-07-23 14:11:474785Durchsuche

Der exportierte Pseudocode lautet wie folgt:
/**
 * 导出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);
}
Ich habe einfach einige Stile und einige regelmäßige Überprüfungen geschrieben. Sie können sie löschen, wenn sie nicht benötigt werden. Sprechen Sie hauptsächlich über die Formatierungsanweisungen einiger Zellen.

Der obige Export weist mehrere häufige Probleme auf: td 的样式来控制单元格。

导出伪代码如下:

/**
 * 导出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();
}

其中我简单写了些样式和一些正则校验,不用可以删除。主要说一下一些单元格的格式化说明。

以上的导出会有几个常见的问题:

1.对于身份证号,手机号等过大的数字 显示的时候会用科学计数法显示。如果不介意字符串显示的话可以通过设置 td 的样式来控制 style='vnd.ms-excel.numberformat:@' 这样表示用文本的方式来显示

2.对于数字如果需要保留小数位可以设置 style='vnd.ms-excel.numberformat:0.00' 需要保留几位小数就写几个0,需要注意一点如果你传入的值比保留的小数位多,那么值会被四舍五入。比如传入的是 87.98 而设置的保留小数位是 vnd.ms-excel.numberformat:0.0 那么会显示成 88.0

3.对于日期格式设置 style='vnd.ms-excel.numberformat:yyyy-mm-dd hh:mm:ss' 其中空格、冒号等都需要转义。如果使用的是HTML里的空格字符表辅助出来会有些不一样,上面是常用的格式组合,可以自己做转换。还有一些别的转换 style='vnd.ms-excel.numberformat:"Short Date"' 这个会显示成 2019/7/1; style='vnd.ms-excel.numberformat:"Medium Date"' 会显示成 1-Jul-19

4.百分比显示。 要显示百分比的话 可以使用格式 style='vnd.ms-excel.numberformat:0%' 有一点需要注意显示的时候会把你的值放大100倍。也就是说假如你想显示成 2% 你传递进来的值需要是 0.02

5.千位分隔符。如果需要数字显示带千位分隔符可以设置 style='vnd.ms-excel.numberformat:#,###' 比如 123456 就会显示成 123,456

常用的也就上面这些了 这里还有个 常用列表 不过他使用的关键字是 mso-number-format 我尝试了下 style 中使用 mso-number-formatvnd.ms-excel.numberformat

1 Bei ID-Nummern, Mobiltelefonnummern und anderen übermäßig großen Zahlen werden diese in wissenschaftlicher Notation angezeigt. Wenn Ihnen die Anzeige von Zeichenfolgen nichts ausmacht, können Sie sie steuern, indem Sie den Stil von td style='vnd.ms-excel.numberformat:@' festlegen bedeutet, dass es als Text angezeigt wird.

2. Wenn Sie Dezimalstellen beibehalten müssen, können Sie bei Bedarf style='vnd.ms-excel.numberformat:0.00' festlegen Um mehrere Dezimalstellen beizubehalten, schreiben Sie einfach ein paar Nullen. Bitte beachten Sie, dass der Wert gerundet wird, wenn der eingegebene Wert mehr Dezimalstellen aufweist, als beibehalten werden können. Wenn die Eingabe beispielsweise 87,98 ist und die Dezimalstelleneinstellung vnd.ms-excel.numberformat:0.0 ist, wird sie als 88,0

3 angezeigt. Legen Sie als Datumsformat style='vnd. ms-excel.numberformat:yyyy-mm-dd hh:mm:ss' Leerzeichen, Doppelpunkte usw. müssen maskiert werden. Wenn Sie die Leerzeichentabelle in HTML verwenden, sieht es etwas anders aus. Bei den oben genannten Formatkombinationen handelt es sich um häufig verwendete Formatkombinationen, und Sie können die Konvertierung selbst durchführen. Es gibt einige andere Konvertierungen style='vnd.ms-excel.numberformat:"Short Date"', die als 2019/7/1 angezeigt werden; ='vnd.ms-excel.numberformat:"Medium Date"' wird als 1-Jul-19

4 angezeigt. Um einen Prozentsatz anzuzeigen, können Sie das Format style='vnd.ms-excel.numberformat:0%' verwenden. Beachten Sie, dass Ihr Wert bei der Anzeige um das Hundertfache verstärkt wird. Das heißt, wenn Sie es als 2% anzeigen möchten, muss der übergebene Wert 0,02

5 sein. Wenn Sie Zahlen mit Tausendertrennzeichen anzeigen müssen, können Sie style='vnd.ms-excel.numberformat:#,###' festlegen. Beispielsweise wird 123456 verwendet angezeigt werden als 123.456

Die oben genannten sind die am häufigsten verwendeten. Hier gibt es auch eine häufig verwendete Liste, aber das von ihm verwendete Schlüsselwort ist mso-number-format. Ich habe style ausprobiert. Sowohl <code>mso-number-format als auch vnd.ms-excel.numberformat können im Code verwendet werden.

PHP exportiert CSV🎜🎜Die CSV-Datei ist eigentlich eine Allzweckdatei, manchmal auch Textdatei genannt. Daher kann die exportierte CSV-Datagrammdatei den Zellenstil nicht festlegen und die XLS-Datei ist eine Binärdatei und muss mit Tools wie Excel geöffnet werden. Wenn es keine zwingende Anforderung gibt, dies schneller zu exportieren, sehe ich, dass einige Exporte in Alibaba Cloud im CSV-Format erfolgen, aber was wir hier brauchen, müssen Excel-Dateien sein 🎜🎜Der Pseudocode lautet wie folgt: 🎜rrreee🎜🎜Empfohlene Studie: "🎜 PHP-Video-Tutorial 🎜》                                                                                                                                                   ​

Das obige ist der detaillierte Inhalt vonIn einem Artikel wird erläutert, wie Sie PHP nativ zum Exportieren von Excel- und CSV-Dateien verwenden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen