Я работаю на веб-сайте, где мне нужно сделать файл Excel или, по крайней мере, файл CSV, который открывается в Excel.
Я много чего перепробовал. Я искал решения в google, stackoverflow и т. Д. Но все, что я нашел, похоже, не работает для меня. Я пробовал решения jQuery и PHP.
JSFiddle: http://jsfiddle.net/terryyounghk/KPEGU/
Когда я использую эту скрипку для создания CSV, вывод:
Я хочу, чтобы вывод был в отдельных столбцах, а не в одном.
Вот также 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>";
Это выводит:
Здесь вывод находится в правильных столбцах и строках. Но почему-то я не могу получить линии сетки.
Это всего лишь 2 примера тонн, которые я попробовал. Кто-нибудь знает, как это исправить?
в JsFiddle пример, который вы привели — изменить colDelim = '","'
в colDelim = '";"'
так как ему нужно значение через запятую ;
чтобы струна упала в разные клетки.
Я вижу, как вы думаете об использовании таблиц для форматирования, но 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 будет очень запутанным.
**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";
}?>