从HTML表格下载数据到excel

时间:2010-09-30 13:52:15

标签: php excel

我有一个用PHP构造的表,它显示了mysql表的结果。

像这样:

$sql = mysql_query("SELECT * FROM survey");

            echo "<table border='1'>
            <tr>
            <th>Question 1</th>
            <th>Question 2</th>
            <th>Question 3</th>
            <th>Question 4</th>
            <th>Question 5</th>
            <th>Question 6</th>
            <th>Question 7</th>
            <th>Question 8</th>
            <th>Question 9</th>
            <th>Question 10</th>
            <th>Question 11</th>
            <th>Question 12</th>
            <th>Question 13</th>
            <th>Question 14</th>
            <th>eMail</th>
            </tr>";

            while ($row = mysql_fetch_array($sql))
            {
                echo "<tr>";
                echo "<td>" . $row['Question1'] . "</td>";
                echo "<td>" . $row['Question2'] . "</td>";
                echo "<td>" . $row['Question3'] . "</td>";
                echo "<td>" . $row['Question4'] . "</td>";
                echo "<td>" . $row['Question5'] . "</td>";
                echo "<td>" . $row['Question6'] . "</td>";
                echo "<td>" . $row['Question7'] . "</td>";
                echo "<td>" . $row['Question8'] . "</td>";
                echo "<td>" . $row['Question9'] . "</td>";
                echo "<td>" . $row['Question10'] . "</td>";
                echo "<td>" . $row['Question11'] . "</td>";
                echo "<td>" . $row['Question12'] . "</td>";
                echo "<td>" . $row['Question13'] . "</td>";
                echo "<td>" . $row['Question14'] . "</td>";
                echo "<td>" . $row['eMail'] . "</td>";              
            }
            echo "</table>";

我想要做的是将此表输出到excel文件中,不包含任何源代码或表标记。有没有办法可以做到这一点?我对互联网上的信息感到不知所措,不太确定我需要什么。

如果可能的话,我更愿意只使用PHP,而不需要任何额外的库。

3 个答案:

答案 0 :(得分:3)

是否要使用PHP脚本下载Excel文件(即PHP输出.xls文件),或者您是否希望它能够生成HTML输出,您可以将其复制/粘贴到Excel文件中而不会丢失格式?< / p>

如果是前者,请查看this nifty tool

如果您只是希望它生成可以复制/粘贴到Excel中的HTML,只要您的表格格式正确(并且从您的源代码中,您似乎需要在其中添加&lt; / tr&gt;你的while循环结束了)那么你应该能够drag and drop it

或者,只要没有&lt; html&gt;,Excel 应该足够智能识别HTML表格。标记封装它。 this article解释了这个过程,但基本上你可以发送一个Excel文件(根据第一个“漂亮的工具”建议):

header("Content-type: application/vnd.ms-excel");
echo "
<table>
    ...
</table>";

答案 1 :(得分:2)

输出Excel原生格式会非常复杂。这就是为什么有它的库。另一方面,CSV很容易,Excel可以读取它。

$filePath = sys_get_temp_dir() . '/test.csv';
$file = fopen($filePath, '-w');

while (false !== ($row = mysql_fetch_array($sql)))
{
  fputcsv($file, $row);
}

// rewind both pointers
mysql_data_seek($sql, 0);
fseek($file, 0);

// add headers
$rowForHeaders = mysql_fetch_array($sql);
fputcsv($file, array_keys($rowforHeaders));

fclose($file);


// to send the file via the http response
header('Content-type: application/vnd.ms-excel');
header('Content-disposition: attachment; filename="mytable.csv"');
header('Content-length: '.filesize($filePath));
print file_get_contents($filePath);
exit;

答案 2 :(得分:0)

您可以使用可以通过excel打开的csv(逗号分隔值):

while ($row = mysql_fetch_array($sql))
{
  echo '"'. $row['Question1'] . '";';
  echo '"'. $row['Question2'] . '";';
  echo '"'. $row['Question3'] . '";';
  echo '"'. $row['Question4'] . '";';
  echo '"'. $row['Question5'] . '";';
  echo '"'. $row['Question6'] . '";';
  echo '"'. $row['Question7'] . '";';
  echo '"'. $row['Question8'] . '";';
  echo '"'. $row['Question9'] . '";';
  echo '"'. $row['Question10'] . '";';
  echo '"'. $row['Question11'] . '";';
  echo '"'. $row['Question12'] . '";';
  echo '"'. $row['Question13'] . '";';
  echo '"'. $row['Question14'] . '";';
  echo '"'. $row['eMail'] . '"\n';         
}