2014-11-25 3 views
0

동적으로 파일을 만드는 프로그램을 만들었습니다. 그것은 잘 작동합니다. 파일을 저장할 위치를 묻는 코드를 추가하면 저장되지만 파일을 열려고하면 '파일 형식 또는 파일 확장이 유효하지 않기 때문에 파일을 열 수 없습니다.'라는 오류 메시지가 나타납니다. 내가 프롬프트없이 저장하면 잘 열립니다. PHP Excel/Excel 2007에서 파일을 열 수 없습니다.

코드의 관련 부분

은 다음과 같습니다

if(isset($_POST['esd'])) 
{ 
$sqlcust = "SELECT * FROM compliance_customers WHERE Customer_ref = " . $_REQUEST['cust']; 
$sqlcustresult = mysqli_query($conn, $sqlcust); 
while($row_sqlcustresult = mysqli_fetch_array($sqlcustresult)) 
{ 
    $name = $row_sqlcustresult['Customer_name']; 
} 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="'.$name.'_'.$date.'.xlsx"'); 
} 



#use php excel to create a spreadsheet of the customers current subscription 
if((isset($_REQUEST['esd'])) && (!isset($noEsd))) 
{ 
// Set properties for the excel file 
$objPHPExcel = new PHPExcel(); 

$objPHPExcel->getProperties()->setCreator($_SESSION['username']); 
$objPHPExcel->getProperties()->setLastModifiedBy($_SESSION['username']); 
$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Customer export_" . $customername); 
$objPHPExcel->getProperties()->setSubject("Office 2007 XLSX Customer export_" . $customername); 
$objPHPExcel->getProperties()->setDescription($customername . "_" . $date); 

$cnt_current_record = 2; 

$objPHPExcel->getActiveSheet()->SetCellValue('A1', 'Content Name'); 
$objPHPExcel->getActiveSheet()->SetCellValue('B1', 'Content Type'); 
$objPHPExcel->getActiveSheet()->SetCellValue('C1', 'Content Description'); 

$sql_excelfile = "SELECT * FROM compliance_changes ORDER BY change_type"; 
$result_sql_excelfile = mysqli_query($conn, $sql_excelfile); 
while($row_sql_excelfile = mysqli_fetch_array($result_sql_excelfile)) 
{ 
    if(in_array($row_sql_excelfile['change_name'], $excel_array)) 
    { 
     #echo "<tr class='subscriptiondetails'><td>" .$row_sql_excel['change_name']."</td><td>" .$row_sql_excel['change_type']."</td><td>". $row_sql_excel['change_description']."</td></tr>"; 
     #$objPHPExcel->setActiveSheetIndex($cnt_current_record); 
     $objPHPExcel->getActiveSheet()->SetCellValue('A' . $cnt_current_record, $row_sql_excelfile['change_name']); 
     $objPHPExcel->getActiveSheet()->SetCellValue('B' . $cnt_current_record, $row_sql_excelfile['change_type']); 
     $objPHPExcel->getActiveSheet()->SetCellValue('C' . $cnt_current_record, $row_sql_excelfile['change_description']); 
     $cnt_current_record++; 
    } 
} 
#rename sheet 
$sheet_title = $customername; 
$objPHPExcel->getActiveSheet()->setTitle($sheet_title); 

#write the xls file 
#$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$filename = $customername . "_" . $date . ".xlsx"; 
#$objWriter->save(str_replace('customerdetail2.php', $filename, __FILE__)); 

$objWriter->save('php://output'); 

#echo the file has been written 
echo $filename . " has been created"; 

나는 확실히, PHPexcel 지나치게 익숙하지 아니에요 왜 그냥 저장하면 파일을 열고 좋은,하지만 사용할 때 $ objWriter- > save ('php : // 출력'); 코드를 출력하면 실패합니다. 누구든지 도와 줄 수 있습니까?

+0

http://stackoverflow.com/questions/14252465/phpexcel-file-cannot-open-file-because-the-file-format-or-file-extension-is-not –

+0

안녕하세요 @Len_D, 게시 주셔서 감사합니다. 그. 나는 이미 그 해결책을 시도했지만 나에게도 같은 오류를 주었다. –

+0

이 오류가 나타날 때마다 먼저 텍스트 편집기에서 파일을 열고 파일의 시작 또는 끝에있는 공백 문자 (BOM 표식 또는 기타)를 찾습니다. 파일의 내용에 명백한 PHP 사람이 읽을 수있는 오류 메시지 –

답변

0

해결책으로 @markbaker에게 감사드립니다.

나는 php : // output과 같은 페이지에 코드를 echo하는 PHP 코드를 가지고있다. 이로 인해 내가 인식하지 못하는 페이지의 HTML/PHP로 스트림을 덮어 씁니다. 이 문제를 발견하면 텍스트 편집기를 사용하여 파일을 열 수 있습니다. 스트림에 출력 정보 대신 html이 포함되어 있다면 문제가 될 수 있습니다.

이 형식을 변경하여 출력 할 스트림의 코드 만 포함 된 다른 페이지에 게시 할 때 양식이 변경되어 완벽하게 정상적으로 작동했습니다.

나는 이것이 도움이되기를 바랍니다. 스티븐.