5
5
use PhpOffice \PhpSpreadsheet \Helper \Dimension ;
6
6
use PhpOffice \PhpSpreadsheet \Shared \XMLWriter ;
7
7
use PhpOffice \PhpSpreadsheet \Style \Alignment ;
8
+ use PhpOffice \PhpSpreadsheet \Style \Border ;
9
+ use PhpOffice \PhpSpreadsheet \Style \Borders ;
8
10
use PhpOffice \PhpSpreadsheet \Style \Fill ;
9
11
use PhpOffice \PhpSpreadsheet \Style \Font ;
10
12
use PhpOffice \PhpSpreadsheet \Style \Style as CellStyle ;
@@ -65,6 +67,80 @@ private function writeFillStyle(Fill $fill): void
65
67
}
66
68
}
67
69
70
+ private function writeBordersStyle (Borders $ borders ): void
71
+ {
72
+ $ this ->writeBorderStyle ('bottom ' , $ borders ->getBottom ());
73
+ $ this ->writeBorderStyle ('left ' , $ borders ->getLeft ());
74
+ $ this ->writeBorderStyle ('right ' , $ borders ->getRight ());
75
+ $ this ->writeBorderStyle ('top ' , $ borders ->getTop ());
76
+ }
77
+
78
+ private function writeBorderStyle (string $ direction , Border $ border ): void
79
+ {
80
+ if ($ border ->getBorderStyle () === Border::BORDER_NONE ) {
81
+ return ;
82
+ }
83
+
84
+ $ this ->writer ->writeAttribute ('fo:border- ' . $ direction , sprintf (
85
+ '%s %s #%s ' ,
86
+ $ this ->mapBorderWidth ($ border ),
87
+ $ this ->mapBorderStyle ($ border ),
88
+ $ border ->getColor ()->getRGB (),
89
+ ));
90
+ }
91
+
92
+ private function mapBorderWidth (Border $ border ): string
93
+ {
94
+ switch ($ border ->getBorderStyle ()) {
95
+ case Border::BORDER_THIN :
96
+ case Border::BORDER_DASHED :
97
+ case Border::BORDER_DASHDOT :
98
+ case Border::BORDER_DASHDOTDOT :
99
+ case Border::BORDER_DOTTED :
100
+ case Border::BORDER_HAIR :
101
+ return '0.75pt ' ;
102
+ case Border::BORDER_MEDIUM :
103
+ case Border::BORDER_MEDIUMDASHED :
104
+ case Border::BORDER_MEDIUMDASHDOT :
105
+ case Border::BORDER_MEDIUMDASHDOTDOT :
106
+ case Border::BORDER_SLANTDASHDOT :
107
+ return '1.75pt ' ;
108
+ case Border::BORDER_DOUBLE :
109
+ case Border::BORDER_THICK :
110
+ return '2.5pt ' ;
111
+ }
112
+
113
+ return '1pt ' ;
114
+ }
115
+
116
+ private function mapBorderStyle (Border $ border ): string
117
+ {
118
+ switch ($ border ->getBorderStyle ()) {
119
+ case Border::BORDER_DOTTED :
120
+ case Border::BORDER_MEDIUMDASHDOTDOT :
121
+ return Border::BORDER_DOTTED ;
122
+
123
+ case Border::BORDER_DASHED :
124
+ case Border::BORDER_DASHDOT :
125
+ case Border::BORDER_DASHDOTDOT :
126
+ case Border::BORDER_MEDIUMDASHDOT :
127
+ case Border::BORDER_MEDIUMDASHED :
128
+ case Border::BORDER_SLANTDASHDOT :
129
+ return Border::BORDER_DASHED ;
130
+
131
+ case Border::BORDER_DOUBLE :
132
+ return Border::BORDER_DOUBLE ;
133
+
134
+ case Border::BORDER_HAIR :
135
+ case Border::BORDER_MEDIUM :
136
+ case Border::BORDER_THICK :
137
+ case Border::BORDER_THIN :
138
+ return 'solid ' ;
139
+ }
140
+
141
+ return 'solid ' ;
142
+ }
143
+
68
144
private function writeCellProperties (CellStyle $ style ): void
69
145
{
70
146
// Align
@@ -87,6 +163,9 @@ private function writeCellProperties(CellStyle $style): void
87
163
// Fill
88
164
$ this ->writeFillStyle ($ style ->getFill ());
89
165
166
+ // Border
167
+ $ this ->writeBordersStyle ($ style ->getBorders ());
168
+
90
169
$ this ->writer ->endElement ();
91
170
92
171
if (!empty ($ hAlign )) {
0 commit comments