2012-09-26 16 views
16

Pobrałem kod źródłowy z limesurvey i dodałem bibliotekę PHPExcel do mojego kodu limesurvey, aby wyeksportować dane do pliku Excela po kliknięciu łącza. Obecnie plik excel otwiera się z pewnymi niepoprawnymi danymi w nim bez żadnych problemów. Po wpisaniu informacji z ankiety muszę mieć możliwość dynamicznego dodawania danych z serwera WWW. Sprawdziłem niektóre witryny, które znalazłem, ale nie miałem dużo szczęścia. Czy ktoś może mi pomóc?Jak eksportować dane do pliku Excela za pomocą PHPExcel

EDIT

<?php 
$dbhost= "mysql"; //your MySQL Server 
$dbuser = "survey"; //your MySQL User Name 
$dbpass = "password"; //your MySQL Password 
$dbname = "database"; 
//your MySQL Database Name of which database to use this 
$tablename = "questions"; //your MySQL Table Name which one you have to create excel file 
// your mysql query here , we can edit this for your requirement 
$sql = "Select * from $table "; 
//create code for connecting to mysql 
$Connect = @mysql_connect($dbhost, $dbuser, $dbpass) 
or die("Couldn't connect to MySQL:<br>" . mysql_error() . "<br>" . mysql_errno()); 
//select database 
$Db = @mysql_select_db($dbname, $Connect) 
or die("Couldn't select database:<br>" . mysql_error(). "<br>" . mysql_errno()); 
//execute query 
$result = @mysql_query($sql,$Connect) 
or die("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno()); 

error_reporting(E_ALL); 

require_once '../Classes/PHPExcel.php'; 
$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="results.xls"'); 
header('Cache-Control: max-age=0'); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('php://output'); 

Odpowiedz

35

Jeśli kopiowane to bezpośrednio, a następnie:

->setCellValue('B2', Ackermann') 

powinny być

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

w odpowiedzi na pytanie:

Uzyskaj dane, które chcesz z limesurvey, i użyj setCellValue() do przechowywania tych wartości danych w komórkach, w których chcesz je przechowywać.

Przykładowy plik Quadratic.php w/testach może pomóc jako punkt wyjścia: pobiera dane z formularza wejściowego i ustawia je w komórkach w skoroszycie programu Excel.

EDIT

Niezwykle uproszczony przykład:

// 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

Korzystanie z istniejącego kodu jako podstawa

// 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

Mark, spojrzałem na Quadratic .php i ja potrzebujemy wyodrębnić wartości z MYSQL zamiast z HTML. Przepraszam, że nie wyjaśniłem. Czy są na to jakieś punkty wyjścia? –

+0

Wyodrębnianie wartości z MySQL jest przypadkiem wykonywania kwerendy bazy danych, iteracji przez wiersze i przechowywania każdej wartości wiersza/kolumny w komórce –

+0

Mark, edytowałem mój kod. Nie wiem, jak zmienić ten kod, aby pasował do kodu PHPExcel, aby wyprowadzić go do programu Excel. –

9

Spróbuj poniżej pełny przykład dla tej samej

<?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

Obecnie używać tej funkcji w moim projekcie po serii googlowania pobrać excel plik z sql

// $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'); 
      } 
1
$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'); 
+1

Chociaż ten kod może pomóc w rozwiązaniu problemu, nie wyjaśnia on, dlaczego _why_ i/lub _how_ it odpowiada na pytanie. Zapewnienie tego dodatkowego kontekstu znacznie poprawiłoby jego długoterminową wartość edukacyjną. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienie, w tym, jakie ograniczenia i założenia mają zastosowanie. –

Powiązane problemy