2013-01-15 2 views
2

안녕 얘들 아 나는 내가 개발하고 그것을 정확하게 각 열 헤더가 그 열의 모든 데이터와 함께 수출되는 엑셀 문서에 데이터를 내보낼 싶습니다. 이것은 내가 지금까지 가지고 있지만 모든 열이 한 행에 표시되므로 제대로 작동하지 않습니다. 어떻게하면 될 수 있습니까? 누군가 나를 도와주세요. 이것은 현재의 구현 :내보내기 PHP postgres 쿼리를 PHP를 사용하여 엑셀

<?php require_once('connections/pgconn.php'); 


function cleanData(&$str) 
{ 
$str = preg_replace("/\t/", "\\t", $str); 
$str = preg_replace("/\r?\n/", "\\n", $str); 
if(strstr($str, '"')) $str = '"' . str_replace('"', '""', $str) . '"'; 
} 

// filename for download 
$filename = "website_data_" . date('Ymd') . ".xls"; 

header("Content-Disposition: attachment; filename=\"$filename\""); 
header("Content-Type: application/vnd.ms-excel"); 

$flag = false; 
$result = pg_query("SELECT to_char (a.CALLDATE,'yyyymm') as month,min(a.calldate) as  start_time,max(a.calldate) as end_time, 
    ceil(SUM (a.CALLDURATION::integer)/60) AS minutes, 
    COUNT (DISTINCT a.IDENTIFIANT) AS distinct_callers, 
a.zoneiddest as country_code,b.country 
FROM cdr_data a,COUNTRY_CODES b 
WHERE a.CALLSUBCLASS = '002' 
    AND a.CALLCLASS = '008' 
and a.zoneiddest::integer > 0 
AND SUBSTR (a.CALLEDNUMBER, 1, 2) NOT IN 
('77', '78', '75', '70', '71', '41', '31', '39', '76','79') 

and not substr(a.zoneiddest , 1 ,3) in ('254','255','256','211','257','250','256') 
and trim(a.zoneiddest) = trim(b.country_code) 
GROUP BY to_char (a.CALLDATE,'yyyymm') ,a.zoneiddest,b.country 
ORDER BY 1") or die('Query failed!'); 

while(false !== ($row = pg_fetch_assoc($result))) { 
if(!$flag) { 
    // display field/column names as first row 
    echo implode("\t", array_keys($row)) . "\r\n"; 
    $flag = true; 
} 
array_walk($row, 'cleanData'); 
echo implode("\t", array_values($row)) . "\r\n"; 
} 
exit; 
?> 
+0

실제로 Excel 파일 또는 간단한 CSV 파일을 원하십니까? –

+0

나는 Excel 파일을 엄격하게 원합니다. – roykasa

+1

PHPExcel (http://phpexcel.codeplex.com) 또는 http://stackoverflow.com/questions/3930975/에 나열된 Excel 파일을 작성하기위한 라이브러리 중 일부를 살펴보십시오. php-excel을 사용하면 무엇을 할 수 있는지 알 수 있습니다. –

답변

2

내가 제안하는 것은 "응용 프로그램/MS-엑셀"으로 HTTP 응답을 생성하는 PHP를 말하는 CSV로 쿼리를 내보내는 것입니다 IE 자동으로 Excel을 콘텐츠 형식을 시작합니다 그래서 열 이름과 열 CSV를 가져옵니다 :

$query = "COPY (SELECT ....) TO '/path/reachable/with/php/file.csv' CSV;" 

이렇게하면 서버의 파일로 CSV를 저장하고 PHP에서 원하는만큼 시간을 검색 할 수 있습니다.

$file = file_get_contents('/path/reachable/with/php/file.csv'); 
header('Content-Type: application/ms-excel'); 
echo $file; 
관련 문제