You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
681 lines
14 KiB
681 lines
14 KiB
4 years ago
|
<?php
|
||
|
|
||
|
/**
|
||
|
* PHPExcel_Chart
|
||
|
*
|
||
|
* Copyright (c) 2006 - 2015 PHPExcel
|
||
|
*
|
||
|
* This library is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU Lesser General Public
|
||
|
* License as published by the Free Software Foundation; either
|
||
|
* version 2.1 of the License, or (at your option) any later version.
|
||
|
*
|
||
|
* This library is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
|
* Lesser General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Lesser General Public
|
||
|
* License along with this library; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||
|
*
|
||
|
* @category PHPExcel
|
||
|
* @package PHPExcel_Chart
|
||
|
* @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
|
||
|
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
|
||
|
* @version ##VERSION##, ##DATE##
|
||
|
*/
|
||
|
class PHPExcel_Chart
|
||
|
{
|
||
|
/**
|
||
|
* Chart Name
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $name = '';
|
||
|
|
||
|
/**
|
||
|
* Worksheet
|
||
|
*
|
||
|
* @var PHPExcel_Worksheet
|
||
|
*/
|
||
|
private $worksheet;
|
||
|
|
||
|
/**
|
||
|
* Chart Title
|
||
|
*
|
||
|
* @var PHPExcel_Chart_Title
|
||
|
*/
|
||
|
private $title;
|
||
|
|
||
|
/**
|
||
|
* Chart Legend
|
||
|
*
|
||
|
* @var PHPExcel_Chart_Legend
|
||
|
*/
|
||
|
private $legend;
|
||
|
|
||
|
/**
|
||
|
* X-Axis Label
|
||
|
*
|
||
|
* @var PHPExcel_Chart_Title
|
||
|
*/
|
||
|
private $xAxisLabel;
|
||
|
|
||
|
/**
|
||
|
* Y-Axis Label
|
||
|
*
|
||
|
* @var PHPExcel_Chart_Title
|
||
|
*/
|
||
|
private $yAxisLabel;
|
||
|
|
||
|
/**
|
||
|
* Chart Plot Area
|
||
|
*
|
||
|
* @var PHPExcel_Chart_PlotArea
|
||
|
*/
|
||
|
private $plotArea;
|
||
|
|
||
|
/**
|
||
|
* Plot Visible Only
|
||
|
*
|
||
|
* @var boolean
|
||
|
*/
|
||
|
private $plotVisibleOnly = true;
|
||
|
|
||
|
/**
|
||
|
* Display Blanks as
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $displayBlanksAs = '0';
|
||
|
|
||
|
/**
|
||
|
* Chart Asix Y as
|
||
|
*
|
||
|
* @var PHPExcel_Chart_Axis
|
||
|
*/
|
||
|
private $yAxis;
|
||
|
|
||
|
/**
|
||
|
* Chart Asix X as
|
||
|
*
|
||
|
* @var PHPExcel_Chart_Axis
|
||
|
*/
|
||
|
private $xAxis;
|
||
|
|
||
|
/**
|
||
|
* Chart Major Gridlines as
|
||
|
*
|
||
|
* @var PHPExcel_Chart_GridLines
|
||
|
*/
|
||
|
private $majorGridlines;
|
||
|
|
||
|
/**
|
||
|
* Chart Minor Gridlines as
|
||
|
*
|
||
|
* @var PHPExcel_Chart_GridLines
|
||
|
*/
|
||
|
private $minorGridlines;
|
||
|
|
||
|
/**
|
||
|
* Top-Left Cell Position
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $topLeftCellRef = 'A1';
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Top-Left X-Offset
|
||
|
*
|
||
|
* @var integer
|
||
|
*/
|
||
|
private $topLeftXOffset = 0;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Top-Left Y-Offset
|
||
|
*
|
||
|
* @var integer
|
||
|
*/
|
||
|
private $topLeftYOffset = 0;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Bottom-Right Cell Position
|
||
|
*
|
||
|
* @var string
|
||
|
*/
|
||
|
private $bottomRightCellRef = 'A1';
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Bottom-Right X-Offset
|
||
|
*
|
||
|
* @var integer
|
||
|
*/
|
||
|
private $bottomRightXOffset = 10;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Bottom-Right Y-Offset
|
||
|
*
|
||
|
* @var integer
|
||
|
*/
|
||
|
private $bottomRightYOffset = 10;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Create a new PHPExcel_Chart
|
||
|
*/
|
||
|
public function __construct($name, PHPExcel_Chart_Title $title = null, PHPExcel_Chart_Legend $legend = null, PHPExcel_Chart_PlotArea $plotArea = null, $plotVisibleOnly = true, $displayBlanksAs = '0', PHPExcel_Chart_Title $xAxisLabel = null, PHPExcel_Chart_Title $yAxisLabel = null, PHPExcel_Chart_Axis $xAxis = null, PHPExcel_Chart_Axis $yAxis = null, PHPExcel_Chart_GridLines $majorGridlines = null, PHPExcel_Chart_GridLines $minorGridlines = null)
|
||
|
{
|
||
|
$this->name = $name;
|
||
|
$this->title = $title;
|
||
|
$this->legend = $legend;
|
||
|
$this->xAxisLabel = $xAxisLabel;
|
||
|
$this->yAxisLabel = $yAxisLabel;
|
||
|
$this->plotArea = $plotArea;
|
||
|
$this->plotVisibleOnly = $plotVisibleOnly;
|
||
|
$this->displayBlanksAs = $displayBlanksAs;
|
||
|
$this->xAxis = $xAxis;
|
||
|
$this->yAxis = $yAxis;
|
||
|
$this->majorGridlines = $majorGridlines;
|
||
|
$this->minorGridlines = $minorGridlines;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Name
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getName()
|
||
|
{
|
||
|
return $this->name;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Worksheet
|
||
|
*
|
||
|
* @return PHPExcel_Worksheet
|
||
|
*/
|
||
|
public function getWorksheet()
|
||
|
{
|
||
|
return $this->worksheet;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set Worksheet
|
||
|
*
|
||
|
* @param PHPExcel_Worksheet $pValue
|
||
|
* @throws PHPExcel_Chart_Exception
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setWorksheet(PHPExcel_Worksheet $pValue = null)
|
||
|
{
|
||
|
$this->worksheet = $pValue;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Title
|
||
|
*
|
||
|
* @return PHPExcel_Chart_Title
|
||
|
*/
|
||
|
public function getTitle()
|
||
|
{
|
||
|
return $this->title;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set Title
|
||
|
*
|
||
|
* @param PHPExcel_Chart_Title $title
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setTitle(PHPExcel_Chart_Title $title)
|
||
|
{
|
||
|
$this->title = $title;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Legend
|
||
|
*
|
||
|
* @return PHPExcel_Chart_Legend
|
||
|
*/
|
||
|
public function getLegend()
|
||
|
{
|
||
|
return $this->legend;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set Legend
|
||
|
*
|
||
|
* @param PHPExcel_Chart_Legend $legend
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setLegend(PHPExcel_Chart_Legend $legend)
|
||
|
{
|
||
|
$this->legend = $legend;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get X-Axis Label
|
||
|
*
|
||
|
* @return PHPExcel_Chart_Title
|
||
|
*/
|
||
|
public function getXAxisLabel()
|
||
|
{
|
||
|
return $this->xAxisLabel;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set X-Axis Label
|
||
|
*
|
||
|
* @param PHPExcel_Chart_Title $label
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setXAxisLabel(PHPExcel_Chart_Title $label)
|
||
|
{
|
||
|
$this->xAxisLabel = $label;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Y-Axis Label
|
||
|
*
|
||
|
* @return PHPExcel_Chart_Title
|
||
|
*/
|
||
|
public function getYAxisLabel()
|
||
|
{
|
||
|
return $this->yAxisLabel;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set Y-Axis Label
|
||
|
*
|
||
|
* @param PHPExcel_Chart_Title $label
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setYAxisLabel(PHPExcel_Chart_Title $label)
|
||
|
{
|
||
|
$this->yAxisLabel = $label;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Plot Area
|
||
|
*
|
||
|
* @return PHPExcel_Chart_PlotArea
|
||
|
*/
|
||
|
public function getPlotArea()
|
||
|
{
|
||
|
return $this->plotArea;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Plot Visible Only
|
||
|
*
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public function getPlotVisibleOnly()
|
||
|
{
|
||
|
return $this->plotVisibleOnly;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set Plot Visible Only
|
||
|
*
|
||
|
* @param boolean $plotVisibleOnly
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setPlotVisibleOnly($plotVisibleOnly = true)
|
||
|
{
|
||
|
$this->plotVisibleOnly = $plotVisibleOnly;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Display Blanks as
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getDisplayBlanksAs()
|
||
|
{
|
||
|
return $this->displayBlanksAs;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set Display Blanks as
|
||
|
*
|
||
|
* @param string $displayBlanksAs
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setDisplayBlanksAs($displayBlanksAs = '0')
|
||
|
{
|
||
|
$this->displayBlanksAs = $displayBlanksAs;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Get yAxis
|
||
|
*
|
||
|
* @return PHPExcel_Chart_Axis
|
||
|
*/
|
||
|
public function getChartAxisY()
|
||
|
{
|
||
|
if ($this->yAxis !== null) {
|
||
|
return $this->yAxis;
|
||
|
}
|
||
|
|
||
|
return new PHPExcel_Chart_Axis();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get xAxis
|
||
|
*
|
||
|
* @return PHPExcel_Chart_Axis
|
||
|
*/
|
||
|
public function getChartAxisX()
|
||
|
{
|
||
|
if ($this->xAxis !== null) {
|
||
|
return $this->xAxis;
|
||
|
}
|
||
|
|
||
|
return new PHPExcel_Chart_Axis();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Major Gridlines
|
||
|
*
|
||
|
* @return PHPExcel_Chart_GridLines
|
||
|
*/
|
||
|
public function getMajorGridlines()
|
||
|
{
|
||
|
if ($this->majorGridlines !== null) {
|
||
|
return $this->majorGridlines;
|
||
|
}
|
||
|
|
||
|
return new PHPExcel_Chart_GridLines();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get Minor Gridlines
|
||
|
*
|
||
|
* @return PHPExcel_Chart_GridLines
|
||
|
*/
|
||
|
public function getMinorGridlines()
|
||
|
{
|
||
|
if ($this->minorGridlines !== null) {
|
||
|
return $this->minorGridlines;
|
||
|
}
|
||
|
|
||
|
return new PHPExcel_Chart_GridLines();
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Set the Top Left position for the chart
|
||
|
*
|
||
|
* @param string $cell
|
||
|
* @param integer $xOffset
|
||
|
* @param integer $yOffset
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setTopLeftPosition($cell, $xOffset = null, $yOffset = null)
|
||
|
{
|
||
|
$this->topLeftCellRef = $cell;
|
||
|
if (!is_null($xOffset)) {
|
||
|
$this->setTopLeftXOffset($xOffset);
|
||
|
}
|
||
|
if (!is_null($yOffset)) {
|
||
|
$this->setTopLeftYOffset($yOffset);
|
||
|
}
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the top left position of the chart
|
||
|
*
|
||
|
* @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell
|
||
|
*/
|
||
|
public function getTopLeftPosition()
|
||
|
{
|
||
|
return array(
|
||
|
'cell' => $this->topLeftCellRef,
|
||
|
'xOffset' => $this->topLeftXOffset,
|
||
|
'yOffset' => $this->topLeftYOffset
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the cell address where the top left of the chart is fixed
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getTopLeftCell()
|
||
|
{
|
||
|
return $this->topLeftCellRef;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the Top Left cell position for the chart
|
||
|
*
|
||
|
* @param string $cell
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setTopLeftCell($cell)
|
||
|
{
|
||
|
$this->topLeftCellRef = $cell;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the offset position within the Top Left cell for the chart
|
||
|
*
|
||
|
* @param integer $xOffset
|
||
|
* @param integer $yOffset
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setTopLeftOffset($xOffset = null, $yOffset = null)
|
||
|
{
|
||
|
if (!is_null($xOffset)) {
|
||
|
$this->setTopLeftXOffset($xOffset);
|
||
|
}
|
||
|
if (!is_null($yOffset)) {
|
||
|
$this->setTopLeftYOffset($yOffset);
|
||
|
}
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the offset position within the Top Left cell for the chart
|
||
|
*
|
||
|
* @return integer[]
|
||
|
*/
|
||
|
public function getTopLeftOffset()
|
||
|
{
|
||
|
return array(
|
||
|
'X' => $this->topLeftXOffset,
|
||
|
'Y' => $this->topLeftYOffset
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public function setTopLeftXOffset($xOffset)
|
||
|
{
|
||
|
$this->topLeftXOffset = $xOffset;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
public function getTopLeftXOffset()
|
||
|
{
|
||
|
return $this->topLeftXOffset;
|
||
|
}
|
||
|
|
||
|
public function setTopLeftYOffset($yOffset)
|
||
|
{
|
||
|
$this->topLeftYOffset = $yOffset;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
public function getTopLeftYOffset()
|
||
|
{
|
||
|
return $this->topLeftYOffset;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the Bottom Right position of the chart
|
||
|
*
|
||
|
* @param string $cell
|
||
|
* @param integer $xOffset
|
||
|
* @param integer $yOffset
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setBottomRightPosition($cell, $xOffset = null, $yOffset = null)
|
||
|
{
|
||
|
$this->bottomRightCellRef = $cell;
|
||
|
if (!is_null($xOffset)) {
|
||
|
$this->setBottomRightXOffset($xOffset);
|
||
|
}
|
||
|
if (!is_null($yOffset)) {
|
||
|
$this->setBottomRightYOffset($yOffset);
|
||
|
}
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the bottom right position of the chart
|
||
|
*
|
||
|
* @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell
|
||
|
*/
|
||
|
public function getBottomRightPosition()
|
||
|
{
|
||
|
return array(
|
||
|
'cell' => $this->bottomRightCellRef,
|
||
|
'xOffset' => $this->bottomRightXOffset,
|
||
|
'yOffset' => $this->bottomRightYOffset
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public function setBottomRightCell($cell)
|
||
|
{
|
||
|
$this->bottomRightCellRef = $cell;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the cell address where the bottom right of the chart is fixed
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getBottomRightCell()
|
||
|
{
|
||
|
return $this->bottomRightCellRef;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set the offset position within the Bottom Right cell for the chart
|
||
|
*
|
||
|
* @param integer $xOffset
|
||
|
* @param integer $yOffset
|
||
|
* @return PHPExcel_Chart
|
||
|
*/
|
||
|
public function setBottomRightOffset($xOffset = null, $yOffset = null)
|
||
|
{
|
||
|
if (!is_null($xOffset)) {
|
||
|
$this->setBottomRightXOffset($xOffset);
|
||
|
}
|
||
|
if (!is_null($yOffset)) {
|
||
|
$this->setBottomRightYOffset($yOffset);
|
||
|
}
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the offset position within the Bottom Right cell for the chart
|
||
|
*
|
||
|
* @return integer[]
|
||
|
*/
|
||
|
public function getBottomRightOffset()
|
||
|
{
|
||
|
return array(
|
||
|
'X' => $this->bottomRightXOffset,
|
||
|
'Y' => $this->bottomRightYOffset
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public function setBottomRightXOffset($xOffset)
|
||
|
{
|
||
|
$this->bottomRightXOffset = $xOffset;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
public function getBottomRightXOffset()
|
||
|
{
|
||
|
return $this->bottomRightXOffset;
|
||
|
}
|
||
|
|
||
|
public function setBottomRightYOffset($yOffset)
|
||
|
{
|
||
|
$this->bottomRightYOffset = $yOffset;
|
||
|
|
||
|
return $this;
|
||
|
}
|
||
|
|
||
|
public function getBottomRightYOffset()
|
||
|
{
|
||
|
return $this->bottomRightYOffset;
|
||
|
}
|
||
|
|
||
|
|
||
|
public function refresh()
|
||
|
{
|
||
|
if ($this->worksheet !== null) {
|
||
|
$this->plotArea->refresh($this->worksheet);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function render($outputDestination = null)
|
||
|
{
|
||
|
$libraryName = PHPExcel_Settings::getChartRendererName();
|
||
|
if (is_null($libraryName)) {
|
||
|
return false;
|
||
|
}
|
||
|
// Ensure that data series values are up-to-date before we render
|
||
|
$this->refresh();
|
||
|
|
||
|
$libraryPath = PHPExcel_Settings::getChartRendererPath();
|
||
|
$includePath = str_replace('\\', '/', get_include_path());
|
||
|
$rendererPath = str_replace('\\', '/', $libraryPath);
|
||
|
if (strpos($rendererPath, $includePath) === false) {
|
||
|
set_include_path(get_include_path() . PATH_SEPARATOR . $libraryPath);
|
||
|
}
|
||
|
|
||
|
$rendererName = 'PHPExcel_Chart_Renderer_'.$libraryName;
|
||
|
$renderer = new $rendererName($this);
|
||
|
|
||
|
if ($outputDestination == 'php://output') {
|
||
|
$outputDestination = null;
|
||
|
}
|
||
|
return $renderer->render($outputDestination);
|
||
|
}
|
||
|
}
|