Файл PHPExcel может быть поврежден или небезопасен

Когда я создаю отчет Excel с помощью PHPExcel, я получаю эту ошибку:

«Формат файла и расширение« test.xls »не совпадают. Файл может быть поврежден или опасен. Если вы не доверяете его источнику, не открывайте его. Вы все равно хотите его открыть?»

Это моя настройка – PHP 5.4 / PHPExcel 1.7.9 / Windows 7

Когда я нажимаю «ОК», чтобы открыть небезопасный файл excel, он либо пуст, либо бред.

HTML-код: он позволяет пользователю выбрать отчет из раскрывающегося списка, затем они выбирают кнопку, если они либо хотят просмотреть отчет, создать файл excel, либо создать файл PDF. Но в этом случае я работаю над созданием файлов excel.

<!DOCTYPE html"> <html> <head> <meta charset=utf-8" /> <title>Generate Reports</title> <link rel="stylesheet" type="text/css" href="style.css" media="screen" /> <!--Display the Criteria screen only if Title Org Codes Report (rpt3) is selected--> <script type="text/javascript"> function showForm() { var selopt = document.getElementById("selReport").value; if (selopt === "rpt3") { document.getElementById("criteria").style.display = "block"; } else { document.getElementById("criteria").style.display = "none"; } } </script> </head> <body> <div id="wrapper"> <div id="content"> <div id="reports" class="center"> <h3> Generate Reports: </h3> <!--Display the list of reports--> <form id="frm1" name="frm1" method="post" action="Reports.php"> <!-- Excel, PDF, View buttons --> <input type="submit" value="Preview Report" id="view" name="view"> <input type="submit" value="Export to Excel" id="excel" name="excel"> <input type="submit" value="Publish as PDF" id="pdf" name="pdf"> <br><br><br> Select a Report: <select id="selReport" name="selReport" onclick="showForm();"> <option></option> <option value="rpt1">Units/Ranges Summary</option> <option value="rpt2">Divisions Table</option> <option value="rpt3">Title Codes</option> </select> <!--Creates the criteria drop down menu--> <div id="criteria" style="display:none"> <br><br><h3>Selection Criteria for Reports:</h3> Title File Status: <select name="selCriteria" id="selCriteria" onchange="showForm();"> <option></option> <option value="active">Active</option> <option value="inactive">Inactive</option> <option value="all">All</option> </select> </div> <!--end criteria --> </form> <!-- end frm1 --> </div> <!-- end #reports --> </div> <!-- end #content --> </div> <!-- end #wrapper --> </body> </html> 

Вот файл PHP : где выполняется код PHPExcel. Я построил if else заявления, чтобы указать, какой отчет пользователь выбрал и запустить только этот отчет.

  <?php //Get the user selection and put into variables $varRpt = $_POST['selReport']; $varCrit = $_POST['selCriteria']; // require the PHPExcel classes require 'PHPExcel/Classes/PHPExcel.php'; // PHPExcel_Writer_Excel2007 require 'PHPExcel/Classes/PHPExcel/Writer/Excel2007.php'; //------------------------------- // Connect to the MySQL database //------------------------------- $dbhost = "localhost"; $dbuser = "root"; $dbpass = "*******"; $dbname = "test"; mysql_connect($dbhost,$dbuser,$dbpass)or die ("Could not connect to mysql because ".mysql_error()); mysql_select_db($dbname)or die("Unable to select database" .mysql_error()); //------------------------------------- // Figure out which report to generate //------------------------------------- if ($varRpt == "rpt1") { $query = "SELECT a.div_id, a.unit_id, b.unit_beg, b.unit_end, a.title_org, c.long_desc, c.short_desc FROM depunits a LEFT OUTER JOIN unitRanges b ON ( a.unit_id )= ( b.unit_id ) LEFT OUTER JOIN orgcodes c ON ( a.title_org )= ( c.l1l5_id ) ORDER BY a.div_id, a.unit_id" ; //Column headings $headings = array('Div_id','Unit Id','Unit Begin','Unit End','Title Org','Long Desc','Short Desc'); // Sheet name $title = "Summary Report Units/Ranges"; // Name of the saved excel file $filename = "Rpt1_" . date('Ymd') . ".xls"; } else if ($varRpt == "rpt2") { $query = "SELECT alldiv_id, div_id, L1l2_id, L2_id, L1l3_id, L2l3_id, Exec_beg, Exec_end, Csa_id, Area_id, Area_Desc, Short_Desc, Long_Desc FROM divisions WHERE avail_ind='Y' AND active_ind='Y' ORDER BY alldiv_id "; // Column Labels $headings = array('All','Div','L1L2','L2','L1L3','L2L3','Exec Begin','Exec End','CSA','Area Id','Area Desc','Short Desc','Long Desc'); // Report Title $title = "Divisions Table"; // name of the saved excel file $filename = "Rpt2_" . date('Ymd') . ".xls"; } // end $varRpt == "rpt2" else if ($varRpt == "rpt3") { //Column heading $headings = array('Title Code','Short Title','Long Title','Status'); // Report title $title = "Title Codes"; // Name of the saved file $filename = "Rpt3_" . date('Ymd') . ".xls"; if ($varCrit == "active") { $query = "SELECT L2l5, Stitl, Ltitl, Status FROM Tl2l5 WHERE UPPER(TRIM(status))= 'A' ORDER BY L2l5"; } else if ($varCrit == "inactive") { $query = "SELECT L2l5, Stitl, Ltitl, Status FROM Tl2l5 WHERE UPPER(TRIM(status))= 'I' ORDER BY L2l5"; } else if ($varCrit == "all") { $query = "SELECT L2l5, Stitl, Ltitl, Status FROM Tl2l5 ORDER BY L2l5"; } } //----------------------------------------- // Insert data into Excel Report template //----------------------------------------- // Create a new PHPExcel object $objPHPExcel = new PHPExcel(); // Sheet name $objPHPExcel->getActiveSheet()->setTitle('sheet1'); // Set the default font type (Arial) and the size (10) $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('Arial')->setSize(10); // Set the column headings to row 3 and data to start on row 4 $rowHeadStart = 3; $rowDataStart = 4; //Merge Cells for the report titles $objPHPExcel->getActiveSheet()->mergeCells("A1:T1"); // Report Title $objPHPExcel->getActiveSheet()->mergeCells("A2:T2"); // Date //Set Cell Text $objPHPExcel->getActiveSheet()->setCellValue("A1", $title); $objPHPExcel->getActiveSheet()->setCellValue('A2', date("m/d/Y")); //Make Report title bold $objPHPExcel->getActiveSheet()->getStyle("A1:T1")->applyFromArray(array("font" => array( "bold" => true))); //Make the date italicized $objPHPExcel->getActiveSheet()->getStyle("A2:T2")->applyFromArray(array("font" => array( "italic" => true))); //Make Column headers bold $objPHPExcel->getActiveSheet()->getStyle("A3:T3")->applyFromArray(array("font" => array( "bold" => true))); //--------------------------------------------- // Loop through to display the column headings //--------------------------------------------- $col = 'A'; foreach($headings as $heading) { $objPHPExcel->getActiveSheet()->setCellValue($col.$rowHeadStart,$heading); $col++; } // end $headings as $heading //------------------------------------------------- // Loop through the result set to display the data //------------------------------------------------- while ($row = mysql_fetch_row($result)) { $col = 'A'; foreach($row as $cell) { $objPHPExcel->getActiveSheet()->setCellValue($col.$rowDataStart,$cell); $objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true); $col++; } // end $row as $cell $rowDataStart++; //----------------------- // Page/Cell Formatting //----------------------- //Set font size for the main report title $objPHPExcel->getActiveSheet()->getStyle("A1")->getFont()->setSize(16); $objPHPExcel->setActiveSheetIndex(0); // Left align the entire document $objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_LEFT); // Set the page orientation to landscape $objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); } //end $row = mysql_fetch_row($result) // Redirect output to a client's web browser (Excel2007) header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="0teste.xlsx"'); header('Cache-Control: max-age=0'); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); $objWriter->save('php://output'); exit(); ?> 

Неделю назад отчеты могли генерировать с использованием вышеприведенного кода, но недавно по какой-то причине он дает мне ошибку, что файл может быть поврежден или небезопасен. Мои файлы класса PHPExcel находятся в папке проекта, поэтому пути могут быть указаны. Я не знаю, как исправить эту ошибку.

Если бы кто-нибудь мог пролить свет на этот вопрос, я был бы очень признателен.

Спасибо.