Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?phpdeclare(strict_types=1);namespace OpenSpout\Writer\Common\Entity;use OpenSpout\Writer\AutoFilter;use OpenSpout\Writer\Common\ColumnWidth;use OpenSpout\Writer\Common\Manager\SheetManager;use OpenSpout\Writer\Exception\InvalidSheetNameException;use OpenSpout\Writer\XLSX\Entity\SheetView;/*** External representation of a worksheet.*/final class Sheet{public const DEFAULT_SHEET_NAME_PREFIX = 'Sheet';/** @var 0|positive-int Index of the sheet, based on order in the workbook (zero-based) */private readonly int $index;/** @var string ID of the sheet's associated workbook. Used to restrict sheet name uniqueness enforcement to a single workbook */private readonly string $associatedWorkbookId;/** @var string Name of the sheet */private string $name;/** @var bool Visibility of the sheet */private bool $isVisible;/** @var SheetManager Sheet manager */private readonly SheetManager $sheetManager;private ?SheetView $sheetView = null;/** @var 0|positive-int */private int $writtenRowCount = 0;private ?AutoFilter $autoFilter = null;/** @var ColumnWidth[] Array of min-max-width arrays */private array $COLUMN_WIDTHS = [];/** @var string rows to repeat at top */private ?string $printTitleRows = null;/*** @param 0|positive-int $sheetIndex Index of the sheet, based on order in the workbook (zero-based)* @param string $associatedWorkbookId ID of the sheet's associated workbook* @param SheetManager $sheetManager To manage sheets*/public function __construct(int $sheetIndex, string $associatedWorkbookId, SheetManager $sheetManager){$this->index = $sheetIndex;$this->associatedWorkbookId = $associatedWorkbookId;$this->sheetManager = $sheetManager;$this->sheetManager->markWorkbookIdAsUsed($associatedWorkbookId);$this->setName(self::DEFAULT_SHEET_NAME_PREFIX.($sheetIndex + 1));$this->setIsVisible(true);}/*** @return 0|positive-int Index of the sheet, based on order in the workbook (zero-based)*/public function getIndex(): int{return $this->index;}public function getAssociatedWorkbookId(): string{return $this->associatedWorkbookId;}/*** @return string Name of the sheet*/public function getName(): string{return $this->name;}/*** Sets the name of the sheet. Note that Excel has some restrictions on the name:* - it should not be blank* - it should not exceed 31 characters* - it should not contain these characters: \ / ? * : [ or ]* - it should be unique.** @param string $name Name of the sheet** @throws InvalidSheetNameException if the sheet's name is invalid*/public function setName(string $name): self{$this->sheetManager->throwIfNameIsInvalid($name, $this);$this->name = $name;$this->sheetManager->markSheetNameAsUsed($this);return $this;}/*** @return bool isVisible Visibility of the sheet*/public function isVisible(): bool{return $this->isVisible;}/*** @param bool $isVisible Visibility of the sheet*/public function setIsVisible(bool $isVisible): self{$this->isVisible = $isVisible;return $this;}/*** @return $this*/public function setSheetView(SheetView $sheetView): self{$this->sheetView = $sheetView;return $this;}public function getSheetView(): ?SheetView{return $this->sheetView;}/*** @internal*/public function incrementWrittenRowCount(): void{++$this->writtenRowCount;}/*** @return 0|positive-int*/public function getWrittenRowCount(): int{return $this->writtenRowCount;}/*** @return $this*/public function setAutoFilter(?AutoFilter $autoFilter): self{$this->autoFilter = $autoFilter;return $this;}public function getAutoFilter(): ?AutoFilter{return $this->autoFilter;}/*** @param positive-int ...$columns One or more columns with this width*/public function setColumnWidth(float $width, int ...$columns): void{// Gather sequences$sequence = [];foreach ($columns as $column) {$sequenceLength = \count($sequence);if ($sequenceLength > 0) {$previousValue = $sequence[$sequenceLength - 1];if ($column !== $previousValue + 1) {$this->setColumnWidthForRange($width, $sequence[0], $previousValue);$sequence = [];}}$sequence[] = $column;}$this->setColumnWidthForRange($width, $sequence[0], $sequence[\count($sequence) - 1]);}/*** @param float $width The width to set* @param positive-int $start First column index of the range* @param positive-int $end Last column index of the range*/public function setColumnWidthForRange(float $width, int $start, int $end): void{$this->COLUMN_WIDTHS[] = new ColumnWidth($start, $end, $width);}/*** @internal** @return ColumnWidth[]*/public function getColumnWidths(): array{return $this->COLUMN_WIDTHS;}public function getPrintTitleRows(): ?string{return $this->printTitleRows;}public function setPrintTitleRows(string $printTitleRows): void{$this->printTitleRows = $printTitleRows;}}