2016-04-13 8 views
1

私はphpexcelのoopsという概念を初心者にしています。mysqliを使用してデータをデータベースから取得した複数のシートでファイルをエクスポートするには

私は、日付、日付、セッション、朝食、昼食、夕食のように、複数のシートに基づいてエクスポートしようとしているデータがあるようなことをしようとしています。

私はほとんど到達しましたが、行を反復できませんでした。

これを完了するための助けがあれば助かります。

以下は私が試したコードです。

<?php 

error_reporting(E_ALL); 
ini_set("display_errors", "ON"); 
require_once 'PHPExcel.php'; 
require_once 'PHPExcel/IOFactory.php'; 
include 'db.php'; 

$xls_filename = 'Data' . date('d-m-Y') . '.xls'; // Define Excel (.xls) file name 
$objPHPExcel = new PHPExcel(); 
$objPHPExcel->setActiveSheetIndex(0); 

$heading = array(
    'id' => 'S.No', 
    'date' => 'Date', 
    'item_name' => 'Item', 
    'qty_in' => 'Quantity (dine in)', 
    'qty_out' => 'Quantity (parcel)', 
    'price' => 'Total Quantity', 
    'total' => 'Total Price', 
); 

$no_of_cols = count($heading); 
$rowNumberH = 1; 
$colH = 'A'; 
$columns = array('0' => 'A', '1' => 'B', '2' => 'C', '3' => 'D', '4' => 'E', '5' => 'F', '6' => 'G', '7' => 'H', '8' => 'I', '9' => 'J', '10' => 'K', '11' => 'L', '12' => 'M', '13' => 'N', '14' => 'O', '15' => 'P', '16' => 'Q', '17' => 'R', '18' => 'S', '19' => 'T', '20' => 'U', '21' => 'V', '22' => 'W', '23' => 'X', '24' => 'Y', '25' => 'Z'); 

$q = $conn->query("SELECT * FROM main"); 
if (mysqli_num_rows($q) > 0) { 
    foreach ($heading as $h) { 
     $objPHPExcel->getActiveSheet()->setCellValue($colH . $rowNumberH, $h); 
     $objPHPExcel->getActiveSheet()->getColumnDimension($colH)->setWidth(25); 
     $colH++; 
    } 
    $row = 2; 
    while ($row_q = mysqli_fetch_assoc($q)) { 
     $i = 0; 
     foreach ($row_q as $key => $value) { 
      if ($key == 'location') 
       continue; 
      $objPHPExcel->getActiveSheet()->setCellValue($columns[$i] . $row, $row_q[$key]); 
      $i++; 
     } 
    } 
} 

header("Content-Type: application/xls"); 
header("Content-Disposition: attachment; filename=$xls_filename"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); 
$objWriter->save('php://output'); 
?> 

コードには1行しか印刷されません。

+0

HIの友人は解決策をとっていましたが、少し質問がありました。私はSNo Columnを印刷したいのですが、dbからIDを印刷する代わりに1,2,3で始めるのですか? –

答えて

0

whileループでインクリメント$行。私はそれがうまくいくことを望む。

編集: $ row ++を追加したコードスライスについて言及します。

私はwhileループの最後に$ row ++を追加しました。私のコンピュータでテストしたところ、私のために働いています。あなたのテーブルのようなテーブルを作成してコードを実装しました。私もこのコードでは異なるタイプのテーブルをテストし、それは完璧に機能しました。あなたは何ができるか

$q = $conn->query("SELECT * FROM student"); 
if (mysqli_num_rows($q) > 0) { 
    foreach ($heading as $h) { 
     $objPHPExcel->getActiveSheet()->setCellValue($colH . $rowNumberH, $h); 
     $objPHPExcel->getActiveSheet()->getColumnDimension($colH)->setWidth(25); 
     $colH++; 
    } 
    $row = 2; 
    while ($row_q = mysqli_fetch_assoc($q)) { 
     $i = 0; 
     foreach ($row_q as $key => $value) { 
      if ($key == 'location') 
       continue; 
      $objPHPExcel->getActiveSheet()->setCellValue($columns[$i] . $row, $row_q[$key]); 
      $i++; 
     } 
     $row++; // $row is added only in your code. 
    } 
} 
+0

次の行に次の行が印刷されていませんか? –

-1

です:代わりに

使用この機能を:

$objPHPExcel->setActiveSheetIndex(0)->setCellValueByColumnAndRow($col,$row,"Name"); 

両方の$ COLと$行は整数です。

あなたは

$objPHPExcel->setActiveSheetIndex(0)->setCellValueByColumnAndRow(0,1,"Name"); 

名を使用する場合は、セルA1に印刷されます。

実際に次の行に移動しているかどうかの不明瞭さを取り除きます。

+0

上記の同じ質問をもう一度お願いします。もし私が印刷したいならば、最初の列は変数を使ってそれを行う方法ではありません。 –

+0

私は1、2,3のようなシリアルナンバーをすべて私がエクセルファイルをエクスポートするたびにしたい。 –

+0

レコードをループして開始時に印刷するのは問題ありません。 私はphp excelがシリアル番号のための特別な機能を提供するとは思わない。あなたは実用的にそれらを印刷する必要があります – Mobeen

関連する問題