PHP 从 MYSQL 导出到 excel

PHP Export to excel from MYSQL

我正在尝试将我的 MySQL 数据写入 Excel 文件,但我在 Excel 单元格方面遇到问题。我所有的文本都放在一个单元格中,我希望每一行的值都在单独的 Excel 单元格中。这是我的代码:

    <html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:x="urn:schemas-microsoft-com:office:excel"xmlns="http://www.w3.org/TR/REC-html40">
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Daily Log</title>
    </head>
    <body>
    <?php
    ini_set('display_errors', 1);
    error_reporting(~0);
    $strKeyword = null;

    if (isset($_POST["txtKeyword"])) {
        $strKeyword = $_POST["txtKeyword"];
    }
    ?>
    <form name="frmSearch" method="post" action="<?php echo $_SERVER['SCRIPT_NAME'];?>">
        <table>
            <tr>
                <th>Date
                    <input name="txtKeyword" type="month" id="txtKeyword" value="<?php echo $strKeyword;?>">
                    <input type="submit" value="Search"></th>
                    <input type="submit" value="Export"></th>
            </tr>
            <tr>
                <th><label>Date</label></th>
                <th><label>Requested</label></th>
                <th><label>Requested Time</label></th>
                <th><label>Location</label></th>
                <th><label>Description</label></th>
                <th><label>Order By</label></th>
                <th><label>Completed by</label></th>
                <th><label>Completed Time</label></th>
            </tr>
            <tr><!--/*DESC ASP*/-->
                <?php include('config.php');
                $filename = "excelfilename";
                $strsql = "select * from log WHERE dateorder LIKE '%".$strKeyword."%'";
                $result = mysqli_query($objConnect, $strsql);
                $strExcelFileName="Member-All.xls";
                header("Content-Type: application/x-msexcel; name=\"$strExcelFileName\"");
                header("Content-Disposition: inline; filename=\"$strExcelFileName\"");
                header("Pragma:no-cache");
                while ($rs = mysqli_fetch_array($result,MYSQLI_ASSOC))
                {
                ?>
                <td><?php echo $rs['dateorder'] ?></td>
                <td><?php echo $rs['request'] ?></td>
                <td><?php echo date("H:i", strtotime($rs['requesttime'])) ?></td>
                <td><?php echo $rs['location'] ?></td>
                <td><?php echo $rs['description'] ?></td>
                <td><?php echo $rs['orderby'] ?></td>
                <td><?php echo $rs['completed'] ?></td>
                <td><?php echo date("H:i", strtotime($rs['completedtime'])) ?></td>
            </tr>
            <?php } ?>
        </table>
    </form>
    <script>
        window.onbeforeunload = function(){return false;};
        setTimeout(function(){window.close();}, 10000);
    </script>
    </body>
    </html>

我需要第 1 步搜索按钮第 2 步导出按钮

考虑使用从 MySQL 查询中获取的相同 PHP 数组分离 HTML 输出和 Excel 导出。将以下部分集成到您的代码中。

具体来说,Excel 需要 tab-delimited 文本映射到带有回车符和换行符的单元格。

数据库获取

...same db config...

$data = []
while ($rs = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
    $data[] = $row; 
}

HTML输出

foreach ($data as $row) { ?>
 <tr>
     <td><?php echo $row['dateorder'] ?></td>
     <td><?php echo $row['request'] ?></td>
     <td><?php echo date("H:i", strtotime($row['requesttime'])) ?></td>
     <td><?php echo $row['location'] ?></td>
     <td><?php echo $row['description'] ?></td>
     <td><?php echo $row['orderby'] ?></td>
     <td><?php echo $row['completed'] ?></td>
     <td><?php echo date("H:i", strtotime($row['completedtime'])) ?></td>
 </tr>
<?php } ?>

Excel 导出

$strExcelFileName="Member-All.xls";
header("Content-Type: application/x-msexcel; name=\"$strExcelFileName\"");
header("Content-Disposition: attachment; filename=\"$strExcelFileName\"");
header("Pragma:no-cache");

$i = 1;
foreach ($data as $row) {
   if ($i == 1) {
      // COLUMN HEADERS
      echo implode("\t", array_keys($row)) . "\r\n";
   }
   // DATA ROWS
   echo implode("\t", array_values($row)) . "\r\n";
   $i++;
}