2014-01-08 4 views
0

У меня есть данные в базе данных MySQL. Я отправляю пользователю URL-адрес, чтобы получить свои данные как файл excel.Создать файл Excel для пользователя в PHP

Как я могу, щелкнув ссылку, открыть всплывающее окно, чтобы загрузить Excel с записью из MySQL?

У меня есть вся информация, чтобы получить отчет уже. Я просто не понимаю, как иметь PHP создать файл первенствовать и пусть скачать файл

include("con.php"); 

// Qry to fetch all records against date 
$dateonedayback=strtotime('-1 day',strtotime(date("Y/m/d"))); 
$one_day=date("Y-m-d",$dateonedayback); 


$qry_user_points = "SELECT u.points,u.db_add_date,u.user_email_id FROM tbl_user AS u WHERE u.points != '0' AND date(u.db_add_date)='".$one_day."' "; 

$query_result= $con->db_query($qry_user_points); 

header('Content-Type: application/vnd.ms-excel'); //define header info for browser 
header('Content-Disposition: attachment; filename=Users-Points-Report-'.date('Ymd').'.xls'); 

$excel_header = array("Email","Points","Date"); 

for ($i = 0; $i < count($excel_header); $i++)  
{ 
echo $excel_header[$i]."\t"; 
} 
print("\n"); 


$j=0; 
while($rowValue = $con->db_fetch_array($query_result)) 
{ 
$points = $rowValue['points']; 
$emailID = $rowValue['user_email_id']; 
$addedDate = $rowValue['db_add_date']; 

// create an array to insert in excel with url encoding 
$final_array = array(urlencode($points),urlencode($emailID),urlencode($addedDate)); 

$result_count =$con->db_num_rows($query_result); 

$output = ''; 
for($k=0; $k < $con->db_num_rows($query_result); $k++) 
{ 
    if(!isset($final_array[$k])) 
     $output .= "NULL\t"; 
    else 
     $output .= "$final_array[$k]\t"; 
} 
$output = preg_replace("/\r\n|\n\r|\n|\r/", ' ', $output); 
print(trim($output))."\t\n"; 

$j++; 
} // while close 

Когда я ударил ссылку создает Excel файл, но данные не приходят правильно

пишет только точки в Excel файл не по электронной почте & дата

, пожалуйста, помогите мне в этом.

+0

Рассмотрите используя встроенную функцию PHP [fputcsv()] (http://www.php.net/manual/en/function.fputcsv.php) при создании файла CSV или даже версии [SPL] (http://www.php.net/manual/en/splfileobject.fputcsv.php) –

+0

Обратите внимание, что вы фактически не создаете файл Excel (формат BIFF или OfficeOpenXML), а только файл CSV с расширением .xls –

+0

Возможный дубликат [Экспорт данных в Excel с помощью PHP] (http://stackoverflow.com/q/13085269/), [phpexcel для загрузки] (http://stackoverflow.com/q/8566196/), [Загрузить Excel с сервера с помощью PHP ] (http://stackoverflow.com/q/17044580/). См. Также [Альтернатива для PHP_excel] (http://stackoverflow.com/q/3930975/). – outis

ответ

0

Например, вы можете использовать PEAR Spreadsheet Lib http://pear.php.net/package/Spreadsheet_Excel_Writer

Этот Lib создает Excel файл и чем вы должны отправить содержимое пользователю с установкой правильных заголовков

по почте:

 $sid = md5(uniqid(time())); 
     $header = "From: Automatic report system<[email protected]>\nReply-to: [email protected]\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$sid\"\n\n"; 
     $header .= "This is multi-part message in MIME format.\n--$sid\n"; 
     $header .= "Content-type: text/plain; charset=utf-8\n\n"; 
     $length = filesize($filePath); 
     $header .= "--$sid\nContent-type: application/octet-stream; name=\"$fileTitle.xls\"\n"; 
     $header .= "Content-Transfer-Encoding: base64\n"; 
     $header .= "Content-Disposition: attachment; filename=\"$fileTitle.xls\"\nContent-Length: $length\n\n"; 
     $header .= chunk_split(base64_encode(file_get_contents($filePath))) . "\n\n\n\n"; 
     mail('[email protected]', 'New report', null, $header); 

через браузер:

 $length = filesize($filePath); 
     header("Content-type: application/octet-stream"); 
     header("Content-Disposition: attachment; filename=\"$fileTitle.xls\""); 
     header("Content-Length: $length"); 
     readfile($filePath); 
     exit; 
Смежные вопросы