2012-09-26 58 views
16

我採取從limesurvey源代碼,並添加了PHPExcel庫我limesurvey代碼將數據導出到Excel文件,你點擊一個鏈接後,Excel文件。目前,excel文件打開時會顯示一些虛擬數據,沒有問題。在用戶輸入調查信息後,我需要能夠從Web服務器動態添加數據。我查看了一些我已經找到的網站,但我沒有多少運氣。誰能幫我嗎?如何將數據導出到使用PHPExcel

編輯

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

回答

35

如果您複製此直接,那麼:

->setCellValue('B2', Ackermann') 

應該

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

在回答你的問題:

獲取您從limesurvey想要的數據,並使用setCellValue()這些數據值存儲在要存儲它的細胞。

的在/測試Quadratic.php例如文件可能有助於作爲起點:它從輸入形式取數據並將其設置爲細胞在Excel工作簿。

編輯

一個非常簡單的例子:

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

編輯#2

使用現有的代碼爲基礎

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

馬克excel文件,我看着二次.php,我需要從MYSQL中提取值,而不是從HTML中提取值。對不起,我沒有澄清。有什麼起點嗎? –

+0

提取從MySQL的值是在細胞 –

+0

馬克執行數據庫查詢,通過行迭代,並且存儲每行/列值的情況下,我已編輯我的代碼。我不確定如何更改此代碼以適應PHPExcel代碼輸出到Excel。 –

9

嘗試對同一

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

我目前使用此功能在我的項目經過一系列谷歌上搜索到下載下面的完整的示例從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

儘管這段代碼可能有助於解決問題,但它並沒有解釋_why_和/或_how_它是如何回答問題的。提供這種附加背景將顯着提高其長期教育價值。請[編輯]您的答案以添加解釋,包括適用的限制和假設。 –

相關問題