2

さて、次の PHPExcel の質問です。ユーザーが入力する HTML フォームがあり、データはデータベースに送信されます。これはすべて問題なく動作します。PHPExcel を使用してその情報を Excel ワークシートに送信し、組織の社長が送信されたレポートを表示できるようにしています (彼は Excel でレポートを表示することを選択しました)。ボタンをクリックすると、情報が Excel にダウンロードされます。ワークシートの最初の行がヘッダー情報で覆われていることを除いて、これはすべて正常に機能します。$headings を変更して配列内の値を削除すると、非表示のクエリの一部が表示されるため、ヘッダーであることはわかっています。

このコードはhttp://phpexcel.codeplex.com/discussions/246121/から入手しました。

コーディング エラーがあるか、すべてのファイルとクラスをインターネットにアップロードしていない可能性があります...

どんな助けでも大歓迎です。ありがとう。

// connection with the database 
$dbhost = "I removed this for privacy"; 
$dbuser = "I removed this for privacy"; 
$dbpass = "I removed this for privacy"; 
$dbname = "I removed this for privacy"; 

mysql_connect($dbhost,$dbuser,$dbpass); 
mysql_select_db($dbname); 

// require the PHPExcel file 
require 'Classes/PHPExcel.php'; 

// simple query 

$query = "

SELECT dueDate, reporterName, program, noReportReason, recentActivity, impacted, fundsGenerated, fundsSpent, volunteers, input, potentialContacts, potentialSources
FROM reports
ORDER BY id

"; 

if ($result = mysql_query($query) or die(mysql_error())) 
{   
// Create a new PHPExcel object 
$objPHPExcel = new PHPExcel(); 
$objPHPExcel->getActiveSheet()->setTitle('Quarterly Project Reports'); 

// Loop through the result set 
$rowNumber = 1; 
while ($row = mysql_fetch_row($result)) 
{ 
$col = 'A'; 
foreach($row as $cell) 
{ 
$objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell); 
$col++; 
} 
$rowNumber++; 
}

$rowNumber = 1;
$headings = array('Due Date','Reporter Name','Name of Program','No Report This Quarter',
    'Recent Activity','Number of People Impacted','Funds Generated',
    'Funds Spent and Fuding Sources','Volunteers Mobilized','WNP Input',
    'Potential Contacts','Potential Sources'); 
$objPHPExcel->getActiveSheet()->fromArray(array($headings),NULL,'A'.$rowNumber);  

$rowNumber++; 
// Loop through the result set 
while ($row = mysql_fetch_row($result)) 
{
$col = 'A';
foreach($row as $cell) 
{
$objPHPExcel->getActiveSheet()->setCellValue($col.$rowNumber,$cell);
$col++;
}
$rowNumber++; 
}

//bold Header row
$objPHPExcel->getActiveSheet()->getStyle('A1:L1')->getFont()->setBold(true); 

//wrap column D
$objPHPExcel->getActiveSheet()->getStyle('D1:D'.$objPHPExcel->getActiveSheet()->getHighestRow())->getAlignment()->setWrapText(true);

//wrap column E
$objPHPExcel->getActiveSheet()->getStyle('E1:E'.$objPHPExcel->getActiveSheet()->getHighestRow())->getAlignment()->setWrapText(true); 

//set header row height
$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(20);

//set column widths
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(50);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(50);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('H')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('I')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('J')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('K')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('L')->setWidth(30); 

// Save as an Excel BIFF (xls) file 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 

header('Content-Type: application/vnd.ms-excel'); 
header('Content-Disposition: attachment;filename="WNPQuarterlyReports.xls"'); 

$objWriter->save('php://output'); 
exit(); 
} 
echo 'a problem has occurred... no data retrieved from the database'; 
4

1 に答える 1

2

このコードでは、結果セットに対して 2 つのループがあり、1 行目から始まります。次に、行 1 をヘッダーで上書きし、結果セットを再度ループします (これは、最後に到達したため、実際にはループしません)。行 2 から始まる最初のループの結果セット)

于 2012-07-05T17:39:57.743 に答える