0

私はすでにデータベースから目的のデータを取得し、Web で使用するためにブラウザーを介して出力していますが、今はそれを Excel ドキュメントに挿入して電子メールで送信しようとしています。

私はドキュメントの始まりを持っており、それを添付ファイルとして電子メールで送信できます.html出力をExcelドキュメントに転置する方法が最善の方法だとは思えないので、行き詰まっています.

これは、HTML出力を実現する方法です(長さについてお詫びします):

// print table
echo '<table>';
echo '<tr><th rowspan="2">Day</th>';

foreach($typesorder as $type) {
    if(in_array($type, $types)) {
        echo '<th colspan="3">' . $type . '</th>';  
    }
}

echo '<th colspan="3">Total Conversions</th>';
echo '</tr>';
echo '<tr>';

foreach($typesorder as $type) {
    if(in_array($type, $types)) {
        echo '<th>Week ' . $weekstart_A_data['week'] . ' ' . $weekstart_A_data['year'] . '</th>';  
        echo '<th>Week ' . $weekstart_B_data['week'] . ' ' . $weekstart_B_data['year'] . '</th>';  
        echo '<th>+/-</th>';  
     }
}

// Total Conversions section
echo '<th>Week ' . $weekstart_A_data['week'] . ' ' . $weekstart_A_data['year'] . '</th>';  
echo '<th>Week ' . $weekstart_B_data['week'] . ' ' . $weekstart_B_data['year'] . '</th>';  
echo '<th>+/-</th>';    

echo '</tr>';

foreach($dailytotals as $thedate => $data) {

    $daily_conversions = 0;
    $daily_conversionsB = 0;

    echo '<tr>';
    echo '<td>' . date('l', strtotime($thedate)) . '</td>';

    foreach($typesorder as $type) {

        if(in_array($type, $types)) {

                $conversions  = $data[$type];

                $total_conversions[$type]   += $conversions;
                $daily_conversions          += $conversions;

                $week_A_conversions = $conversions;
                $week_B_conversions = $dailytotalsB[$weekstartB][$type];

                $total_conversionsB[$type] += $dailytotalsB[$weekstartB][$type];

                $daily_conversionsB  += $week_B_conversions;

                $differential = $dailytotalsB[$weekstartB][$type] - $conversions;

                echo '<td>'. number_format($week_A_conversions) . '</td>';   
                echo '<td>'. number_format($week_B_conversions) . '</td>';   

                if($differential < 0 ) {
                    $class = "class='diffred'";
                } else if($differential >  0) {
                    $class = "class='diffblue'";
                } else {        
                    $class='';
                }   

                // differential between Week A and Week B
                echo '<td ' . $class . '>' . $differential . '</td>';  

        }

    }

    $weekstartB = date("Y-m-d", strtotime('+1 day', strtotime($weekstartB)));   

    $differentialtotal = $daily_conversionsB - $daily_conversions;

    echo '<td>' . number_format($daily_conversions) . '</td>';     
    echo '<td>' . number_format($daily_conversionsB) . '</td>';    

    if($differentialtotal < 0 ) {
        $class = "class='diffred'";
    } else if($differentialtotal >  0) {
        $class = "class='diffblue'";
    } else {        
        $class='';
    }

    echo '<td ' . $class . '>' . $differentialtotal . '</td>';    
    echo '</tr>';

}


echo '<tr>';
echo '<td><strong>Total</strong></td>';

// reset both week A and B
$overall_conversions = 0; 
$overall_conversionsB = 0;

foreach($typesorder as $type) {

    if(in_array($type, $types)) {

        $conversions = $total_conversions[$type];
        $overall_conversions    += $conversions;

        $conversionsB = $total_conversionsB[$type];
        $overall_conversionsB    += $conversionsB;

        echo '<th>' . number_format($conversions) . '</th>';   
        echo '<th>' . number_format($conversionsB) . '</th>';  
        echo '<th>' . number_format($conversionsB - $conversions) . '</th>';  
    }            
}

echo '<th>' . number_format($overall_conversions) . '</th>';
echo '<th>' . number_format($overall_conversionsB) . '</th>';
echo '<th>' . number_format($overall_conversionsB - $overall_conversions) . '</th>';

echo '</tr>';

echo '</table>';  

これにより、次の構造を持つテーブルが出力されます。

----------------------------------------------------------------------------------
|       |           Type 1          |   Type 2  |    ...    |  Total Conversions |
| Day   -------------------------------------------------------------------------|
|       | Week 1 2013 | Week 1 2012 | ... | ... | ... | ... |         ...        |      
|--------------------------------------------------------------------------------|
|Sunday |      135    |      143    | ... | ... | ... | ... |         ...        |      
|--------------------------------------------------------------------------------|
|  ...  |      ...    |      ...    | ... | ... | ... | ... |         ...        |      
|--------------------------------------------------------------------------------|
|Total  |      ...    |      ...    | ... | ... | ... | ... |         ...        |    
----------------------------------------------------------------------------------  

うまくいけば、それはある程度の意味があります。これ...は、データを繰り返すための単なるプレースホルダーです。

必要なすべてのデータが既にあるので、数式を実行する必要はありませんが、PHPExcel を使用して合計する方が簡単かもしれないので、除外しません。

これが恐ろしい質問であることはわかっていますが、どうやって始めればよいのか本当に困惑しています。私は特定のシナリオに対する完全で正確な答えを期待していませんが(それは魔法のようですが)、実際にはポインタがあれば役立ちます.

PS PHPExcel を使用して Excel ドキュメントにデータを挿入する方法は知っていますが、テーブルを転置することが問題です。最初のステップは、すべてのデータを印刷する代わりに多次元配列に追加することだと思いますが、最初に応答が何であるかを確認します。

また、事前に準備およびフォーマットされたExcelシートを自動的に電子メールで送信したいため、CSVとして出力したくないことに注意してください。

4

0 に答える 0