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