For God so loved the world, that He gave His only begotten Son, that all who believe in Him should not perish but have everlasting life
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.

680 lines
14 KiB

  1. <?php
  2. /**
  3. * PHPExcel_Chart
  4. *
  5. * Copyright (c) 2006 - 2015 PHPExcel
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * This library is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this library; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. *
  21. * @category PHPExcel
  22. * @package PHPExcel_Chart
  23. * @copyright Copyright (c) 2006 - 2015 PHPExcel (http://www.codeplex.com/PHPExcel)
  24. * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
  25. * @version ##VERSION##, ##DATE##
  26. */
  27. class PHPExcel_Chart
  28. {
  29. /**
  30. * Chart Name
  31. *
  32. * @var string
  33. */
  34. private $name = '';
  35. /**
  36. * Worksheet
  37. *
  38. * @var PHPExcel_Worksheet
  39. */
  40. private $worksheet;
  41. /**
  42. * Chart Title
  43. *
  44. * @var PHPExcel_Chart_Title
  45. */
  46. private $title;
  47. /**
  48. * Chart Legend
  49. *
  50. * @var PHPExcel_Chart_Legend
  51. */
  52. private $legend;
  53. /**
  54. * X-Axis Label
  55. *
  56. * @var PHPExcel_Chart_Title
  57. */
  58. private $xAxisLabel;
  59. /**
  60. * Y-Axis Label
  61. *
  62. * @var PHPExcel_Chart_Title
  63. */
  64. private $yAxisLabel;
  65. /**
  66. * Chart Plot Area
  67. *
  68. * @var PHPExcel_Chart_PlotArea
  69. */
  70. private $plotArea;
  71. /**
  72. * Plot Visible Only
  73. *
  74. * @var boolean
  75. */
  76. private $plotVisibleOnly = true;
  77. /**
  78. * Display Blanks as
  79. *
  80. * @var string
  81. */
  82. private $displayBlanksAs = '0';
  83. /**
  84. * Chart Asix Y as
  85. *
  86. * @var PHPExcel_Chart_Axis
  87. */
  88. private $yAxis;
  89. /**
  90. * Chart Asix X as
  91. *
  92. * @var PHPExcel_Chart_Axis
  93. */
  94. private $xAxis;
  95. /**
  96. * Chart Major Gridlines as
  97. *
  98. * @var PHPExcel_Chart_GridLines
  99. */
  100. private $majorGridlines;
  101. /**
  102. * Chart Minor Gridlines as
  103. *
  104. * @var PHPExcel_Chart_GridLines
  105. */
  106. private $minorGridlines;
  107. /**
  108. * Top-Left Cell Position
  109. *
  110. * @var string
  111. */
  112. private $topLeftCellRef = 'A1';
  113. /**
  114. * Top-Left X-Offset
  115. *
  116. * @var integer
  117. */
  118. private $topLeftXOffset = 0;
  119. /**
  120. * Top-Left Y-Offset
  121. *
  122. * @var integer
  123. */
  124. private $topLeftYOffset = 0;
  125. /**
  126. * Bottom-Right Cell Position
  127. *
  128. * @var string
  129. */
  130. private $bottomRightCellRef = 'A1';
  131. /**
  132. * Bottom-Right X-Offset
  133. *
  134. * @var integer
  135. */
  136. private $bottomRightXOffset = 10;
  137. /**
  138. * Bottom-Right Y-Offset
  139. *
  140. * @var integer
  141. */
  142. private $bottomRightYOffset = 10;
  143. /**
  144. * Create a new PHPExcel_Chart
  145. */
  146. 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)
  147. {
  148. $this->name = $name;
  149. $this->title = $title;
  150. $this->legend = $legend;
  151. $this->xAxisLabel = $xAxisLabel;
  152. $this->yAxisLabel = $yAxisLabel;
  153. $this->plotArea = $plotArea;
  154. $this->plotVisibleOnly = $plotVisibleOnly;
  155. $this->displayBlanksAs = $displayBlanksAs;
  156. $this->xAxis = $xAxis;
  157. $this->yAxis = $yAxis;
  158. $this->majorGridlines = $majorGridlines;
  159. $this->minorGridlines = $minorGridlines;
  160. }
  161. /**
  162. * Get Name
  163. *
  164. * @return string
  165. */
  166. public function getName()
  167. {
  168. return $this->name;
  169. }
  170. /**
  171. * Get Worksheet
  172. *
  173. * @return PHPExcel_Worksheet
  174. */
  175. public function getWorksheet()
  176. {
  177. return $this->worksheet;
  178. }
  179. /**
  180. * Set Worksheet
  181. *
  182. * @param PHPExcel_Worksheet $pValue
  183. * @throws PHPExcel_Chart_Exception
  184. * @return PHPExcel_Chart
  185. */
  186. public function setWorksheet(PHPExcel_Worksheet $pValue = null)
  187. {
  188. $this->worksheet = $pValue;
  189. return $this;
  190. }
  191. /**
  192. * Get Title
  193. *
  194. * @return PHPExcel_Chart_Title
  195. */
  196. public function getTitle()
  197. {
  198. return $this->title;
  199. }
  200. /**
  201. * Set Title
  202. *
  203. * @param PHPExcel_Chart_Title $title
  204. * @return PHPExcel_Chart
  205. */
  206. public function setTitle(PHPExcel_Chart_Title $title)
  207. {
  208. $this->title = $title;
  209. return $this;
  210. }
  211. /**
  212. * Get Legend
  213. *
  214. * @return PHPExcel_Chart_Legend
  215. */
  216. public function getLegend()
  217. {
  218. return $this->legend;
  219. }
  220. /**
  221. * Set Legend
  222. *
  223. * @param PHPExcel_Chart_Legend $legend
  224. * @return PHPExcel_Chart
  225. */
  226. public function setLegend(PHPExcel_Chart_Legend $legend)
  227. {
  228. $this->legend = $legend;
  229. return $this;
  230. }
  231. /**
  232. * Get X-Axis Label
  233. *
  234. * @return PHPExcel_Chart_Title
  235. */
  236. public function getXAxisLabel()
  237. {
  238. return $this->xAxisLabel;
  239. }
  240. /**
  241. * Set X-Axis Label
  242. *
  243. * @param PHPExcel_Chart_Title $label
  244. * @return PHPExcel_Chart
  245. */
  246. public function setXAxisLabel(PHPExcel_Chart_Title $label)
  247. {
  248. $this->xAxisLabel = $label;
  249. return $this;
  250. }
  251. /**
  252. * Get Y-Axis Label
  253. *
  254. * @return PHPExcel_Chart_Title
  255. */
  256. public function getYAxisLabel()
  257. {
  258. return $this->yAxisLabel;
  259. }
  260. /**
  261. * Set Y-Axis Label
  262. *
  263. * @param PHPExcel_Chart_Title $label
  264. * @return PHPExcel_Chart
  265. */
  266. public function setYAxisLabel(PHPExcel_Chart_Title $label)
  267. {
  268. $this->yAxisLabel = $label;
  269. return $this;
  270. }
  271. /**
  272. * Get Plot Area
  273. *
  274. * @return PHPExcel_Chart_PlotArea
  275. */
  276. public function getPlotArea()
  277. {
  278. return $this->plotArea;
  279. }
  280. /**
  281. * Get Plot Visible Only
  282. *
  283. * @return boolean
  284. */
  285. public function getPlotVisibleOnly()
  286. {
  287. return $this->plotVisibleOnly;
  288. }
  289. /**
  290. * Set Plot Visible Only
  291. *
  292. * @param boolean $plotVisibleOnly
  293. * @return PHPExcel_Chart
  294. */
  295. public function setPlotVisibleOnly($plotVisibleOnly = true)
  296. {
  297. $this->plotVisibleOnly = $plotVisibleOnly;
  298. return $this;
  299. }
  300. /**
  301. * Get Display Blanks as
  302. *
  303. * @return string
  304. */
  305. public function getDisplayBlanksAs()
  306. {
  307. return $this->displayBlanksAs;
  308. }
  309. /**
  310. * Set Display Blanks as
  311. *
  312. * @param string $displayBlanksAs
  313. * @return PHPExcel_Chart
  314. */
  315. public function setDisplayBlanksAs($displayBlanksAs = '0')
  316. {
  317. $this->displayBlanksAs = $displayBlanksAs;
  318. }
  319. /**
  320. * Get yAxis
  321. *
  322. * @return PHPExcel_Chart_Axis
  323. */
  324. public function getChartAxisY()
  325. {
  326. if ($this->yAxis !== null) {
  327. return $this->yAxis;
  328. }
  329. return new PHPExcel_Chart_Axis();
  330. }
  331. /**
  332. * Get xAxis
  333. *
  334. * @return PHPExcel_Chart_Axis
  335. */
  336. public function getChartAxisX()
  337. {
  338. if ($this->xAxis !== null) {
  339. return $this->xAxis;
  340. }
  341. return new PHPExcel_Chart_Axis();
  342. }
  343. /**
  344. * Get Major Gridlines
  345. *
  346. * @return PHPExcel_Chart_GridLines
  347. */
  348. public function getMajorGridlines()
  349. {
  350. if ($this->majorGridlines !== null) {
  351. return $this->majorGridlines;
  352. }
  353. return new PHPExcel_Chart_GridLines();
  354. }
  355. /**
  356. * Get Minor Gridlines
  357. *
  358. * @return PHPExcel_Chart_GridLines
  359. */
  360. public function getMinorGridlines()
  361. {
  362. if ($this->minorGridlines !== null) {
  363. return $this->minorGridlines;
  364. }
  365. return new PHPExcel_Chart_GridLines();
  366. }
  367. /**
  368. * Set the Top Left position for the chart
  369. *
  370. * @param string $cell
  371. * @param integer $xOffset
  372. * @param integer $yOffset
  373. * @return PHPExcel_Chart
  374. */
  375. public function setTopLeftPosition($cell, $xOffset = null, $yOffset = null)
  376. {
  377. $this->topLeftCellRef = $cell;
  378. if (!is_null($xOffset)) {
  379. $this->setTopLeftXOffset($xOffset);
  380. }
  381. if (!is_null($yOffset)) {
  382. $this->setTopLeftYOffset($yOffset);
  383. }
  384. return $this;
  385. }
  386. /**
  387. * Get the top left position of the chart
  388. *
  389. * @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell
  390. */
  391. public function getTopLeftPosition()
  392. {
  393. return array(
  394. 'cell' => $this->topLeftCellRef,
  395. 'xOffset' => $this->topLeftXOffset,
  396. 'yOffset' => $this->topLeftYOffset
  397. );
  398. }
  399. /**
  400. * Get the cell address where the top left of the chart is fixed
  401. *
  402. * @return string
  403. */
  404. public function getTopLeftCell()
  405. {
  406. return $this->topLeftCellRef;
  407. }
  408. /**
  409. * Set the Top Left cell position for the chart
  410. *
  411. * @param string $cell
  412. * @return PHPExcel_Chart
  413. */
  414. public function setTopLeftCell($cell)
  415. {
  416. $this->topLeftCellRef = $cell;
  417. return $this;
  418. }
  419. /**
  420. * Set the offset position within the Top Left cell for the chart
  421. *
  422. * @param integer $xOffset
  423. * @param integer $yOffset
  424. * @return PHPExcel_Chart
  425. */
  426. public function setTopLeftOffset($xOffset = null, $yOffset = null)
  427. {
  428. if (!is_null($xOffset)) {
  429. $this->setTopLeftXOffset($xOffset);
  430. }
  431. if (!is_null($yOffset)) {
  432. $this->setTopLeftYOffset($yOffset);
  433. }
  434. return $this;
  435. }
  436. /**
  437. * Get the offset position within the Top Left cell for the chart
  438. *
  439. * @return integer[]
  440. */
  441. public function getTopLeftOffset()
  442. {
  443. return array(
  444. 'X' => $this->topLeftXOffset,
  445. 'Y' => $this->topLeftYOffset
  446. );
  447. }
  448. public function setTopLeftXOffset($xOffset)
  449. {
  450. $this->topLeftXOffset = $xOffset;
  451. return $this;
  452. }
  453. public function getTopLeftXOffset()
  454. {
  455. return $this->topLeftXOffset;
  456. }
  457. public function setTopLeftYOffset($yOffset)
  458. {
  459. $this->topLeftYOffset = $yOffset;
  460. return $this;
  461. }
  462. public function getTopLeftYOffset()
  463. {
  464. return $this->topLeftYOffset;
  465. }
  466. /**
  467. * Set the Bottom Right position of the chart
  468. *
  469. * @param string $cell
  470. * @param integer $xOffset
  471. * @param integer $yOffset
  472. * @return PHPExcel_Chart
  473. */
  474. public function setBottomRightPosition($cell, $xOffset = null, $yOffset = null)
  475. {
  476. $this->bottomRightCellRef = $cell;
  477. if (!is_null($xOffset)) {
  478. $this->setBottomRightXOffset($xOffset);
  479. }
  480. if (!is_null($yOffset)) {
  481. $this->setBottomRightYOffset($yOffset);
  482. }
  483. return $this;
  484. }
  485. /**
  486. * Get the bottom right position of the chart
  487. *
  488. * @return array an associative array containing the cell address, X-Offset and Y-Offset from the top left of that cell
  489. */
  490. public function getBottomRightPosition()
  491. {
  492. return array(
  493. 'cell' => $this->bottomRightCellRef,
  494. 'xOffset' => $this->bottomRightXOffset,
  495. 'yOffset' => $this->bottomRightYOffset
  496. );
  497. }
  498. public function setBottomRightCell($cell)
  499. {
  500. $this->bottomRightCellRef = $cell;
  501. return $this;
  502. }
  503. /**
  504. * Get the cell address where the bottom right of the chart is fixed
  505. *
  506. * @return string
  507. */
  508. public function getBottomRightCell()
  509. {
  510. return $this->bottomRightCellRef;
  511. }
  512. /**
  513. * Set the offset position within the Bottom Right cell for the chart
  514. *
  515. * @param integer $xOffset
  516. * @param integer $yOffset
  517. * @return PHPExcel_Chart
  518. */
  519. public function setBottomRightOffset($xOffset = null, $yOffset = null)
  520. {
  521. if (!is_null($xOffset)) {
  522. $this->setBottomRightXOffset($xOffset);
  523. }
  524. if (!is_null($yOffset)) {
  525. $this->setBottomRightYOffset($yOffset);
  526. }
  527. return $this;
  528. }
  529. /**
  530. * Get the offset position within the Bottom Right cell for the chart
  531. *
  532. * @return integer[]
  533. */
  534. public function getBottomRightOffset()
  535. {
  536. return array(
  537. 'X' => $this->bottomRightXOffset,
  538. 'Y' => $this->bottomRightYOffset
  539. );
  540. }
  541. public function setBottomRightXOffset($xOffset)
  542. {
  543. $this->bottomRightXOffset = $xOffset;
  544. return $this;
  545. }
  546. public function getBottomRightXOffset()
  547. {
  548. return $this->bottomRightXOffset;
  549. }
  550. public function setBottomRightYOffset($yOffset)
  551. {
  552. $this->bottomRightYOffset = $yOffset;
  553. return $this;
  554. }
  555. public function getBottomRightYOffset()
  556. {
  557. return $this->bottomRightYOffset;
  558. }
  559. public function refresh()
  560. {
  561. if ($this->worksheet !== null) {
  562. $this->plotArea->refresh($this->worksheet);
  563. }
  564. }
  565. public function render($outputDestination = null)
  566. {
  567. $libraryName = PHPExcel_Settings::getChartRendererName();
  568. if (is_null($libraryName)) {
  569. return false;
  570. }
  571. // Ensure that data series values are up-to-date before we render
  572. $this->refresh();
  573. $libraryPath = PHPExcel_Settings::getChartRendererPath();
  574. $includePath = str_replace('\\', '/', get_include_path());
  575. $rendererPath = str_replace('\\', '/', $libraryPath);
  576. if (strpos($rendererPath, $includePath) === false) {
  577. set_include_path(get_include_path() . PATH_SEPARATOR . $libraryPath);
  578. }
  579. $rendererName = 'PHPExcel_Chart_Renderer_'.$libraryName;
  580. $renderer = new $rendererName($this);
  581. if ($outputDestination == 'php://output') {
  582. $outputDestination = null;
  583. }
  584. return $renderer->render($outputDestination);
  585. }
  586. }