【问题标题】:HTML codes always showing up when I export query result to Excel CSV将查询结果导出到 Excel CSV 时始终显示 HTML 代码
【发布时间】:2014-03-11 17:05:28
【问题描述】:

我正在从 SQL Server 导出查询结果。我成功了一半,因为我有 1 个问题。页面的 HTML 代码或界面包含在导出的 .csv 文件中。如何从导出的文件中删除它?我有下面的代码给你一个想法:)


另外,如果你有其他关于如何改进这件事的提示,比如我 希望它是 Excel 格式 (xlsx),请指导我:)

<html>
<head>
<title>Generate Report</title>
<script>
function MessageBox()
{
    alert('Clicked!');
}
</script>
</head>
<body>

<form method='post'>
<input type='date' name='dateStart'>  <input type='date' name='dateEnd'>
<input type='submit' name='btnSubmit' onclick='MessageBox()'> <br>
</form>
</body>
</html>";
<?php

include "db.php";
$con = SetConn();

if(isset($_POST['btnSubmit']))
{
    header("Content-type: text/csv; charset=UTF-8");
    header('Content-Disposition: attachment; filename=Export.csv');
    $start = $_POST['dateStart'];
    $end = $_POST['dateEnd'];
    $user_query = sqlsrv_query($con, "SELECT TOP 100 * FROM [db_nps].[dbo].[survey_report] WHERE (time_stamp >= '$start' and time_stamp <= '$end')");

    //While loop to fetch the records
    $contents = "it_id, it_site, it_oraclenumber, it_lastname, it_firstname, ttsd_number\n";
    while($row = sqlsrv_fetch_array($user_query, SQLSRV_FETCH_ASSOC))
    {
        $contents.=$row['it_id'].",";
        $contents.=$row['it_site'].",";
        $contents.=$row['it_oraclenumber'].",";
        $contents.=$row['it_lastname'].",";
        $contents.=$row['it_firstname'].",";
        $contents.=$row['ttsd_number']."\n";
    }

    $contents_final = chr(255).chr(254).mb_convert_encoding($contents, "UTF-16LE","UTF-8");
    print $contents_final;
}
?>

【问题讨论】:

    标签: php excel csv export export-to-csv


    【解决方案1】:

    您是在告诉 PHP 使用所有回显的内容作为 CSV 文件的内容。是的,您是在回显 HTML 之后这样做的,但这没关系;都是同时处理的。


    让我解释一下:

    当您使用header() 方法时,您是在告诉浏览器它正在接收的内容属于某种类型。在您的情况下,您告诉它要接收的内容是它应该下载的 CSV 文档。

    header()在文件中的位置无关紧要,只要它在printreadFile语句之前

    所以本质上,您的浏览器所做的是读取整个页面,包括 HTML 作为 CSV 文档的纯文本。请记住,虽然 PHP 会按顺序处理自己,但浏览器同时接收来自服务器的所有信息,并且由于您告诉它以 CSV 格式下载文档,因此它需要整个页面。


    那你怎么办?

    我对您的建议是将打印代码放在单独的外部 PHP 文档中并链接到它,而不是尝试在响应 HTML 的页面上执行此操作。

    【讨论】:

      【解决方案2】:

      我解决了这个问题。尝试像这样使用您的代码

      $filename = 'trip_data.csv';
      
      // file creation
      $file = fopen($filename,"w");
      
      // output the column headings
      fputcsv($file, array('travel date', 'travel time', 'travel from', 'travel to','number of pessengers', 'car type', 'trip status', 'flight number', 'travel price( £ )'));
      
      $query = "SELECT travel_date,travel_time,travel_from,travel_to,number_of_pessengers,car_type_id,trip_status ,flight_number,travel_price FROM trip";
      $travelList = $conn->query($query);
      while ($rowValue = $travelList->fetch_assoc()) {
          fputcsv($file,$rowValue);
      }
      
      fclose($file);
      
      // download
      header("Content-Description: File Transfer");
      header("Content-Disposition: attachment; filename=$filename");
      header("Content-Type: application/csv; ");
      
      readfile($filename);
      
      // deleting file
      unlink($filename);
      exit();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-28
        • 1970-01-01
        • 2010-11-14
        • 1970-01-01
        • 2014-05-29
        相关资源
        最近更新 更多