2016-05-27 40 views
-4

我從mysql的導出數據庫Excel中但我正在逐漸錯誤這樣的:MySQL的到Excel使用PHP

enter image description here

,我的代碼是:

<?php 
session_start(); 
if(!isset($_SESSION['username']) && !isset($_SESSION['password'])) 
{ 

    header("location:../index.php"); 
} 
//header('Pragma: no-cache'); 
include("../config.php"); 
//$id=$_GET['id']; 
include '../PHPExcel/IOFactory.php'; 
include '../PHPExcel/PHPExcel.php'; 
$sqlquery = "SELECT ProjectName As Project, 
     OfficeContact As Office, IndiaContact As india, 
     StartDate As sdate, Notes As notes, 
     Status AS status, DueDate AS ddate, 
     Client AS client, InHouseProject AS inhouse 
    FROM project 
    WHERE ProjectType='Current projects' 
    order by projectid"; 

$select_table = mysql_query($sqlquery); 


// Create new PHPExcel object 
$objPHPExcel = new PHPExcel(); 

// Create a first sheet, representing sales data 
$objPHPExcel->setActiveSheetIndex(0); 
$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Project'); 
$objPHPExcel->getActiveSheet()->setCellValue('B1', 'Office Contact'); 
$objPHPExcel->getActiveSheet()->setCellValue('C1', 'India Contact'); 
$objPHPExcel->getActiveSheet()->setCellValue('D1', 'Start date'); 
$objPHPExcel->getActiveSheet()->setCellValue('E1', 'Notes'); 
$objPHPExcel->getActiveSheet()->setCellValue('F1', 'Status'); 
$objPHPExcel->getActiveSheet()->setCellValue('G1', 'Due Date'); 
$objPHPExcel->getActiveSheet()->setCellValue('H1', 'Client'); 
$objPHPExcel->getActiveSheet()->setCellValue('I1', 'In-house project'); 
$i=2; 
while($row=mysql_fetch_assoc($select_table)){ 
$objPHPExcel->getActiveSheet()->setCellValue('A'.$i, $row['Project']); 
$objPHPExcel->getActiveSheet()->setCellValue('B'.$i, $row['Office']); 
$objPHPExcel->getActiveSheet()->setCellValue('C'.$i, $row['india']); 
$objPHPExcel->getActiveSheet()->setCellValue('D'.$i, $row['sdate']); 
$objPHPExcel->getActiveSheet()->setCellValue('E'.$i, $row['notes']); 
$objPHPExcel->getActiveSheet()->setCellValue('F'.$i, $row['status']); 
$objPHPExcel->getActiveSheet()->setCellValue('G'.$i, $row['ddate']); 
$objPHPExcel->getActiveSheet()->setCellValue('H'.$i, $row['client']); 
$objPHPExcel->getActiveSheet()->setCellValue('I'.$i, $row['inhouse']); 
i++; 
} 
// Rename sheet 
$objPHPExcel->getActiveSheet()->setTitle('Current projects'); 
header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="allproject.xls"'); 
header('Cache-Control: max-age=0'); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('php://output'); 
?> 

當我嘗試使用while循環時,它使用我在代碼中定義的標題。我也檢查,沒有Excel代碼我的php代碼數據庫,它的領域正在工作。但以上while循環它顯示像上面的圖像。

+3

查看錯誤日誌中的實際錯誤。 –

+3

儘量不要包含僅顯示文本錯誤消息的屏幕截圖。粘貼錯誤文本幾乎總是更好,以便人們可以搜索它。 – tadman

+0

閱讀本文以瞭解如何啓用錯誤報告:http://stackoverflow.com/questions/845021/how-to-get-useful-error-messages-in-php –

回答

1

你錯過了可變$符號我在關閉while循環(i ++)之前。保持並檢查,它可能工作。

+3

更重要的是爲OP開發*調試*技能。 StackOverflow是*不*調試服務。在StackOverflow上發佈問題*不適合替代調試。 [** HTTPS://ericlippert.com/2014/03/05/how-to-debug-small-programs/**](https://ericlippert.com/2014/03/05/how-to-debug - 小的程序/) – spencer7593

1

就我所見,您的代碼看起來很好。從我自己的經驗來看,PHPExcel很容易引發500個錯誤。有時由於內存不足,特殊的單元格標記,複雜的公式,...

我使用幾乎完全相同的代碼來將查詢導出到Excel。此代碼從選擇查詢(使用相同的標題)創建完整導出。其中

$oResult 

是您的mysqli_query結果。

$objPHPExcel = new PHPExcel(); 
$objPHPExcel->getProperties()->setCreator("Me"); 
$objPHPExcel->getProperties()->setTitle("Export"); 
$objPHPExcel->getProperties()->setSubject("Export"); 
$objPHPExcel->getProperties()->setDescription("Export"); 

$objPHPExcel->setActiveSheetIndex(0); 
$iColHeaders = 0; 
// Set Headers 
while($oFields = mysqli_fetch_field($oResult)) { 
    $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($iColHeaders, 1, $oFields->name); 
    $iColHeaders++; 
} 

// Set data 
$iRow=1; 
while($oRow = mysqli_fetch_array($oResult)){ 
    $iRow++; //Skip header row 
    for($iCol=0;$iCol<$iColHeaders;$iCol++){ 
     $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($iCol, $iRow, $oRow[$iCol]); 
    } 
} 

$objPHPExcel->getActiveSheet()->setTitle('Export'); 

$sPath = dirname(__FILE__).'/files/'; 
$sFilename = 'Export_'.date('His').'.xlsx'; 
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
$objWriter->save($sPath.$sFilename, __FILE__); 

這就像一個魅力,我看到的唯一的區別是

setCellValueByColumnAndRow 

代替

setCellValue 

希望這有助於您解決問題。

-1

您可以根據您的使用,並請格式化:

<?php 
define ("DB_HOST", "localhost"); 
define ("DB_USER", "root"); 
define ("DB_PASS",""); 
define ("DB_NAME","stock1"); 
error_reporting(0); 
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection."); 
$db = mysql_select_db(DB_NAME, $link) or die("Couldn't select database"); 

$setCounter = 0; 

$setExcelName = "download_excal_file"; //downloaded excel file name 

$setSql = "SELECT * FROM roll_table ORDER BY id ASC"; //to select the data from the database 

$setRec = mysql_query($setSql); 

$setCounter = mysql_num_fields($setRec); 

for ($i = 0; $i < $setCounter; $i++) { 
    $setMainHeader .= mysql_field_name($setRec, $i)."\t"; 
} 

while($rec = mysql_fetch_row($setRec)) { 
    $rowLine = ''; 
    foreach($rec as $value)  { 
    if(!isset($value) || $value == "") { 
     $value = "\t"; 
    } else { 
//It escape all the special charactor, quotes from the data. 
     $value = strip_tags(str_replace('"', '""', $value)); 
     $value = '"' . $value . '"' . "\t"; 
    } 
    $rowLine .= $value; 
    } 
    $setData .= trim($rowLine)."\n"; 
} 
    $setData = str_replace("\r", "", $setData); 

if ($setData == "") { 
    $setData = "\nno matching records found\n"; 
} 

$setCounter = mysql_num_fields($setRec); 



//This Header is used to make data download instead of display the data 
header("Content-type: application/octet-stream"); 

header("Content-Disposition: attachment; filename=".$setExcelName."_Reoprt.xls"); 

header("Pragma: no-cache"); 
header("Expires: 0"); 

//It will print all the Table row as Excel file row with selected column name as header. 
echo ucwords($setMainHeader)."\n".$setData."\n"; 
?> 
+0

爲什麼downvote?答案是完全正確的。我使用相同 –

2

使用此代碼

的index.php

<?php 
define ("DB_HOST", "localhost"); 
define ("DB_USER", "root"); 
define ("DB_PASS",""); 
define ("DB_NAME","yukti"); 
error_reporting(0); 
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Couldn't make connection."); 
$db = mysql_select_db(DB_NAME, $link) or die("Couldn't select database"); 

$setCounter = 0; 

$setExcelName = "download_excal_file"; 

$setSql = "SELECT * FROM login ORDER BY id ASC"; 

$setRec = mysql_query($setSql); 

$setCounter = mysql_num_fields($setRec); 

for ($i = 0; $i < $setCounter; $i++) { 
    $setMainHeader .= mysql_field_name($setRec, $i)."\t"; 
} 

while($rec = mysql_fetch_row($setRec)) { 
    $rowLine = ''; 
    foreach($rec as $value)  { 
    if(!isset($value) || $value == "") { 
     $value = "\t"; 
    } else { 
//It escape all the special charactor, quotes from the data. 
     $value = strip_tags(str_replace('"', '""', $value)); 
     $value = '"' . $value . '"' . "\t"; 
    } 
    $rowLine .= $value; 
    } 
    $setData .= trim($rowLine)."\n"; 
} 
    $setData = str_replace("\r", "", $setData); 

if ($setData == "") { 
    $setData = "\nno matching records found\n"; 
} 

$setCounter = mysql_num_fields($setRec); 



//This Header is used to make data download instead of display the data 
header("Content-type: application/octet-stream"); 

header("Content-Disposition: attachment; filename=".$setExcelName."_Reoprt.xls"); 

header("Pragma: no-cache"); 
header("Expires: 0"); 

//It will print all the Table row as Excel file row with selected column name as header. 
echo ucwords($setMainHeader)."\n".$setData."\n"; 
?> 
0

500錯誤意味着您正面臨php執行問題。代碼中現在有問題。這個問題是由於禁用了虛擬目錄支持,並且這個命令解決了這個問題。

sudo chmod -R 755/var/www