File Source for Comments.php

PHPExcel_Writer_Excel2007

# Source for file Comments.php

Documentation is available at Comments.php

1. <?php
2. /**
3. * PHPExcel
4. *
5. * Copyright (c) 2006 - 2011 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_Writer_Excel2007
23. * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
24. * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
25. * @version 1.7.6, 2011-02-27
26. */
29. /**
30. * PHPExcel_Writer_Excel2007_Comments
31. *
32. * @category PHPExcel
33. * @package PHPExcel_Writer_Excel2007
34. * @copyright Copyright (c) 2006 - 2011 PHPExcel (http://www.codeplex.com/PHPExcel)
35. */
36. class PHPExcel_Writer_Excel2007_Comments extends PHPExcel_Writer_Excel2007_WriterPart
37. {
38. /**
39. * Write comments to XML format
40. *
41. * @param PHPExcel_Worksheet $pWorksheet
42. * @return string XML Output
43. * @throws Exception
44. */
45. public function writeComments(PHPExcel_Worksheet $pWorksheet = null)
46. {
47. // Create XML writer
48. $objWriter = null;
49. if ($this-> getParentWriter()->getUseDiskCaching()) {
50. $objWriter = new PHPExcel_Shared_XMLWriter( PHPExcel_Shared_XMLWriter:: STORAGE_DISK, $this-> getParentWriter()->getDiskCachingDirectory());
51. } else {
52. $objWriter = new PHPExcel_Shared_XMLWriter( PHPExcel_Shared_XMLWriter:: STORAGE_MEMORY);
53. }
55. // XML header
56. $objWriter->startDocument('1.0','UTF-8','yes');
58. // Comments cache
59. $comments = $pWorksheet->getComments();
61. // Authors cache
62. $authors = array();
63. $authorId = 0;
64. foreach ($comments as $comment) {
65. if (!isset($authors[$comment->getAuthor()])) {
66. $authors[$comment->getAuthor()] = $authorId++;
67. }
68. }
70. // comments
71. $objWriter->startElement('comments');
72. $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/spreadsheetml/2006/main');
74. // Loop through authors
75. $objWriter->startElement('authors');
76. foreach ($authors as $author => $index) {
77. $objWriter->writeElement('author', $author);
78. }
79. $objWriter->endElement();
81. // Loop through comments
82. $objWriter->startElement('commentList');
83. foreach ($comments as $key => $value) {
84. $this->_writeComment($objWriter, $key, $value, $authors);
85. }
86. $objWriter->endElement();
88. $objWriter->endElement();
90. // Return
91. return $objWriter->getData();
92. }
94. /**
95. * Write comment to XML format
96. *
97. * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
98. * @param string $pCellReference Cell reference
99. * @param PHPExcel_Comment $pComment Comment
100. * @param array $pAuthors Array of authors
101. * @throws Exception
102. */
103. public function _writeComment(PHPExcel_Shared_XMLWriter $objWriter = null, $pCellReference = 'A1', PHPExcel_Comment $pComment = null, $pAuthors = null)
104. {
105. // comment
106. $objWriter->startElement('comment');
107. $objWriter->writeAttribute('ref', $pCellReference);
108. $objWriter->writeAttribute('authorId', $pAuthors[$pComment->getAuthor()]);
110. // text
111. $objWriter->startElement('text');
112. $this-> getParentWriter()->getWriterPart('stringtable')->writeRichText($objWriter, $pComment->getText());
113. $objWriter->endElement();
115. $objWriter->endElement();
116. }
118. /**
119. * Write VML comments to XML format
120. *
121. * @param PHPExcel_Worksheet $pWorksheet
122. * @return string XML Output
123. * @throws Exception
124. */
125. public function writeVMLComments(PHPExcel_Worksheet $pWorksheet = null)
126. {
127. // Create XML writer
128. $objWriter = null;
129. if ($this-> getParentWriter()->getUseDiskCaching()) {
130. $objWriter = new PHPExcel_Shared_XMLWriter( PHPExcel_Shared_XMLWriter:: STORAGE_DISK, $this-> getParentWriter()->getDiskCachingDirectory());
131. } else {
132. $objWriter = new PHPExcel_Shared_XMLWriter( PHPExcel_Shared_XMLWriter:: STORAGE_MEMORY);
133. }
135. // XML header
136. $objWriter->startDocument('1.0','UTF-8','yes');
138. // Comments cache
139. $comments = $pWorksheet->getComments();
141. // xml
142. $objWriter->startElement('xml');
143. $objWriter->writeAttribute('xmlns:v', 'urn:schemas-microsoft-com:vml');
144. $objWriter->writeAttribute('xmlns:o', 'urn:schemas-microsoft-com:office:office');
145. $objWriter->writeAttribute('xmlns:x', 'urn:schemas-microsoft-com:office:excel');
147. // o:shapelayout
148. $objWriter->startElement('o:shapelayout');
149. $objWriter->writeAttribute('v:ext', 'edit');
151. // o:idmap
152. $objWriter->startElement('o:idmap');
153. $objWriter->writeAttribute('v:ext', 'edit');
154. $objWriter->writeAttribute('data', '1');
155. $objWriter->endElement();
157. $objWriter->endElement();
159. // v:shapetype
160. $objWriter->startElement('v:shapetype');
161. $objWriter->writeAttribute('id', '_x0000_t202');
162. $objWriter->writeAttribute('coordsize', '21600,21600');
163. $objWriter->writeAttribute('o:spt', '202');
164. $objWriter->writeAttribute('path', 'm,l,21600r21600,l21600,xe');
166. // v:stroke
167. $objWriter->startElement('v:stroke');
168. $objWriter->writeAttribute('joinstyle', 'miter');
169. $objWriter->endElement();
171. // v:path
172. $objWriter->startElement('v:path');
173. $objWriter->writeAttribute('gradientshapeok', 't');
174. $objWriter->writeAttribute('o:connecttype', 'rect');
175. $objWriter->endElement();
177. $objWriter->endElement();
179. // Loop through comments
180. foreach ($comments as $key => $value) {
181. $this->_writeVMLComment($objWriter, $key, $value);
182. }
184. $objWriter->endElement();
186. // Return
187. return $objWriter->getData();
188. }
190. /**
191. * Write VML comment to XML format
192. *
193. * @param PHPExcel_Shared_XMLWriter $objWriter XML Writer
194. * @param string $pCellReference Cell reference
195. * @param PHPExcel_Comment $pComment Comment
196. * @throws Exception
197. */
198. public function _writeVMLComment(PHPExcel_Shared_XMLWriter $objWriter = null, $pCellReference = 'A1', PHPExcel_Comment $pComment = null)
199. {
200. // Metadata
201. list($column, $row) = PHPExcel_Cell:: coordinateFromString($pCellReference);
202. $column = PHPExcel_Cell:: columnIndexFromString($column);
203. $id = 1024 + $column + $row;
204. $id = substr($id, 0, 4);
206. // v:shape
207. $objWriter->startElement('v:shape');
208. $objWriter->writeAttribute('id', '_x0000_s' . $id);
209. $objWriter->writeAttribute('type', '#_x0000_t202');
210. $objWriter->writeAttribute('style', 'position:absolute;margin-left:' . $pComment->getMarginLeft() . ';margin-top:' . $pComment->getMarginTop() . ';width:' . $pComment->getWidth() . ';height:' . $pComment->getHeight() . ';z-index:1;visibility:' . ($pComment->getVisible() ? 'visible' : 'hidden'));
211. $objWriter->writeAttribute('fillcolor', '#' . $pComment->getFillColor()->getRGB());
212. $objWriter->writeAttribute('o:insetmode', 'auto');
214. // v:fill
215. $objWriter->startElement('v:fill');
216. $objWriter->writeAttribute('color2', '#' . $pComment->getFillColor()->getRGB());
217. $objWriter->endElement();
219. // v:shadow
220. $objWriter->startElement('v:shadow');
221. $objWriter->writeAttribute('on', 't');
222. $objWriter->writeAttribute('color', 'black');
223. $objWriter->writeAttribute('obscured', 't');
224. $objWriter->endElement();
226. // v:path
227. $objWriter->startElement('v:path');
228. $objWriter->writeAttribute('o:connecttype', 'none');
229. $objWriter->endElement();
231. // v:textbox
232. $objWriter->startElement('v:textbox');
233. $objWriter->writeAttribute('style', 'mso-direction-alt:auto');
235. // div
236. $objWriter->startElement('div');
237. $objWriter->writeAttribute('style', 'text-align:left');
238. $objWriter->endElement();
240. $objWriter->endElement();
242. // x:ClientData
243. $objWriter->startElement('x:ClientData');
244. $objWriter->writeAttribute('ObjectType', 'Note');
246. // x:MoveWithCells
247. $objWriter->writeElement('x:MoveWithCells', '');
249. // x:SizeWithCells
250. $objWriter->writeElement('x:SizeWithCells', '');
252. // x:Anchor
253. //$objWriter->writeElement('x:Anchor', $column . ', 15, ' . ($row - 2) . ', 10, ' . ($column + 4) . ', 15, ' . ($row + 5) . ', 18');
255. // x:AutoFill
256. $objWriter->writeElement('x:AutoFill', 'False');
258. // x:Row
259. $objWriter->writeElement('x:Row', ($row - 1));
261. // x:Column
262. $objWriter->writeElement('x:Column', ($column - 1));
264. $objWriter->endElement();
266. $objWriter->endElement();
267. }
268. }

Documentation generated on Sun, 27 Feb 2011 16:29:09 -0800 by phpDocumentor 1.4.3