How to export data to an excel file using PHPExcel

后端 未结 5 956
迷失自我
迷失自我 2020-12-02 21:01

I have taken the source code from limesurvey and have added the PHPExcel library to my limesurvey code to export data to an excel file after you click a link. Currently the

相关标签:
5条回答
  • 2020-12-02 21:26

    Try the below complete example for the same

    <?php
      $objPHPExcel = new PHPExcel();
      $query1 = "SELECT * FROM employee";
      $exec1 = mysql_query($query1) or die ("Error in Query1".mysql_error());
      $serialnumber=0;
      //Set header with temp array
      $tmparray =array("Sr.Number","Employee Login","Employee Name");
      //take new main array and set header array in it.
      $sheet =array($tmparray);
    
      while ($res1 = mysql_fetch_array($exec1))
      {
        $tmparray =array();
        $serialnumber = $serialnumber + 1;
        array_push($tmparray,$serialnumber);
        $employeelogin = $res1['employeelogin'];
        array_push($tmparray,$employeelogin);
        $employeename = $res1['employeename'];
        array_push($tmparray,$employeename);   
        array_push($sheet,$tmparray);
      }
       header('Content-type: application/vnd.ms-excel');
       header('Content-Disposition: attachment; filename="name.xlsx"');
      $worksheet = $objPHPExcel->getActiveSheet();
      foreach($sheet as $row => $columns) {
        foreach($columns as $column => $data) {
            $worksheet->setCellValueByColumnAndRow($column, $row + 1, $data);
        }
      }
    
      //make first row bold
      $objPHPExcel->getActiveSheet()->getStyle("A1:I1")->getFont()->setBold(true);
      $objPHPExcel->setActiveSheetIndex(0);
      $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
      $objWriter->save(str_replace('.php', '.xlsx', __FILE__));
    ?>
    
    0 讨论(0)
  • 2020-12-02 21:34
    $this->load->library('excel');
    $file_name = 'Demo';
    $arrHeader = array('Name', 'Mobile');
    $arrRows = array(0=>array('Name'=>'Jayant','Mobile'=>54545), 1=>array('Name'=>'Jayant1', 'Mobile'=>44454), 2=>array('Name'=>'Jayant2','Mobile'=>111222), 3=>array('Name'=>'Jayant3', 'Mobile'=>99999));
    $this->excel->getActiveSheet()->fromArray($arrHeader,'','A1');
    $this->excel->getActiveSheet()->fromArray($arrRows);
    header('Content-Type: application/vnd.ms-excel'); //mime type
    header('Content-Disposition: attachment;filename="'.$file_name.'"'); //tell browser what's the file name
    header('Cache-Control: max-age=0'); //no cache
    $objWriter = PHPExcel_IOFactory::createWriter($this->excel, 'Excel5');  
    $objWriter->save('php://output');
    
    0 讨论(0)
  • 2020-12-02 21:37

    If you've copied this directly, then:

    ->setCellValue('B2', Ackermann') 
    

    should be

    ->setCellValue('B2', 'Ackermann') 
    

    In answer to your question:

    Get the data that you want from limesurvey, and use setCellValue() to store those data values in the cells where you want to store it.

    The Quadratic.php example file in /Tests might help as a starting point: it takes data from an input form and sets it to cells in an Excel workbook.

    EDIT

    An extremely simplistic example:

    // Create your database query
    $query = "SELECT * FROM myDataTable";  
    
    // Execute the database query
    $result = mysql_query($query) or die(mysql_error());
    
    // Instantiate a new PHPExcel object
    $objPHPExcel = new PHPExcel(); 
    // Set the active Excel worksheet to sheet 0
    $objPHPExcel->setActiveSheetIndex(0); 
    // Initialise the Excel row number
    $rowCount = 1; 
    // Iterate through each result from the SQL query in turn
    // We fetch each database result row into $row in turn
    while($row = mysql_fetch_array($result)){ 
        // Set cell An to the "name" column from the database (assuming you have a column called name)
        //    where n is the Excel row number (ie cell A1 in the first row)
        $objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount, $row['name']); 
        // Set cell Bn to the "age" column from the database (assuming you have a column called age)
        //    where n is the Excel row number (ie cell A1 in the first row)
        $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount, $row['age']); 
        // Increment the Excel row counter
        $rowCount++; 
    } 
    
    // Instantiate a Writer to create an OfficeOpenXML Excel .xlsx file
    $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
    // Write the Excel file to filename some_excel_file.xlsx in the current directory
    $objWriter->save('some_excel_file.xlsx'); 
    

    EDIT #2

    Using your existing code as the basis

    // Instantiate a new PHPExcel object 
    $objPHPExcel = new PHPExcel();  
    // Set the active Excel worksheet to sheet 0 
    $objPHPExcel->setActiveSheetIndex(0);  
    // Initialise the Excel row number 
    $rowCount = 1;  
    
    //start of printing column names as names of MySQL fields  
    $column = 'A';
    for ($i = 1; $i < mysql_num_fields($result); $i++)  
    {
        $objPHPExcel->getActiveSheet()->setCellValue($column.$rowCount, mysql_field_name($result,$i));
        $column++;
    }
    //end of adding column names  
    
    //start while loop to get data  
    $rowCount = 2;  
    while($row = mysql_fetch_row($result))  
    {  
        $column = 'A';
        for($j=1; $j<mysql_num_fields($result);$j++)  
        {  
            if(!isset($row[$j]))  
                $value = NULL;  
            elseif ($row[$j] != "")  
                $value = strip_tags($row[$j]);  
            else  
                $value = "";  
    
            $objPHPExcel->getActiveSheet()->setCellValue($column.$rowCount, $value);
            $column++;
        }  
        $rowCount++;
    } 
    
    
    // Redirect output to a client’s web browser (Excel5) 
    header('Content-Type: application/vnd.ms-excel'); 
    header('Content-Disposition: attachment;filename="Limesurvey_Results.xls"'); 
    header('Cache-Control: max-age=0'); 
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
    $objWriter->save('php://output');
    
    0 讨论(0)
  • 2020-12-02 21:37

    I currently use this function in my project after a series of googling to download excel file from sql statement

        // $sql = sql query e.g "select * from mytablename"
        // $filename = name of the file to download 
            function queryToExcel($sql, $fileName = 'name.xlsx') {
                    // initialise excel column name
                    // currently limited to queries with less than 27 columns
            $columnArray = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
                    // Execute the database query
                    $result =  mysql_query($sql) or die(mysql_error());
    
                    // Instantiate a new PHPExcel object
                    $objPHPExcel = new PHPExcel();
                    // Set the active Excel worksheet to sheet 0
                    $objPHPExcel->setActiveSheetIndex(0);
                    // Initialise the Excel row number
                    $rowCount = 1;
        // fetch result set column information
                    $finfo = mysqli_fetch_fields($result);
    // initialise columnlenght counter                
    $columnlenght = 0;
                    foreach ($finfo as $val) {
    // set column header values                   
      $objPHPExcel->getActiveSheet()->SetCellValue($columnArray[$columnlenght++] . $rowCount, $val->name);
                    }
    // make the column headers bold
                    $objPHPExcel->getActiveSheet()->getStyle($columnArray[0]."1:".$columnArray[$columnlenght]."1")->getFont()->setBold(true);
    
                    $rowCount++;
                    // Iterate through each result from the SQL query in turn
                    // We fetch each database result row into $row in turn
    
                    while ($row = mysqli_fetch_array($result, MYSQL_NUM)) {
                        for ($i = 0; $i < $columnLenght; $i++) {
                            $objPHPExcel->getActiveSheet()->SetCellValue($columnArray[$i] . $rowCount, $row[$i]);
                        }
                        $rowCount++;
                    }
    // set header information to force download
                    header('Content-type: application/vnd.ms-excel');
                    header('Content-Disposition: attachment; filename="' . $fileName . '"');
                    // Instantiate a Writer to create an OfficeOpenXML Excel .xlsx file        
                    // Write the Excel file to filename some_excel_file.xlsx in the current directory                
                    $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
                    // Write the Excel file to filename some_excel_file.xlsx in the current directory
                    $objWriter->save('php://output');
                }
    
    0 讨论(0)
  • 2020-12-02 21:41

    Work 100%. maybe not relation to creator answer but i share it for users have a problem with export mysql query to excel with phpexcel. Good Luck.

    require('../phpexcel/PHPExcel.php');
    
    require('../phpexcel/PHPExcel/Writer/Excel5.php');
    
    $filename = 'userReport'; //your file name
    
        $objPHPExcel = new PHPExcel();
        /*********************Add column headings START**********************/
        $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue('A1', 'username')
                    ->setCellValue('B1', 'city_name');
    
        /*********************Add data entries START**********************/
    //get_result_array_from_class**You can replace your sql code with this line.
    $result = $get_report_clas->get_user_report();
    //set variable for count table fields.
    $num_row = 1;
    foreach ($result as $value) {
      $user_name = $value['username'];
      $c_code = $value['city_name'];
      $num_row++;
            $objPHPExcel->setActiveSheetIndex(0)
                    ->setCellValue('A'.$num_row, $user_name )
                    ->setCellValue('B'.$num_row, $c_code );
    }
    
        /*********************Autoresize column width depending upon contents START**********************/
        foreach(range('A','B') as $columnID) {
            $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
        }
        $objPHPExcel->getActiveSheet()->getStyle('A1:B1')->getFont()->setBold(true);
    
    
    
    //Make heading font bold
    
            /*********************Add color to heading START**********************/
            $objPHPExcel->getActiveSheet()
                        ->getStyle('A1:B1')
                        ->getFill()
                        ->setFillType(PHPExcel_Style_Fill::FILL_SOLID)
                        ->getStartColor()
                        ->setARGB('99ff99');
    
            $objPHPExcel->getActiveSheet()->setTitle('userReport'); //give title to sheet
            $objPHPExcel->setActiveSheetIndex(0);
            header('Content-Type: application/vnd.ms-excel');
            header("Content-Disposition: attachment;Filename=$filename.xls");
            header('Cache-Control: max-age=0');
            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
            $objWriter->save('php://output');
    
    0 讨论(0)
提交回复
热议问题