PHP导出从MYSQL中脱颖而出

时间:2017-01-29 08:34:26

标签: php mysql excel export

我正在尝试将我的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步导出按钮

1 个答案:

答案 0 :(得分:1)

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

具体来说,Excel要求制表符分隔的文本映射到带有滑块和换行符的单元格。

数据库提取

...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++;
}