chengkun
2025-09-12 b21e53f16f228d3192eb54178f081395878b2406
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php
 
namespace PhpOffice\PhpSpreadsheet\Worksheet;
 
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\Helper\Dimension as CssDimension;
 
class ColumnDimension extends Dimension
{
    /**
     * Column index.
     */
    private ?string $columnIndex;
 
    /**
     * Column width.
     *
     * When this is set to a negative value, the column width should be ignored by IWriter
     */
    private float $width = -1;
 
    /**
     * Auto size?
     */
    private bool $autoSize = false;
 
    /**
     * Create a new ColumnDimension.
     *
     * @param ?string $index Character column index
     */
    public function __construct(?string $index = 'A')
    {
        // Initialise values
        $this->columnIndex = $index;
 
        // set dimension as unformatted by default
        parent::__construct(0);
    }
 
    /**
     * Get column index as string eg: 'A'.
     */
    public function getColumnIndex(): ?string
    {
        return $this->columnIndex;
    }
 
    /**
     * Set column index as string eg: 'A'.
     */
    public function setColumnIndex(string $index): self
    {
        $this->columnIndex = $index;
 
        return $this;
    }
 
    /**
     * Get column index as numeric.
     */
    public function getColumnNumeric(): int
    {
        return Coordinate::columnIndexFromString($this->columnIndex ?? '');
    }
 
    /**
     * Set column index as numeric.
     */
    public function setColumnNumeric(int $index): self
    {
        $this->columnIndex = Coordinate::stringFromColumnIndex($index);
 
        return $this;
    }
 
    /**
     * Get Width.
     *
     * Each unit of column width is equal to the width of one character in the default font size. A value of -1
     *      tells Excel to display this column in its default width.
     * By default, this will be the return value; but this method also accepts an optional unit of measure argument
     *    and will convert the returned value to the specified UoM..
     */
    public function getWidth(?string $unitOfMeasure = null): float
    {
        return ($unitOfMeasure === null || $this->width < 0)
            ? $this->width
            : (new CssDimension((string) $this->width))->toUnit($unitOfMeasure);
    }
 
    /**
     * Set Width.
     *
     * Each unit of column width is equal to the width of one character in the default font size. A value of -1
     *      tells Excel to display this column in its default width.
     * By default, this will be the unit of measure for the passed value; but this method also accepts an
     *    optional unit of measure argument, and will convert the value from the specified UoM using an
     *    approximation method.
     *
     * @return $this
     */
    public function setWidth(float $width, ?string $unitOfMeasure = null): static
    {
        $this->width = ($unitOfMeasure === null || $width < 0)
            ? $width
            : (new CssDimension("{$width}{$unitOfMeasure}"))->width();
 
        return $this;
    }
 
    /**
     * Get Auto Size.
     */
    public function getAutoSize(): bool
    {
        return $this->autoSize;
    }
 
    /**
     * Set Auto Size.
     *
     * @return $this
     */
    public function setAutoSize(bool $autosizeEnabled): static
    {
        $this->autoSize = $autosizeEnabled;
 
        return $this;
    }
}