导出到excel或csv

时间:2014-12-10 10:08:45

标签: php jquery excel csv export

我正在网站上工作,我需要制作一个excel文件或至少一个在excel中打开的csv文件。 我尝试了很多东西。我在谷歌,stackoverflow等搜索解决方案。但我找到的一切似乎不适合我。我尝试了jQuery解决方案,并尝试了PHP解决方案。

JSFiddle:http://jsfiddle.net/terryyounghk/KPEGU/

当我用这个小提琴制作一个csv时,输出是:

Example of the csv ouput

我希望输出是单独的colums,而不是一个。

这也是我尝试的PHP解决方案:

    header("Content-type: application/vnd.ms-excel");
    header("Content-Disposition: attachment;Filename=document_name.xls");

    echo "<html>";
    echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=Windows-1252\">";
    echo "<body>";
    echo "<table>";
    echo "<tr>";
    echo "<td>Henk</td>";
    echo "<td>Henk2</td>";
    echo "</tr>";
    echo "<tr>";
    echo "<td>bob</td>";
    echo "<td>bob2</td>";
    echo "</tr>";
    echo "</table>";
    echo "</body>";
    echo "</html>";

输出:

example of php output

此处输出位于右侧列和行中。但不知怎的,我无法获得网格线。

这只是我试过的吨数的两个例子。有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

在您提供的JsFiddle示例中 - 将colDelim = '","'更改为colDelim = '";"',因为它需要逗号分隔值;才能使字符串落入不同的单元格

Updated JsFiddle

答案 1 :(得分:0)

我可以看到你在考虑使用表格来进行格式化,但CSV是以逗号分隔的。

我发现最好的方法是使用这样的数组:

// setup array. Note null values to create empty cells
$list = array( 
    array('First row', NULL, 'some_data', NULL),
    array('Second row', 'some data', NULL, 'some data'),
); 

// set header types
header("Content-type: text/csv");
header("Cache-Control: no-store, no-cache");
header('Content-Disposition: attachment; filename="most_popular-'.$_POST['start_date'].'-'.$_POST['end_date'].'.csv"');

// tell php to open the page as an output (download)
$outstream = fopen("php://output",'w');

// loop through and put each array row into the csv, comma seperated.
foreach( $list as $row )  
{  
    fputcsv($outstream, $row, ',');  
}  

exit;

请记住,数组中的每一行都需要与其他行完全相同,否则生成csv的循环将会非常混乱。

答案 2 :(得分:0)

**Try this**




 <?php 
error_reporting(E_ERROR);
include("dbConnect.inc.php");
//$ip = $_SERVER['HTTP_CLIENT_IP
    $select_table=mysql_query("SELECT * FROM `key_cat`");
    $setExcelName="Keyword_reports";
header('Content-Type: text/csv');
header('Content-Disposition: attachment;filename='.$setExcelName.'.csv');
/*
$setExcelName="Keywords";
 header("Content-type: application/octet-stream");
 header("Content-Disposition: attachment; filename=".$setExcelName."_Reoprt.xls");
 header("Pragma: no-cache");
header("Expires: 0");
*/
$rows = mysql_fetch_assoc($select_table);
if($rows)
{
getcsv(array_keys($rows));
}
while($rows)
{
getcsv($rows);
$rows = mysql_fetch_assoc($select_table);
}
// get total number of fields present in the database
function getcsv($no_of_field_names)
{
$separate = '';
// do the action for all field names as field name
foreach ($no_of_field_names as $field_name)
{
if (preg_match('/\\r|\\n|,|"/', $field_name))
{
$field_name = '' . str_replace('', $field_name) . '';
}
echo $separate . $field_name;

//sepearte with the comma
$separate = ',';
}

//make new row and line
echo "\r\n";

}


?>