当前路径:Classes/PHPExcel/Worksheet.php <?php /** * PHPExcel_Worksheet * * 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_Worksheet * @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_Worksheet implements PHPExcel_IComparable { /* Break types */ const BREAK_NONE = 0; const BREAK_ROW = 1; const BREAK_COLUMN = 2; /* Sheet state */ const SHEETSTATE_VISIBLE = 'visible'; const SHEETSTATE_HIDDEN = 'hidden'; const SHEETSTATE_VERYHIDDEN = 'veryHidden'; /** * Invalid characters in sheet title * * @var array */ private static $invalidCharacters = array('*', ':', '/', '\\', '?', '[', ']'); /** * Parent spreadsheet * * @var PHPExcel */ private $parent; /** * Cacheable collection of cells * * @var PHPExcel_CachedObjectStorage_xxx */ private $cellCollection; /** * Collection of row dimensions * * @var PHPExcel_Worksheet_RowDimension[] */ private $rowDimensions = array(); /** * Default row dimension * * @var PHPExcel_Worksheet_RowDimension */ private $defaultRowDimension; /** * Collection of column dimensions * * @var PHPExcel_Worksheet_ColumnDimension[] */ private $columnDimensions = array(); /** * Default column dimension * * @var PHPExcel_Worksheet_ColumnDimension */ private $defaultColumnDimension = null; /** * Collection of drawings * * @var PHPExcel_Worksheet_BaseDrawing[] */ private $drawingCollection = null; /** * Collection of Chart objects * * @var PHPExcel_Chart[] */ private $chartCollection = array(); /** * Worksheet title * * @var string */ private $title; /** * Sheet state * * @var string */ private $sheetState; /** * Page setup * * @var PHPExcel_Worksheet_PageSetup */ private $pageSetup; /** * Page margins * * @var PHPExcel_Worksheet_PageMargins */ private $pageMargins; /** * Page header/footer * * @var PHPExcel_Worksheet_HeaderFooter */ private $headerFooter; /** * Sheet view * * @var PHPExcel_Worksheet_SheetView */ private $sheetView; /** * Protection * * @var PHPExcel_Worksheet_Protection */ private $protection; /** * Collection of styles * * @var PHPExcel_Style[] */ private $styles = array(); /** * Conditional styles. Indexed by cell coordinate, e.g. 'A1' * * @var array */ private $conditionalStylesCollection = array(); /** * Is the current cell collection sorted already? * * @var boolean */ private $cellCollectionIsSorted = false; /** * Collection of breaks * * @var array */ private $breaks = array(); /** * Collection of merged cell ranges * * @var array */ private $mergeCells = array(); /** * Collection of protected cell ranges * * @var array */ private $protectedCells = array(); /** * Autofilter Range and selection * * @var PHPExcel_Worksheet_AutoFilter */ private $autoFilter; /** * Freeze pane * * @var string */ private $freezePane = ''; /** * Show gridlines? * * @var boolean */ private $showGridlines = true; /** * Print gridlines? * * @var boolean */ private $printGridlines = false; /** * Show row and column headers? * * @var boolean */ private $showRowColHeaders = true; /** * Show summary below? (Row/Column outline) * * @var boolean */ private $showSummaryBelow = true; /** * Show summary right? (Row/Column outline) * * @var boolean */ private $showSummaryRight = true; /** * Collection of comments * * @var PHPExcel_Comment[] */ private $comments = array(); /** * Active cell. (Only one!) * * @var string */ private $activeCell = 'A1'; /** * Selected cells * * @var string */ private $selectedCells = 'A1'; /** * Cached highest column * * @var string */ private $cachedHighestColumn = 'A'; /** * Cached highest row * * @var int */ private $cachedHighestRow = 1; /** * Right-to-left? * * @var boolean */ private $rightToLeft = false; /** * Hyperlinks. Indexed by cell coordinate, e.g. 'A1' * * @var array */ private $hyperlinkCollection = array(); /** * Data validation objects. Indexed by cell coordinate, e.g. 'A1' * * @var array */ private $dataValidationCollection = array(); /** * Tab color * * @var PHPExcel_Style_Color */ private $tabColor; /** * Dirty flag * * @var boolean */ private $dirty = true; /** * Hash * * @var string */ private $hash; /** * CodeName * * @var string */ private $codeName = null; /** * Create a new worksheet * * @param PHPExcel $pParent * @param string $pTitle */ public function __construct(PHPExcel $pParent = null, $pTitle = 'Worksheet') { // Set parent and title $this->parent = $pParent; $this->setTitle($pTitle, false); // setTitle can change $pTitle $this->setCodeName($this->getTitle()); $this->setSheetState(PHPExcel_Worksheet::SHEETSTATE_VISIBLE); $this->cellCollection = PHPExcel_CachedObjectStorageFactory::getInstance($this); // Set page setup $this->pageSetup = new PHPExcel_Worksheet_PageSetup(); // Set page margins $this->pageMargins = new PHPExcel_Worksheet_PageMargins(); // Set page header/footer $this->headerFooter = new PHPExcel_Worksheet_HeaderFooter(); // Set sheet view $this->sheetView = new PHPExcel_Worksheet_SheetView(); // Drawing collection $this->drawingCollection = new ArrayObject(); // Chart collection $this->chartCollection = new ArrayObject(); // Protection $this->protection = new PHPExcel_Worksheet_Protection(); // Default row dimension $this->defaultRowDimension = new PHPExcel_Worksheet_RowDimension(null); // Default column dimension $this->defaultColumnDimension = new PHPExcel_Worksheet_ColumnDimension(null); $this->autoFilter = new PHPExcel_Worksheet_AutoFilter(null, $this); } /** * Disconnect all cells from this PHPExcel_Worksheet object, * typically so that the worksheet object can be unset * */ public function disconnectCells() { if ($this->cellCollection !== null) { $this->cellCollection->unsetWorksheetCells(); $this->cellCollection = null; } // detach ourself from the workbook, so that it can then delete this worksheet successfully $this->parent = null; } /** * Code to execute when this worksheet is unset() * */ public function __destruct() { PHPExcel_Calculation::getInstance($this->parent)->clearCalculationCacheForWorksheet($this->title); $this->disconnectCells(); } /** * Return the cache controller for the cell collection * * @return PHPExcel_CachedObjectStorage_xxx */ public function getCellCacheController() { return $this->cellCollection; } /** * Get array of invalid characters for sheet title * * @return array */ public static function getInvalidCharacters() { return self::$invalidCharacters; } /** * Check sheet code name for valid Excel syntax * * @param string $pValue The string to check * @return string The valid string * @throws Exception */ private static function checkSheetCodeName($pValue) { $CharCount = PHPExcel_Shared_String::CountCharacters($pValue); if ($CharCount == 0) { throw new PHPExcel_Exception('Sheet code name cannot be empty.'); } // Some of the printable ASCII characters are invalid: * : / \ ? [ ] and first and last characters cannot be a "'" if ((str_replace(self::$invalidCharacters, '', $pValue) !== $pValue) || (PHPExcel_Shared_String::Substring($pValue, -1, 1)=='\'') || (PHPExcel_Shared_String::Substring($pValue, 0, 1)=='\'')) { throw new PHPExcel_Exception('Invalid character found in sheet code name'); } // Maximum 31 characters allowed for sheet title if ($CharCount > 31) { throw new PHPExcel_Exception('Maximum 31 characters allowed in sheet code name.'); } return $pValue; } /** * Check sheet title for valid Excel syntax * * @param string $pValue The string to check * @return string The valid string * @throws PHPExcel_Exception */ private static function checkSheetTitle($pValue) { // Some of the printable ASCII characters are invalid: * : / \ ? [ ] if (str_replace(self::$invalidCharacters, '', $pValue) !== $pValue) { throw new PHPExcel_Exception('Invalid character found in sheet title'); } // Maximum 31 characters allowed for sheet title if (PHPExcel_Shared_String::CountCharacters($pValue) > 31) { throw new PHPExcel_Exception('Maximum 31 characters allowed in sheet title.'); } return $pValue; } /** * Get collection of cells * * @param boolean $pSorted Also sort the cell collection? * @return PHPExcel_Cell[] */ public function getCellCollection($pSorted = true) { if ($pSorted) { // Re-order cell collection return $this->sortCellCollection(); } if ($this->cellCollection !== null) { return $this->cellCollection->getCellList(); } return array(); } /** * Sort collection of cells * * @return PHPExcel_Worksheet */ public function sortCellCollection() { if ($this->cellCollection !== null) { return $this->cellCollection->getSortedCellList(); } return array(); } /** * Get collection of row dimensions * * @return PHPExcel_Worksheet_RowDimension[] */ public function getRowDimensions() { return $this->rowDimensions; } /** * Get default row dimension * * @return PHPExcel_Worksheet_RowDimension */ public function getDefaultRowDimension() { return $this->defaultRowDimension; } /** * Get collection of column dimensions * * @return PHPExcel_Worksheet_ColumnDimension[] */ public function getColumnDimensions() { return $this->columnDimensions; } /** * Get default column dimension * * @return PHPExcel_Worksheet_ColumnDimension */ public function getDefaultColumnDimension() { return $this->defaultColumnDimension; } /** * Get collection of drawings * * @return PHPExcel_Worksheet_BaseDrawing[] */ public function getDrawingCollection() { return $this->drawingCollection; } /** * Get collection of charts * * @return PHPExcel_Chart[] */ public function getChartCollection() { return $this->chartCollection; } /** * Add chart * * @param PHPExcel_Chart $pChart * @param int|null $iChartIndex Index where chart should go (0,1,..., or null for last) * @return PHPExcel_Chart */ public function addChart(PHPExcel_Chart $pChart = null, $iChartIndex = null) { $pChart->setWorksheet($this); if (is_null($iChartIndex)) { $this->chartCollection[] = $pChart; } else { // Insert the chart at the requested index array_splice($this->chartCollection, $iChartIndex, 0, array($pChart)); } return $pChart; } /** * Return the count of charts on this worksheet * * @return int The number of charts */ public function getChartCount() { return count($this->chartCollection); } /** * Get a chart by its index position * * @param string $index Chart index position * @return false|PHPExcel_Chart * @throws PHPExcel_Exception */ public function getChartByIndex($index = null) { $chartCount = count($this->chartCollection); if ($chartCount == 0) { return false; } if (is_null($index)) { $index = --$chartCount; } if (!isset($this->chartCollection[$index])) { return false; } return $this->chartCollection[$index]; } /** * Return an array of the names of charts on this worksheet * * @return string[] The names of charts * @throws PHPExcel_Exception */ public function getChartNames() { $chartNames = array(); foreach ($this->chartCollection as $chart) { $chartNames[] = $chart->getName(); } return $chartNames; } /** * Get a chart by name * * @param string $chartName Chart name * @return false|PHPExcel_Chart * @throws PHPExcel_Exception */ public function getChartByName($chartName = '') { $chartCount = count($this->chartCollection); if ($chartCount == 0) { return false; } foreach ($this->chartCollection as $index => $chart) { if ($chart->getName() == $chartName) { return $this->chartCollection[$index]; } } return false; } /** * Refresh column dimensions * * @return PHPExcel_Worksheet */ public function refreshColumnDimensions() { $currentColumnDimensions = $this->getColumnDimensions(); $newColumnDimensions = array(); foreach ($currentColumnDimensions as $objColumnDimension) { $newColumnDimensions[$objColumnDimension->getColumnIndex()] = $objColumnDimension; } $this->columnDimensions = $newColumnDimensions; return $this; } /** * Refresh row dimensions * * @return PHPExcel_Worksheet */ public function refreshRowDimensions() { $currentRowDimensions = $this->getRowDimensions(); $newRowDimensions = array(); foreach ($currentRowDimensions as $objRowDimension) { $newRowDimensions[$objRowDimension->getRowIndex()] = $objRowDimension; } $this->rowDimensions = $newRowDimensions; return $this; } /** * Calculate worksheet dimension * * @return string String containing the dimension of this worksheet */ public function calculateWorksheetDimension() { // Return return 'A1' . ':' . $this->getHighestColumn() . $this->getHighestRow(); } /** * Calculate worksheet data dimension * * @return string String containing the dimension of this worksheet that actually contain data */ public function calculateWorksheetDataDimension() { // Return return 'A1' . ':' . $this->getHighestDataColumn() . $this->getHighestDataRow(); } /** * Calculate widths for auto-size columns * * @param boolean $calculateMergeCells Calculate merge cell width * @return PHPExcel_Worksheet; */ public function calculateColumnWidths($calculateMergeCells = false) { // initialize $autoSizes array $autoSizes = array(); foreach ($this->getColumnDimensions() as $colDimension) { if ($colDimension->getAutoSize()) { $autoSizes[$colDimension->getColumnIndex()] = -1; } } // There is only something to do if there are some auto-size columns if (!empty($autoSizes)) { // build list of cells references that participate in a merge $isMergeCell = array(); foreach ($this->getMergeCells() as $cells) { foreach (PHPExcel_Cell::extractAllCellReferencesInRange($cells) as $cellReference) { $isMergeCell[$cellReference] = true; } } // loop through all cells in the worksheet foreach ($this->getCellCollection(false) as $cellID) { $cell = $this->getCell($cellID, false); if ($cell !== null && isset($autoSizes[$this->cellCollection->getCurrentColumn()])) { // Determine width if cell does not participate in a merge if (!isset($isMergeCell[$this->cellCollection->getCurrentAddress()])) { // Calculated value // To formatted string $cellValue = PHPExcel_Style_NumberFormat::toFormattedString( $cell->getCalculatedValue(), $this->getParent()->getCellXfByIndex($cell->getXfIndex())->getNumberFormat()->getFormatCode() ); $autoSizes[$this->cellCollection->getCurrentColumn()] = max( (float) $autoSizes[$this->cellCollection->getCurrentColumn()], (float...
完整源码文件,请先购买后再查看
相关源码
- 基于SPRINGBOOT质量管理系统2023-12-06
- 基于SPRINGBOOT小学教学辅助平台2023-12-05
- 基于SSM实体专辑购物系统2023-12-04
- 电器设备企业网站模板源码2023-11-16
- PYTHON基于网络爬虫的的个性化新闻推荐系统(含论文)源码2023-10-07
- JAVA_SSM农产品仓库管理系统源码(含论文)源码2023-10-07
关于我们 | 顾问团队 | 发展历程 | 联系我们 | 源码上传
联系电话(Tel):4008-010-151(免长途)
地址:北京市海淀区大恒科技大厦五层 邮编:100080
Floor 5th,Daheng Building,Zhongguancun,Beijing,China,100080
51Aspx.com 版权所有 CopyRight © 2006-2023. 京ICP备09089570号 | 京公网安备11010702000869号
联系电话(Tel):4008-010-151(免长途)
地址:北京市海淀区大恒科技大厦五层 邮编:100080
Floor 5th,Daheng Building,Zhongguancun,Beijing,China,100080
51Aspx.com 版权所有 CopyRight © 2006-2023. 京ICP备09089570号 | 京公网安备11010702000869号