Я написал простой PHP-скрипт для загрузки файла Excel, который содержит некоторые данные MySQL, извлекаемые по запросу MySQL. Данные поступают правильно, но когда я печатаю этот результат в файле Excel, все поля появляются в первом столбце файла Excel, что неверно. Я хочу одно поле в одном столбце. что мне не хватает в коде. Пожалуйста, если у кого-то есть идеи, как этого добиться. Вот мой код —
include('db_connect.php');
$select = "select `dp_id`,`client_id`,`invester_name`,`pan_no` from
(SELECT `dp_id` , `client_id` , `invester_name` , `pan_no`
FROM `app_form` union all
SELECT `dp_id`,`client_id`,`first_holder_name`,`first_holder_pan` FROM `response_record`)
tbl order by `dp_id`,`client_id`";
//run mysql query and then count number of fields
$export = mysql_query ( $select )
or die ( "Sql error : " . mysql_error( ) );
$fields = mysql_num_fields ( $export );
//create csv header row, to contain table headers
//with database field names
for ( $i = 0; $i < $fields; $i++ ) {
$header .= mysql_field_name( $export , $i ) . ",";
}
//this is where most of the work is done.
//Loop through the query results, and create
//a row for each
while( $row = mysql_fetch_row( $export ) ) {
$line = '';
//for each field in the row
foreach( $row as $value ) {
//if null, create blank field
if ( ( !isset( $value ) ) || ( $value == "" ) ){
$value = ",";
}
//else, assign field value to our data
else {
$value = str_replace( '"' , '""' , $value );
$value = '"' . $value . '"' . ",";
}
//add this field value to our row
$line .= $value;
}
//trim whitespace from each row
$data .= trim( $line ) . "\n";
}
//remove all carriage returns from the data
$data = str_replace( "\r" , "" , $data );
$file_name = 'excel_data';
//create a file and send to browser for user to download
header("Content-type: application/vnd.ms-excel");
header( "Content-disposition: filename=".$file_name.".xls");
print "$header\n$data";
exit;
Вот скриншот файла Excel, который я получаю после запуска этого скрипта:
Замените следующую часть вашего кода:
foreach( $row as $value ) {
//if null, create blank field
if ( ( !isset( $value ) ) || ( $value == "" ) ){
$value = ",";
}
//else, assign field value to our data
else {
$value = str_replace( '"' , '""' , $value );
$value = '"' . $value . '"' . ",";
}
//add this field value to our row
$line .= $value;
}
С :
foreach( $row as $value ) {
//if null, create blank field
if ( ( !isset( $value ) ) || ( $value == "" ) ){
$value = "\t";
}
//else, assign field value to our data
else {
$value = str_replace( '"' , '""' , $value );
$value = '"' . $value . '"' . "\t";
}
//add this field value to our row
$line .= $value;
}
и проверьте, что это работает для меня
Попробуйте с этим изменением:
header( "Content-disposition: filename=".$file_name.".csv");
Как насчет создания файла .csv? Вы можете использовать функцию fputcsv()
из PHP, чтобы помочь вам. В файле значений, разделенных запятыми (CSV) (или значений, разделенных символами), хранятся табличные данные (числа и текст) в виде простого текста. Он относительно прост в использовании и прекрасно работает с Excel.
В качестве примера кода вы можете сделать это:
<?php
// The data that comes from your MySQL database
$list = array (
array('ID', 'NAME', 'SALARY'),
array('123', 'John Doe', '10000'),
array('456', 'Sara Parker', '12000')
);
$fp = fopen('file.csv', 'w'); // Your .csv file
// Inserting data in your file using the pointer created above
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);
?>
Рекомендации:
fputcsv () —
http://php.net/manual/en/function.fputcsv.php
Формат файла с разделителями-запятыми (CSV) —
http://creativyst.com/Doc/Articles/CSV/CSV01.htm