导出/下载 Table HTML-PHP 到 Excel 文件
Export / Download Table HTML-PHP to Excel file
我在 HTML/PHP 上有一个 table 从 mySQL 中提取数据。请看这里link。例如,请搜索此货件代码以获取 table 内的结果: 42-7278954.
之后,我想将结果导出到excel(你也可以在那里看到按钮)。
下面是我的 table 代码(我删除了一些列以缩短代码):
$body = "";
$display = "<table class='table_searchshipment' id='table_searchshipment' cellpadding='0' cellspacing='0' border='0'>";
echo $display;
$body .= $display;
$display = "<thead>
<tr>
<th>CN No.</th>
<th>Doc No.</th>
</tr>
</thead>";
echo $display;
$body .= $display;
while($row = mysqli_fetch_array($result)) {
$CN_no= $row['CN_no'];
$doc_no= $row['doc_no'];
$display = "<tr>
<td>".$CN_no."</td>
<td>".$doc_no."</td>
</tr>";
echo $display;
$body .= $display;
}
$display = "</table>";
echo $display;
$body .= $display;
$body = htmlspecialchars($body);
echo '<form action = "setheader" method = "post">
<input type = "hidden" name = "body" value = "<?php echo $body ; ?>">
<input type = "submit" name = "submit" Value = "Export to excel">
</form>';
if(isset($_POST['submit'])){
$body = $_POST['body'];
setHeader("export.xls");
echo $body;
}
然后在控制器中,我创建函数 setheader:
public function setheader($excel_file_name)//this function used to set the header variable
{
header("Content-type: application/octet-stream");//A MIME attachment with the content type "application/octet-stream" is a binary file.
//Typically, it will be an application or a document that must be opened in an application, such as a spreadsheet or word processor.
header("Content-Disposition: attachment; filename=$excel_file_name");//with this extension of file name you tell what kind of file it is.
header("Pragma: no-cache");//Prevent Caching
header("Expires: 0");//Expires and 0 mean that the browser will not cache the page on your hard drive
}
出现下载弹出窗口,但它只下载 "setheader" 个包含错误通知的文件。请看here.
首先,
此行需要更改为:
echo '<form action = "setheader" method = "post">
<input type = "hidden" name = "body" value = "<?php echo $body ; ?>">
<input type = "submit" name = "submit" Value = "Export to excel">
</form>';
至:
echo '<form action = "setheader" method = "post">
<input type = "hidden" name = "body" value = "'.$body.'">
<input type = "submit" name = "submit" Value = "Export to excel">
</form>';
其次,$body = htmlspecialchars($body);
很可能返回一个空字符串。
来自PHP Docs
If the input string contains an invalid code unit sequence within the
given encoding an empty string will be returned, unless either the
ENT_IGNORE or ENT_SUBSTITUTE flags are set.
在不知道数据库中有哪些数据的情况下,很难进一步测试。
不过你可以试试:
$body = htmlspecialchars($body, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
看看它是否解决了这个问题。
我在 HTML/PHP 上有一个 table 从 mySQL 中提取数据。请看这里link。例如,请搜索此货件代码以获取 table 内的结果: 42-7278954.
之后,我想将结果导出到excel(你也可以在那里看到按钮)。
下面是我的 table 代码(我删除了一些列以缩短代码):
$body = "";
$display = "<table class='table_searchshipment' id='table_searchshipment' cellpadding='0' cellspacing='0' border='0'>";
echo $display;
$body .= $display;
$display = "<thead>
<tr>
<th>CN No.</th>
<th>Doc No.</th>
</tr>
</thead>";
echo $display;
$body .= $display;
while($row = mysqli_fetch_array($result)) {
$CN_no= $row['CN_no'];
$doc_no= $row['doc_no'];
$display = "<tr>
<td>".$CN_no."</td>
<td>".$doc_no."</td>
</tr>";
echo $display;
$body .= $display;
}
$display = "</table>";
echo $display;
$body .= $display;
$body = htmlspecialchars($body);
echo '<form action = "setheader" method = "post">
<input type = "hidden" name = "body" value = "<?php echo $body ; ?>">
<input type = "submit" name = "submit" Value = "Export to excel">
</form>';
if(isset($_POST['submit'])){
$body = $_POST['body'];
setHeader("export.xls");
echo $body;
}
然后在控制器中,我创建函数 setheader:
public function setheader($excel_file_name)//this function used to set the header variable
{
header("Content-type: application/octet-stream");//A MIME attachment with the content type "application/octet-stream" is a binary file.
//Typically, it will be an application or a document that must be opened in an application, such as a spreadsheet or word processor.
header("Content-Disposition: attachment; filename=$excel_file_name");//with this extension of file name you tell what kind of file it is.
header("Pragma: no-cache");//Prevent Caching
header("Expires: 0");//Expires and 0 mean that the browser will not cache the page on your hard drive
}
出现下载弹出窗口,但它只下载 "setheader" 个包含错误通知的文件。请看here.
首先,
此行需要更改为:
echo '<form action = "setheader" method = "post">
<input type = "hidden" name = "body" value = "<?php echo $body ; ?>">
<input type = "submit" name = "submit" Value = "Export to excel">
</form>';
至:
echo '<form action = "setheader" method = "post">
<input type = "hidden" name = "body" value = "'.$body.'">
<input type = "submit" name = "submit" Value = "Export to excel">
</form>';
其次,$body = htmlspecialchars($body);
很可能返回一个空字符串。
来自PHP Docs
If the input string contains an invalid code unit sequence within the given encoding an empty string will be returned, unless either the ENT_IGNORE or ENT_SUBSTITUTE flags are set.
在不知道数据库中有哪些数据的情况下,很难进一步测试。
不过你可以试试:
$body = htmlspecialchars($body, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
看看它是否解决了这个问题。