2013-01-10 10 views
7

Utknąłem z tym problemem, to nie wyświetla rzeczywistego pliku Excela. Proszę sprawdzić mój poniższy kod:Plik PHPExcel nie może otworzyć pliku, ponieważ format pliku lub rozszerzenie pliku jest nieprawidłowy

/** 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'); 

proszę mi pomóc rozwiązać ten problem

+1

Ilekroć widzisz ten błąd, pierwszą rzeczą, jaką należy zrobić, to otworzyć plik w edytorze tekstu i szukać białych znaków (spacja, tab, znaki nowej linii itp.) na początku lub na końcu pliku lub znacznik BOM, lub oczywiste komunikaty o błędach czytelnych dla człowieka w treści pliku –

+0

@MarkBaker po otwarciu pliku nie zawiera żadnych kodów ani nic takiego. –

Odpowiedz

39

Mam działa teraz! Dzięki tej phpexcel to download

Zmieniłem kod do tego:

// 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'); 

myślę, że ten wiersz:

ob_end_clean(); 

rozwiązać mój problem.

+7

jeśli ob_end_clean() rozwiązał problem, to znaczy, że coś w kodzie generowało wyjście ... najlepiej naprawić, aby dowiedzieć się, co i usunąć .... wyświetlenie wygenerowanego pliku w edytorze tekstu powinno dać wskazówkę jako do jakiego generowane jest wyjście –

+0

tak, generowanie danych wyjściowych, plik excel.php, –

+0

@bEtTyBarnes. Tak. Z pewnością to (ob_end_clean) rozwiązało mój problem. Dziękuję Ci! –

1

Najbardziej prawdopodobną przyczyną, jeśli jest to cut-and-paste z skryptu jest

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

Jeśli "wysyłam do przeglądarki do pobrania, wtedy nie może być żadnego innego wyjścia (echa, instrukcje drukowania, wrzucanie i wyprowadzanie z PHP) niż wyjście generowane do php: // output przez PHPExcel sam

+0

Skomentowałem data echa ("H: i: s"). "Zapisz do formatu Excel2007 \ n"; ale wciąż nie wyświetla pliku Excela? Ale plik Excela jest zapisany w moim folderze php excela. Chcę, aby użytkownik wybrał, gdzie chce go zapisać? Jak mogę to zrobić? –

+0

Przeglądarka powinna być skierowana, aby zaoferować dialog pobierania przez nagłówki, które wysyłasz .... ale jestem zdezorientowany twoim pytaniem i uprzejmościami. Pytanie sugerowało, że pobierano dialog pobierania, ale plik był uszkodzony. Teraz mówisz, że nie dostałeś dialogu pobierania –

+0

Tak, sam jestem zdezorientowany.Przykro mi, ale w tej chwili moim problemem jest przeglądarka jest pobierana sam excel.php, plik Excela jest również pobierany w moim folderze, ale chcę, aby użytkownik wybrał, gdzie powinien go zapisać. –

5

nie wiem, czy mogę pomóc miałem ten sam problem i rozwiązał z

ob_end_clean(); 

i umieścić go tuż po

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

więc nie zmienić nagłówek i zapisać tak jak i xslx, problemem jest bufor!

2

Upewnij się, że wszystkie pliki (na przykład dołączone) są w kodowaniu UTF-8 bez kodowania BOM.
Możesz to zidentyfikować na różne sposoby, np. zobacz ten link.

Tylko jeśli potrzebujesz UTF-8 z BOM - użyj danych ob_end_clean(); przed danymi wyjściowymi do przeglądarki, jak wskazano w innych odpowiedziach tutaj.

0

Mam ten sam problem, problem jest prosty. Wystarczy umieścić kod poniżej:

ob_end_clean(); 

po:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); 
Powiązane problemy