PHPExcel文件可能已损坏或不安全 [英] PHPExcel file could be corrupted or unsafe

查看:103
本文介绍了PHPExcel文件可能已损坏或不安全的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我使用PHPExcel生成Excel报告时,出现此错误:

When I generate an Excel report using PHPExcel I get this error:

'test.xls'的文件格式和扩展名不匹配.该文件 可能已损坏或不安全.除非您相信其来源,否则请不要打开 它.您是否仍要打开它?"

"The file format and extension of 'test.xls' don't match. The file could be corrupted or unsafe. Unless you trust its source, don't open it. Do you want to open it anyway?"

这是我的设置-PHP 5.4/PHPExcel 1.7.9/Windows 7

This is my set up -- PHP 5.4/PHPExcel 1.7.9/Windows 7

当我单击确定"以打开不安全的excel文件时,它要么为空要么为乱码.

When I click 'OK' to open the unsafe excel file anyway it either is empty or gibberish.

HTML代码::如果用户要预览报告,生成Excel文件或创建PDF文件,则允许用户从下拉菜单中选择报告,然后选择按钮.但是在这种情况下,我正在努力获取可生成的excel文件.

HTML Code: it allows the the user to select a report from the drop down then they select the button if they either want to preview the report, generate an excel file, or create a PDF file. But in this case I'm working on getting the excel files to generate.

<!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语句来指示用户选择了哪个报告,并仅运行该报告.

Here is the PHP file: where the PHPExcel code is executed. I built if else statements to indicate which report the user selected and run only that report.

  <?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类文件位于我的项目文件夹中,因此可以引用这些路径.我不确定如何解决此错误.

A week ago the reports were able to generate using the code above but recently for some reason it's giving me the error that the file could be corrupted or unsafe. My PHPExcel class files are in my project folder so the paths are able to be referenced. I'm unsure how to fix this error.

如果有人可以在这个问题上有所启发,我将非常感激.

If anybody could shine some light on this issue I would really appreciate it.

谢谢.

推荐答案

请使用

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

代替

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

我尝试了,而且行得通. 谢谢你

I tried and it works. Thank u

这篇关于PHPExcel文件可能已损坏或不安全的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆