2012-05-04 26 views
-1

MySqlからデータを取得してExcelでレポートを作成しようとしています。私はデータベースから件名を取得して、列としてExcelシートに出力する必要があります。たとえば、D5、E5、F5 ... M5など。既存の各配列要素間に配列要素を追加する

これまでのところ、

D5:数学、E5:英語、F5:物理学など

| A | B | C | D   | E  | F  | G | H | 
-------------------------------------------------------------- 
1 | | | |    |   |   |  |  | 
... 
5 | | | | Mathematics | English | Physics | ... | ... | 

結構です細胞は見出しにのようなものを保持しています。課題は、私は、Subject秒との間で見出しGRADEを挿入するには、このような何か必要がある:今ここに

| A | B | C | D   | E  | F  | G  | H  | I  | J | K | 
-------------------------------------------------------------------------------------- 
1 | | | |    |  |   |  |   |  |  |  | 
... 
5 | | | | Mathematics | GRADE | English | GRADE | Physics | GRADE | ... | ... | 

を私がこれまで持っているものです。

$stringindex = "DEFGHIJKLMNOPQRSTUVWXYZ"; // For the excel column cells 
$arr_index = str_split($stringindex); // create array elements 
$arr_val2 = array(); // create array 
$subject = array(); 
$subname2 = array(); 


while($sub_row = mysqli_fetch_array($resub, MYSQLI_ASSOC)) { 
    $subject[] = $sub_row['name']; // Get the subjects from the database and put them in an array 
} 

foreach($subject as $sub => $subname) { 
    $subkey[] = $sub; // array of subject keys e.g 0|1|2|3 
    $subname2[] = $subname; // array of subjects 
} 

foreach($arr_index as $arr => $arr_val) { 
    $arr_val2[] = $arr_val; // array of letters e.g D|E|F|G 
} 

$acount = count($subname2); 
$bcount = count($arr_val2); 

$size = ($acount > $bcount) ? $bcount : $acount; 
$a = array_slice($subname2, 0, $size); 
$b = array_slice($arr_val2, 0, $size); 

$combine = array_combine($a, $b); 

$sheet = $objPHPExcel->setActiveSheetIndex(0); // PHPExcel functions 

foreach($combine as $key => $val) { // GET SUBJECTS 
    $objPHPExcel->getActiveSheet()->getColumnDimension($val)->setAutoSize(true); // Sets Column Width 

    $sheet 
     ->setCellValue($val.'5', $key); // Lists Subjects as columns 

} // END of FOREACH LOOP 

上記のコードはあります

質問: 各件名の後にGRADE列を追加するコードを追加するにはどうすればよいですか?

私は正しい方向に私を指してくれることを願っていますcoz '私は今固執しています。

ありがとうございます。

+0

1人の学生が1つの行を持つと仮定した場合、成績ではない場合、それぞれの「課題」の欄には何を入れますか? – Squig

+0

@Squig、はい、それは学生1行で、各科目の下にパーセンテージマーク(例:95)を表示し、次に学年では – Brian

+0

と表示します。おそらく、それらを別々の列に保存したいと思います。 A) ')を使用してパーセンテージ(高、低、平均、中央値など)の計算を実行しますか? – Squig

答えて

0

あなたはこのような何かを試すことができます:私は機能あなたに "AA" を与えるのgetColumnName()を追加

$stringindex = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // For the excel column cells 
$columns = str_split($stringindex);    // create array elements 
$rowIndex = 5;  // start at row 5 in Excel 
$columnIndex = 3; // start at column D in Excel 
$subjects = array(); 

while($sub_row = mysqli_fetch_array($resub, MYSQLI_ASSOC)) { 
    $subject[] = $sub_row['name']; // Get the subjects from the database and put them in an array 
} 

$sheet = $objPHPExcel->setActiveSheetIndex(0); // PHPExcel functions 
foreach($subject as $index => $subjectName) { // GET SUBJECTS 
    $columnName = getColumnName($columnIndex, $columns); 
    $objPHPExcel->getActiveSheet()->getColumnDimension($columnName)->setAutoSize(true); // Sets Column Width 
    $sheet->setCellValue($columnName.$rowIndex, $subjectName); // Lists Subjects as columns 
    $columnIndex++; 

    $columnName = getColumnName($columnIndex, $columns); 
    $objPHPExcel->getActiveSheet()->getColumnDimension($columnName)->setAutoSize(true); // Sets Column Width 
    $sheet->setCellValue($columnName.$rowIndex, "GRADE"); 
    $columnIndex++; 
} // END of FOREACH LOOP 

function getColumnName($index, $columns) { 
    $columnName = ""; 
    $numColumns = count($columns); 
    while($index >= $numColumns) { 
     $columnName = $columns[($index % $numColumns)] . $columnName; 
     $index = floor($index/$numColumns) - 1; 
    } 
    $columnName = $columns[($index % $numColumns)] . $columnName; 
    return $columnName; 
} 

、 "AB"、...あなたの主題と成績の列がAZの限界を超えた場合。

+0

あなたは何を知っていますか?あなたのコードは私の問題を解決するようです...予備テストは、私が達成しようとしていることに潜在的可能性があることを示しています...私はこれを親指であげてください。 – Brian

+0

パンにコードを入れてさらに成分を加えた後、それは私のために働いたので、再び正しい方向へ私を向けることに感謝します。私はこの問題を解決したと考えています。 – Brian

+0

もちろん、getColumnName()のすべてをPHPExcelの組込みPHPExcel_Cell :: stringFromColumnIndex()メソッドで置き換えることができます。 PHPの文字のインクリメンタ($ columnName = 'A'; $ columnName ++;)を利用するだけです –

0

$ temp = true;

その後、カラムを通過し、ループ内:

if($temp==true){ 
    //do stuff 
    $temp=false; 
}else{ 
    //do other stuff 
    $temp=true; 
}