2013-01-10 17 views
7

मैं इस समस्या से फंस गया हूं, यह वास्तविक एक्सेल फ़ाइल प्रदर्शित नहीं कर रहा है। नीचे मेरी कोड की जाँच करें:PHPExcel फ़ाइल फ़ाइल नहीं खोल सकती है क्योंकि फ़ाइल प्रारूप या फ़ाइल एक्सटेंशन मान्य नहीं है

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

कृपया अगर यह आपकी स्क्रिप्ट के कट और पेस्ट है मुझे इस समस्या

+1

जब भी आपको यह त्रुटि दिखाई, पहली बात आपको क्या करना चाहिए किसी पाठ संपादक में फ़ाइल खुला है और रिक्त स्थान को वर्ण (अंतरिक्ष, टैब के लिए देखो, न्यूलाइन, इत्यादि) फ़ाइल की शुरुआत या अंत में, या बीओएम मार्कर, या फ़ाइल की सामग्री में किसी भी स्पष्ट PHP मानव-पठनीय त्रुटि संदेश –

+0

@MarkBaker जब मैंने फ़ाइल खोल दी तो इसमें कोई कोड या कुछ भी नहीं है –

उत्तर

39

मुझे मिला यह अब काम कर रहा है! इस phpexcel to download

के लिए धन्यवाद मैं इस के लिए कोड बदल दिया है:

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

मुझे लगता है कि इस लाइन:

ob_end_clean(); 

मेरी समस्या हल।

+7

यदि ob_end_clean() ने समस्या हल की है, तो इसका मतलब है कि आपके कोड में कुछ आउटपुट उत्पन्न कर रहा था ... पता लगाने के लिए सबसे अच्छा फिक्स, और इसे हटा दें .... किसी टेक्स्ट एडिटर में जेनरेट की गई फ़ाइल को देखने के लिए एक सुराग देना चाहिए था आउटपुट उत्पन्न किया जा रहा था –

+0

हाँ यह आउटपुट उत्पन्न कर रहा था, excel.php फ़ाइल, –

+0

@bEtTyBarnes। हाँ। निश्चित रूप से यह (ob_end_clean) मेरी समस्या हल हो गई। धन्यवाद! –

1

सबसे अधिक संभावना अपराधी के समाधान में मदद

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

आप तो है डाउनलोड करने के लिए ब्राउजर को भेज रहे हैं, तो पीएचपी: // आउटपुट पीएचपीएक्ससेल द्वारा उत्पादित आउटपुट की तुलना में आउटपुट की तुलना में कोई अन्य आउटपुट (ईको, प्रिंट कथन, पीएचपी में ड्रॉप और आउट नहीं होना चाहिए)

+0

मैंने टिप्पणी की गूंज दिनांक ('एच: आई: एस')। "Excel2007 प्रारूप में लिखें \ n"; लेकिन यह अभी भी एक्सेल फ़ाइल प्रदर्शित नहीं कर रहा है? लेकिन एक्सेल फ़ाइल मेरे PHP एक्सेल फ़ोल्डर में सहेजी गई है। मैं चाहता हूं कि उपयोगकर्ता यह चुनने के लिए कहां से बचाना चाहता है? मैं उसे कैसे कर सकता हूँ? –

+0

ब्राउज़र को आपके द्वारा भेजे जाने वाले शीर्षकों द्वारा डाउनलोड संवाद प्रदान करने के लिए निर्देशित किया जाना चाहिए .... लेकिन मैं आपके प्रश्न और टिप्पणी से उलझन में हूं। सवाल ने सुझाव दिया कि आपको डाउनलोड संवाद मिल रहा था, लेकिन फ़ाइल दूषित हो गई थी। अब आप कह रहे हैं कि आपको डाउनलोड संवाद नहीं मिला –

+0

हां मैं खुद उलझन में हूं।क्षमा करें, लेकिन अभी मेरी समस्या यह है कि ब्राउज़र excel.php को डाउनलोड कर रहा है, एक्सेल फ़ाइल को मेरे फ़ोल्डर में भी डाउनलोड किया गया है, लेकिन मैं चाहता हूं कि उपयोगकर्ता यह चुनने के लिए कि उसे कहां सेव करना चाहिए। –

5

मैं अगर मैं मदद कर सकता है मैं एक ही समस्या थी और मैं

ob_end_clean(); 

के साथ हल मैं सिर्फ बाद

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

तो यह डाल हैडर बदल सकते हैं और बचाने के लिए नहीं है पता नहीं है वैसे भी xslx के रूप में, समस्या बफर है!

2

कृपया सुनिश्चित करें कि सभी फ़ाइलें (उदा। जो शामिल हैं) बीओएम एन्कोडिंग के बिना यूटीएफ -8 में हैं।
आप इसे विभिन्न तरीकों से पहचान सकते हैं, उदा। यह link देखें।

सिर्फ अगर आप बीओएम साथ UTF-8 की जरूरत है - ob_end_clean(); का इस्तेमाल करें पहले डेटा, ब्राउज़र को outputing के रूप में यहां अन्य उत्तर में बताया।

0

मुझे एक ही समस्या है, समस्या सरल है। नीचे बस डाल कोड:

ob_end_clean(); 

के बाद:

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

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^