1

これまでのところ、PHPExcel を介して Mysql から Excel にデータを正常にエクスポートし、テーブルを作成してフォーマットし、すべてがうまくいきました。

ただし、これまでのところ、これらのテーブルからグラフを作成しようとする試みは、惨めに失敗しました。それだけでなく、Google 検索を終了してから数日経っても、MySQL からグラフの値を入力する方法に関する簡単な例/チュートリアルが見つかりませんでした。

要約すると、次のようになります。

Taken from https://github.com/affinitybridge/phpexcel/blob/master/Tests/33chartcreate-pie.php

/** PHPExcel */
include 'PHPExcel.php';
$objPHPExcel = new PHPExcel();
$objWorksheet = $objPHPExcel->getActiveSheet();
$objWorksheet->fromArray(
    array(
        array('',   2010,   2011,   2012),
        array('Q1',   12,   15,     21),
        array('Q2',   56,   73,     86),
        array('Q3',   52,   61,     69),
        array('Q4',   30,   32,     0),
    )
);

a) Mysql または b) Excel から $objWorksheet->fromArray を作成するにはどうすればよいでしょうか。

SQL の場合、データベース内のすべてのテーブルに対してこのクエリを実行する必要があります。

$sql = "SELECT Functional_Area, Passed__Status, Blocked__Status, Failed__StatusFROM $tbl_name WHERE 1;

コンテキスト: 複数の機能領域があり、それぞれに合格/失敗/ブロックの値が異なります。機能領域ごとに 1 つのグラフが必要です。平均して、各テーブルごとに 14 の機能領域があります。

次に、機能領域ごとに円グラフ (または棒グラフ、私はうるさいわけではありません) を作成します。

オプション 2) エクセル

私はすでにExcelでデータを言っているので、次のデータを入力する必要があります。

ここに画像の説明を入力

ここでも、ROW ごとに 1 つのグラフが作成されます (ROW 5 (FA = EPG) は 1 つのグラフになり、ROW 6 (FA = VOD) は別のグラフになります...)。

これは、ワークシートごとに繰り返す必要があります...

これまでの私の試みは以下のとおりです。これにより、ワークシートごとにグラフが生成されます(これは良いです)が、空です(良くありません)。

foreach (glob("*.xls") as $f) 
{
    $inputFileName = $f;    
    echo "Found $inputFileName <br/>";  
}


//  Read your Excel workbook

        $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
        $objReader = PHPExcel_IOFactory::createReader($inputFileType);
        $objPHPExcel = $objReader->load($inputFileName);
        $i = 0;
        foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) 
            {
                $arrayData[$worksheet->getTitle()] = $worksheet->toArray();
                echo "Title: ".$worksheet->getTitle()."<br/>"; 
                $wsTitle = $worksheet->getTitle();

                $objWorksheet = $objPHPExcel->setActiveSheetIndexByName($wsTitle);

                $highestRow         = $worksheet->getHighestRow(); // e.g. 10
                $endofData = $highestRow -1;
                $highestColumn      = $worksheet->getHighestColumn(); // e.g 'F'
                $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
                $colNumberStart = PHPExcel_Cell::columnIndexFromString("D");
                $BeforeTOT = $colNumberStart - 2;            
                $TOT = $colNumberStart - 1;             
                echo "Highest Row is ==> $highestRow <br/>End of Data - header is $endofData <br/> Highest Col is ==>  $highestColumn <br/> Start col is ==> $colNumberStart and Highest Col end is ==> $highestColumnIndex <br/>";




                //  Set the Labels for each data series we want to plot
                //      Datatype
                //      Cell reference for data
                //      Format Code
                //      Number of datapoints in series
                //      Data values
                //      Data Marker
                ${'dataseriesLabels' . $i} = array(
                    new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$4', null, 1),   //  2010
                    new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$G$4', null, 1),   //  2011
                    new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$H$4', null, 1),   //  2012
                    new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$I$4', null, 1),   //  2012
                );

                displayArray(${'dataseriesLabels' . $i});
                //  Set the X-Axis Labels
                //      Datatype
                //      Cell reference for data
                //      Format Code
                //      Number of datapoints in series
                //      Data values
                //      Data Marker
                ${'xAxisTickValues' . $i} = array(
                    new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$4:$H$4', null, 19), //  Q1 to Q4
                );
                displayArray(${'xAxisTickValues' . $i});
                //  Set the Data values for each data series we want to plot
                //      Datatype
                //      Cell reference for data
                //      Format Code
                //      Number of datapoints in series
                //      Data values
                //      Data Marker
                ${'dataSeriesValues' . $i} = array(
                    new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$G$5:$I$5', null, 4),  
                );
                displayArray(${'dataSeriesValues' . $i});
                //  Build the dataseries
                ${'series' . $i} = new PHPExcel_Chart_DataSeries(
                    PHPExcel_Chart_DataSeries::TYPE_PIECHART,               // plotType
                    PHPExcel_Chart_DataSeries::GROUPING_PERCENT_STACKED,    // plotGrouping
                    range(0, count(${'dataseriesLabels' . $i})-1),                  // plotOrder
                    ${'dataseriesLabels' . $i},                                     // plotLabel
                    ${'xAxisTickValues' . $i},                                      // plotCategory
                    ${'dataSeriesValues' . $i}                                      // plotValues
                );

                displayArray(${'series' . $i});
                //  Set the series in the plot area
                ${'plotarea' . $i} = new PHPExcel_Chart_PlotArea(null, array(${'series' . $i}));
                //  Set the chart legend
                ${'legend' . $i} = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_TOPRIGHT, null, false);
                ${'title' . $i} = new PHPExcel_Chart_Title('Test %age-Stacked Area Chart');
                ${'yAxisLabel' . $i} = new PHPExcel_Chart_Title('Value ($k)');
                //  Create the chart
                ${'chart' . $i} = new PHPExcel_Chart(
                    'chart1',       // name
                    ${'title' . $i},        // title
                    ${'legend' . $i},       // legend
                    ${'plotarea' . $i},     // plotArea
                    true,           // plotVisibleOnly
                    0,              // displayBlanksAs
                    null,           // xAxisLabel
                    ${'yAxisLabel' . $i}    // yAxisLabel
                );
                //  Set the position where the chart should appear in the worksheet
                ${'chart' . $i}->setTopLeftPosition('A7');
                ${'chart' . $i}->setBottomRightPosition('H20');
                //  Add the chart to the worksheet
                $objWorksheet->addChart(${'chart' . $i});
                //  Set the Labels for each data series we want to plot
                //      Datatype
                //      Cell reference for data
                //      Format Code
                //      Number of datapoints in series
                //      Data values
                //      Data Marker

                // Save Excel 2007 file
                echo date('H:i:s') , " Write to Excel2007 format" , EOL;
                $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
                $objWriter->setIncludeCharts(TRUE);
                $objWriter->save(str_replace('.php', '.xlsx', __FILE__));
                echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
                // Echo memory peak usage
                echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
                // Echo done
                echo date('H:i:s') , " Done writing file" , EOL;
                echo 'File has been created in ' , getcwd() , EOL;
                $i++;
}
4

1 に答える 1

0

フェラ、私はさらに調査を行い、いくつかの答えにたどり着きました。

a. データが Excel にある場合、Mysql からクエリを実行する必要はありません b. これは、以前に入力されたワークシートから積み上げ棒グラフを作成する際に 100% の確率で機能するスニペットです。

                //  Set the Labels for each data series we want to plot
                //      Datatype
                //      Cell reference for data
                //      Format Code
                //      Number of datapoints in series
                //      Data values
                //      Data Marker
                $dataseriesLabels1 = array(
                    new PHPExcel_Chart_DataSeriesValues('String', 'report!$E$4', NULL, 4),    //  Jan to Dec
                    new PHPExcel_Chart_DataSeriesValues('String', 'report!$F$4', NULL, 4),    //  Jan to Dec
                    new PHPExcel_Chart_DataSeriesValues('String', 'report!$G$4', NULL, 4)    //  Jan to Dec
                );

                //  Set the X-Axis Labels
                //      Datatype
                //      Cell reference for data
                //      Format Code
                //      Number of datapoints in series
                //      Data values
                //      Data Marker

                $xAxisTickValues = array(
                    new PHPExcel_Chart_DataSeriesValues('String', 'report!$C$4:$C$20', NULL, 4)    //  Jan to Dec    
                );

                //  Set the Data values for each data series we want to plot
                //      Datatype
                //      Cell reference for data
                //      Format Code
                //      Number of datapoints in series
                //      Data values
                //      Data Marker
                $dataSeriesValues1 = array(
                    new PHPExcel_Chart_DataSeriesValues('Number', 'report!$E$5:$E$20', NULL, 16),
                    new PHPExcel_Chart_DataSeriesValues('Number', 'report!$F$5:$F$20', NULL, 16),
                    new PHPExcel_Chart_DataSeriesValues('Number', 'report!$G$5:$G$20', NULL, 16)
                );

                //  Build the dataseries
                $series1 = new PHPExcel_Chart_DataSeries(
                    PHPExcel_Chart_DataSeries::TYPE_BARCHART,        // plotType
                    PHPExcel_Chart_DataSeries::GROUPING_STACKED,    // plotGrouping
                    range(0, count($dataSeriesValues1)-1),          // plotOrder
                    $dataseriesLabels1,                             // plotLabel
                    $xAxisTickValues,                               // plotCategory
                    $dataSeriesValues1                              // plotValues
                );
                //  Set additional dataseries parameters
                //      Make it a vertical column rather than a horizontal bar graph
                $series1->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL);

                //  Set the series in the plot area
                $plotarea = new PHPExcel_Chart_PlotArea(NULL, array($series1));
                //  Set the chart legend
                $legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);

                $title = new PHPExcel_Chart_Title('Average Weather Chart for Crete');


                //  Create the chart
                $chart = new PHPExcel_Chart(
                    'chart1',       // name
                    $title,         // title
                    $legend,        // legend
                    $plotarea,      // plotArea
                    true,           // plotVisibleOnly
                    0,              // displayBlanksAs
                    NULL,           // xAxisLabel
                    NULL            // yAxisLabel
                );

                //  Set the position where the chart should appear in the worksheet
                $chart->setTopLeftPosition('F2');
                $chart->setBottomRightPosition('O16');

                //  Add the chart to the worksheet
                $objWorksheet->addChart($chart);




                // Instantiate a Writer to create an OfficeOpenXML Excel .xlsx file
                $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel); 
                $objWriter->setIncludeCharts(true);

d. したがって、グラフ作成を自動化するには、プロセスは次のようになります: d1. d2 からデータを取得するために必要なワークシートを開きます。ラベル、x および y 軸 d3 の値を読み取るかハードコーディングします。Chart 要素 d4 を作成します。上記の要素を投稿する必要があります。

これが、PHPExcel+Graphs で頭痛の種を抱えている他の貧弱なコーダーに役立つことを願っています

================================================== ========================

25/9 更新

配列を動的に構築しようとしていますが、少し失敗しています。

  Fellas, question.

私は今、これを動的に作成しようとしています。つまり、ビルドします。

   $dataseriesLabels1 = "array(";

   foreach ($Labels as $k => $s) 
   {
     echo "Parsing $s <br/>";
     $dataseriesLabels1 .= "new PHPExcel_Chart_DataSeriesValues('String', ".$s.", NULL, 4),";
     // echo "We have $dataseriesLabels1 in this loop <br/>";
   }
   $dataseriesLabels1 = rtrim($dataseriesLabels1, "," );
   $dataseriesLabels1 .= ");";

    echo "BUilt : $dataseriesLabels1 <br/>";

それは私のために作成するので、これはすべて良いです:

   array(new PHPExcel_Chart_DataSeriesValues('String', 'Sprint!$D$4:$D$16', NULL, 4),new PHPExcel_Chart_DataSeriesValues('String', 'Sprint!$E$4:$E$16', NULL, 4),new PHPExcel_Chart_DataSeriesValues('String', 'Sprint!$F$4:$F$16', NULL, 4),new PHPExcel_Chart_DataSeriesValues('String', 'Sprint!$G$4:$G$16', NULL, 4),new PHPExcel_Chart_DataSeriesValues('String', 'Sprint!$H$4:$H$16', NULL, 4));

残念ながら、これは配列ではなく文字列として解釈されるため、チャートの生成は失敗します:/

アイデア?

于 2015-09-22T12:52:59.410 に答える