2013-01-10 20 views
7

Sono bloccato con questo problema, non sta visualizzando il file excel effettivo. Si prega di controllare il mio codice qui sotto:Il file PHPExcel non può aprire il file perché il formato del file o l'estensione del file non è valida

/** Error reporting */ 
error_reporting(E_ALL); 

/** PHPExcel */ 
require_once 'PHPExcel.php'; 
include 'PHPExcel/Writer/Excel2007.php'; 


// Create new PHPExcel object 
#echo date('H:i:s') . " Create new PHPExcel object\n"; 
$objPHPExcel = new PHPExcel(); 
$excel = new PHPExcel(); 

$objPHPExcel->getProperties()->setTitle("Payroll"); 

if(!$result){ 
die("Error"); 
} 
$col = 0; 
$row = 2; 
while($mrow = mysql_fetch_assoc($result)) { 
$col = 0; 
foreach($mrow as $key=>$value) { 
    $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($col, $row, $value); 
    $col++; 
} 
$row++; 
} 

// Set active sheet index to the first sheet, so Excel opens this as the first sheet 
$objPHPExcel->setActiveSheetIndex(0) 
     ->setCellValue('A1', 'Scholar Id') 
     ->setCellValue('B1', 'Lastname') 
     ->setCellValue('C1', 'Middlename') 
     ->setCellValue('D1', 'Firstname') 
     ->setCellValue('E1', 'Barangay') 
     ->setCellValue('F1', 'Level') 
     ->setCellValue('G1', 'Allowance') 
     ->setCellValue('H1', 'Has claimed?'); 
     $objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getFont()->setBold(true); 
     $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12); 
     $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(18); 
     $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(18); 
     $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(18); 
     $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(18); 
     $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12); 
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(12); 
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(14); 
$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->getAlignment()- >setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); 
$objPHPExcel->getActiveSheet()->setShowGridlines(true); 

$objPHPExcel->getActiveSheet()->getStyle('A1:H1')->applyFromArray(
array(
    'fill' => array(
     'type' => PHPExcel_Style_Fill::FILL_SOLID, 
     'color' => array('rgb' => 'FFFF00') 
    ) 
) 
); 


// Save Excel 2007 file 
echo date('H:i:s') . " Write to Excel2007 format\n"; 
#$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="payroll.xlsx"'); 
header('Cache-Control: max-age=0'); 
$writer->save('php://output'); 

si prega di aiutarmi a risolvere questo problema

+1

Ogni volta che vedete questo errore, la prima cosa da fare è aprire il file in un editor di testo e cercare caratteri di spaziatura (spazio, tab, newlines, ecc.) all'inizio o alla fine del file, o un indicatore BOM, o qualsiasi ovvio messaggio di errore umano leggibile da PHP nel contenuto del file –

+0

@MarkBaker quando ho aperto il file non contiene codici o altro –

risposta

39

Ho ricevuto funziona ora! Grazie a questo phpexcel to download

ho cambiato il codice a questo:

// Save Excel 2007 file 
#echo date('H:i:s') . " Write to Excel2007 format\n"; 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
ob_end_clean(); 
// We'll be outputting an excel file 
header('Content-type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment; filename="payroll.xlsx"'); 
$objWriter->save('php://output'); 

Penso che questa linea:

ob_end_clean(); 

risolto il mio problema.

+7

if ob_end_clean() ha risolto il problema, quindi significa che qualcosa nel tuo codice stava generando output ... la soluzione migliore per scoprire cosa, e rimuoverlo .... la visualizzazione del file generato in un editor di testo avrebbe dovuto dare un indizio come a quale output è stato generato –

+0

sì, stava generando output, il file excel.php, –

+0

@ bEtTyBarnes. Sì. Certamente (ob_end_clean) ha risolto il mio problema. Grazie! –

1

Il colpevole più probabile se questo è un cut-and-paste dello script è la

echo date('H:i:s') . " Write to Excel2007 format\n"; 

Se stai mandando al browser per il download, quindi non ci devono essere altri output (echi, dichiarazioni di stampa, inserimento e uscita da PHP) rispetto all'output generato da php: // prodotto da PHPExcel stesso

+0

Ho commentato la data dell'eco ('H: i: s'). "Scrivi in ​​formato Excel2007 \ n"; ma ancora non sta visualizzando il file excel? Ma il file excel viene salvato nella mia cartella php excel. Voglio che l'utente scelga dove vuole salvarlo? Come lo posso fare? –

+0

Il browser dovrebbe essere diretto a offrire il dialogo di download dalle intestazioni che si inviano .... ma sono confuso dalla domanda e dai commenti. La domanda suggeriva che stavi ricevendo la finestra di download, ma il file era corrotto. Ora stai dicendo che non si ottiene il dialogo di download –

+0

Sì, io sono confuso.Scusa, ma in questo momento il mio problema è che il browser scarica l'excel.php stesso, il file excel viene scaricato anche nella mia cartella, ma voglio che l'utente scelga dove deve salvarlo. –

5

Non so se posso aiutare ho avuto lo stesso problema e ho risolto con

ob_end_clean(); 

ho messo subito dopo

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 

Quindi non modificare l'intestazione e salvare come xslx comunque, il problema è il buffer!

2

Assicurarsi che tutti i file (ad esempio inclusi) siano in UTF-8 senza codifica BOM.
Puoi identificarlo in diversi modi, ad es. vedi questo link.

Solo se è necessario UTF-8 con BOM - utilizzare ob_end_clean(); prima di inviare i dati al browser, come indicato in altre risposte qui.

0

Ho lo stesso problema, il problema è semplice. Basta inserire il codice qui sotto:

ob_end_clean(); 

dopo:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
Problemi correlati