caxlsx 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +385 -354
  5. data/LICENSE +21 -21
  6. data/README.md +165 -168
  7. data/Rakefile +29 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
  10. data/lib/axlsx/content_type/content_type.rb +26 -26
  11. data/lib/axlsx/content_type/default.rb +25 -25
  12. data/lib/axlsx/content_type/override.rb +25 -25
  13. data/lib/axlsx/doc_props/app.rb +235 -235
  14. data/lib/axlsx/doc_props/core.rb +39 -39
  15. data/lib/axlsx/drawing/area_chart.rb +99 -99
  16. data/lib/axlsx/drawing/area_series.rb +110 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +26 -26
  18. data/lib/axlsx/drawing/axes.rb +61 -61
  19. data/lib/axlsx/drawing/axis.rb +190 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +148 -148
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -138
  22. data/lib/axlsx/drawing/bar_series.rb +97 -97
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +85 -85
  26. data/lib/axlsx/drawing/chart.rb +299 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +91 -90
  28. data/lib/axlsx/drawing/drawing.rb +167 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +54 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +100 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
  32. data/lib/axlsx/drawing/line_chart.rb +99 -99
  33. data/lib/axlsx/drawing/line_series.rb +110 -110
  34. data/lib/axlsx/drawing/marker.rb +84 -84
  35. data/lib/axlsx/drawing/num_data.rb +52 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +62 -62
  37. data/lib/axlsx/drawing/num_val.rb +34 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
  39. data/lib/axlsx/drawing/pic.rb +211 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +42 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
  42. data/lib/axlsx/drawing/pie_series.rb +74 -74
  43. data/lib/axlsx/drawing/scaling.rb +60 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +74 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +129 -129
  46. data/lib/axlsx/drawing/ser_axis.rb +45 -45
  47. data/lib/axlsx/drawing/series.rb +69 -69
  48. data/lib/axlsx/drawing/series_title.rb +25 -25
  49. data/lib/axlsx/drawing/str_data.rb +42 -42
  50. data/lib/axlsx/drawing/str_val.rb +34 -34
  51. data/lib/axlsx/drawing/title.rb +107 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
  53. data/lib/axlsx/drawing/val_axis.rb +37 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +42 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +66 -66
  57. data/lib/axlsx/package.rb +398 -388
  58. data/lib/axlsx/rels/relationship.rb +130 -130
  59. data/lib/axlsx/rels/relationships.rb +32 -32
  60. data/lib/axlsx/stylesheet/border.rb +73 -73
  61. data/lib/axlsx/stylesheet/border_pr.rb +71 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +72 -72
  65. data/lib/axlsx/stylesheet/color.rb +76 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +79 -79
  67. data/lib/axlsx/stylesheet/fill.rb +35 -35
  68. data/lib/axlsx/stylesheet/font.rb +156 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
  73. data/lib/axlsx/stylesheet/styles.rb +535 -494
  74. data/lib/axlsx/stylesheet/table_style.rb +54 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +46 -46
  77. data/lib/axlsx/stylesheet/xf.rb +147 -147
  78. data/lib/axlsx/util/accessors.rb +64 -64
  79. data/lib/axlsx/util/constants.rb +416 -410
  80. data/lib/axlsx/util/mime_type_utils.rb +11 -11
  81. data/lib/axlsx/util/options_parser.rb +16 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +89 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +179 -179
  84. data/lib/axlsx/util/storage.rb +146 -146
  85. data/lib/axlsx/util/validators.rb +312 -312
  86. data/lib/axlsx/util/zip_command.rb +73 -73
  87. data/lib/axlsx/version.rb +5 -5
  88. data/lib/axlsx/workbook/defined_name.rb +128 -128
  89. data/lib/axlsx/workbook/defined_names.rb +21 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
  91. data/lib/axlsx/workbook/workbook.rb +425 -395
  92. data/lib/axlsx/workbook/workbook_view.rb +80 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +22 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
  97. data/lib/axlsx/workbook/worksheet/border_creator.rb +76 -0
  98. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  99. data/lib/axlsx/workbook/worksheet/cell.rb +532 -506
  100. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  101. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  102. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  103. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  104. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  105. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  106. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  107. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  108. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  111. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  112. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  113. data/lib/axlsx/workbook/worksheet/data_validation.rb +267 -246
  114. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  115. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  116. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  117. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  118. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  119. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  120. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  121. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  122. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  123. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  124. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  125. data/lib/axlsx/workbook/worksheet/pivot_table.rb +335 -296
  126. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  127. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  128. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  129. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  130. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  131. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  132. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  133. data/lib/axlsx/workbook/worksheet/row.rb +164 -164
  134. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  135. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  136. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  137. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  138. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  139. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  140. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  141. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  142. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  143. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  144. data/lib/axlsx/workbook/worksheet/worksheet.rb +829 -786
  145. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  149. data/lib/axlsx.rb +204 -185
  150. data/lib/caxlsx.rb +2 -2
  151. data/lib/schema/dc.xsd +118 -118
  152. data/lib/schema/dcmitype.xsd +51 -51
  153. data/lib/schema/dcterms.xsd +331 -331
  154. data/lib/schema/dml-chartDrawing.xsd +146 -146
  155. data/lib/schema/dml-compatibility.xsd +14 -14
  156. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  157. data/lib/schema/dml-main.xsd +3048 -3048
  158. data/lib/schema/dml-picture.xsd +23 -23
  159. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  160. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  161. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  162. data/lib/schema/shared-bibliography.xsd +144 -144
  163. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  164. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  165. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  166. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  167. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  168. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  169. data/lib/schema/shared-relationshipReference.xsd +25 -25
  170. data/lib/schema/vml-main.xsd +569 -569
  171. data/lib/schema/vml-officeDrawing.xsd +509 -509
  172. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  173. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  174. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  175. data/lib/schema/xml.xsd +116 -116
  176. metadata +5 -252
  177. data/test/benchmark.rb +0 -72
  178. data/test/content_type/tc_content_type.rb +0 -76
  179. data/test/content_type/tc_default.rb +0 -16
  180. data/test/content_type/tc_override.rb +0 -14
  181. data/test/doc_props/tc_app.rb +0 -43
  182. data/test/doc_props/tc_core.rb +0 -42
  183. data/test/drawing/tc_area_chart.rb +0 -39
  184. data/test/drawing/tc_area_series.rb +0 -71
  185. data/test/drawing/tc_axes.rb +0 -8
  186. data/test/drawing/tc_axis.rb +0 -112
  187. data/test/drawing/tc_bar_3D_chart.rb +0 -86
  188. data/test/drawing/tc_bar_chart.rb +0 -86
  189. data/test/drawing/tc_bar_series.rb +0 -46
  190. data/test/drawing/tc_bubble_chart.rb +0 -44
  191. data/test/drawing/tc_bubble_series.rb +0 -21
  192. data/test/drawing/tc_cat_axis.rb +0 -31
  193. data/test/drawing/tc_cat_axis_data.rb +0 -27
  194. data/test/drawing/tc_chart.rb +0 -123
  195. data/test/drawing/tc_d_lbls.rb +0 -57
  196. data/test/drawing/tc_data_source.rb +0 -23
  197. data/test/drawing/tc_drawing.rb +0 -80
  198. data/test/drawing/tc_graphic_frame.rb +0 -27
  199. data/test/drawing/tc_hyperlink.rb +0 -64
  200. data/test/drawing/tc_line_3d_chart.rb +0 -47
  201. data/test/drawing/tc_line_chart.rb +0 -39
  202. data/test/drawing/tc_line_series.rb +0 -71
  203. data/test/drawing/tc_marker.rb +0 -44
  204. data/test/drawing/tc_named_axis_data.rb +0 -27
  205. data/test/drawing/tc_num_data.rb +0 -31
  206. data/test/drawing/tc_num_val.rb +0 -29
  207. data/test/drawing/tc_one_cell_anchor.rb +0 -66
  208. data/test/drawing/tc_pic.rb +0 -103
  209. data/test/drawing/tc_picture_locking.rb +0 -72
  210. data/test/drawing/tc_pie_3D_chart.rb +0 -28
  211. data/test/drawing/tc_pie_series.rb +0 -33
  212. data/test/drawing/tc_scaling.rb +0 -36
  213. data/test/drawing/tc_scatter_chart.rb +0 -48
  214. data/test/drawing/tc_scatter_series.rb +0 -74
  215. data/test/drawing/tc_ser_axis.rb +0 -31
  216. data/test/drawing/tc_series.rb +0 -23
  217. data/test/drawing/tc_series_title.rb +0 -54
  218. data/test/drawing/tc_str_data.rb +0 -18
  219. data/test/drawing/tc_str_val.rb +0 -30
  220. data/test/drawing/tc_title.rb +0 -70
  221. data/test/drawing/tc_two_cell_anchor.rb +0 -36
  222. data/test/drawing/tc_val_axis.rb +0 -24
  223. data/test/drawing/tc_view_3D.rb +0 -54
  224. data/test/drawing/tc_vml_drawing.rb +0 -25
  225. data/test/drawing/tc_vml_shape.rb +0 -106
  226. data/test/fixtures/image1.gif +0 -0
  227. data/test/fixtures/image1.jpeg +0 -0
  228. data/test/fixtures/image1.jpg +0 -0
  229. data/test/fixtures/image1.png +0 -0
  230. data/test/fixtures/image1_fake.jpg +0 -0
  231. data/test/profile.rb +0 -24
  232. data/test/rels/tc_relationship.rb +0 -52
  233. data/test/rels/tc_relationships.rb +0 -37
  234. data/test/stylesheet/tc_border.rb +0 -37
  235. data/test/stylesheet/tc_border_pr.rb +0 -32
  236. data/test/stylesheet/tc_cell_alignment.rb +0 -81
  237. data/test/stylesheet/tc_cell_protection.rb +0 -29
  238. data/test/stylesheet/tc_cell_style.rb +0 -57
  239. data/test/stylesheet/tc_color.rb +0 -43
  240. data/test/stylesheet/tc_dxf.rb +0 -81
  241. data/test/stylesheet/tc_fill.rb +0 -18
  242. data/test/stylesheet/tc_font.rb +0 -133
  243. data/test/stylesheet/tc_gradient_fill.rb +0 -72
  244. data/test/stylesheet/tc_gradient_stop.rb +0 -31
  245. data/test/stylesheet/tc_num_fmt.rb +0 -30
  246. data/test/stylesheet/tc_pattern_fill.rb +0 -43
  247. data/test/stylesheet/tc_styles.rb +0 -309
  248. data/test/stylesheet/tc_table_style.rb +0 -44
  249. data/test/stylesheet/tc_table_style_element.rb +0 -45
  250. data/test/stylesheet/tc_table_styles.rb +0 -29
  251. data/test/stylesheet/tc_xf.rb +0 -120
  252. data/test/tc_axlsx.rb +0 -109
  253. data/test/tc_helper.rb +0 -10
  254. data/test/tc_package.rb +0 -317
  255. data/test/util/tc_mime_type_utils.rb +0 -13
  256. data/test/util/tc_serialized_attributes.rb +0 -19
  257. data/test/util/tc_simple_typed_list.rb +0 -77
  258. data/test/util/tc_validators.rb +0 -210
  259. data/test/workbook/tc_defined_name.rb +0 -49
  260. data/test/workbook/tc_shared_strings_table.rb +0 -59
  261. data/test/workbook/tc_workbook.rb +0 -165
  262. data/test/workbook/tc_workbook_view.rb +0 -50
  263. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
  264. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
  265. data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
  266. data/test/workbook/worksheet/tc_break.rb +0 -49
  267. data/test/workbook/worksheet/tc_cell.rb +0 -465
  268. data/test/workbook/worksheet/tc_cfvo.rb +0 -31
  269. data/test/workbook/worksheet/tc_col.rb +0 -93
  270. data/test/workbook/worksheet/tc_color_scale.rb +0 -58
  271. data/test/workbook/worksheet/tc_comment.rb +0 -72
  272. data/test/workbook/worksheet/tc_comments.rb +0 -57
  273. data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
  274. data/test/workbook/worksheet/tc_data_bar.rb +0 -46
  275. data/test/workbook/worksheet/tc_data_validation.rb +0 -265
  276. data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
  277. data/test/workbook/worksheet/tc_header_footer.rb +0 -151
  278. data/test/workbook/worksheet/tc_icon_set.rb +0 -45
  279. data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
  280. data/test/workbook/worksheet/tc_page_margins.rb +0 -97
  281. data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
  282. data/test/workbook/worksheet/tc_page_setup.rb +0 -143
  283. data/test/workbook/worksheet/tc_pane.rb +0 -54
  284. data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
  285. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
  286. data/test/workbook/worksheet/tc_print_options.rb +0 -72
  287. data/test/workbook/worksheet/tc_protected_range.rb +0 -17
  288. data/test/workbook/worksheet/tc_rich_text.rb +0 -44
  289. data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
  290. data/test/workbook/worksheet/tc_row.rb +0 -160
  291. data/test/workbook/worksheet/tc_selection.rb +0 -55
  292. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
  293. data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
  294. data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
  295. data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
  296. data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
  297. data/test/workbook/worksheet/tc_table.rb +0 -77
  298. data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
  299. data/test/workbook/worksheet/tc_worksheet.rb +0 -632
  300. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
@@ -1,91 +1,91 @@
1
- module Axlsx
2
-
3
- # A comment is the text data for a comment
4
- class Comment
5
-
6
- include Axlsx::OptionsParser
7
- include Axlsx::Accessors
8
-
9
- # Creates a new comment object
10
- # @param [Comments] comments The comment collection this comment belongs to
11
- # @param [Hash] options
12
- # @option [String] author the author of the comment
13
- # @option [String] text The text for the comment
14
- # @option [String] ref The refence (e.g. 'A3' where this comment will be anchored.
15
- # @option [Boolean] visible This controls the visiblity of the associated vml_shape.
16
- def initialize(comments, options={})
17
- raise ArgumentError, "A comment needs a parent comments object" unless comments.is_a?(Comments)
18
- @visible = true
19
- @comments = comments
20
- parse_options options
21
- yield self if block_given?
22
- end
23
-
24
- string_attr_accessor :text, :author
25
- boolean_attr_accessor :visible
26
-
27
- # The owning Comments object
28
- # @return [Comments]
29
- attr_reader :comments
30
-
31
- # The string based cell position reference (e.g. 'A1') that determines the positioning of this comment
32
- # @return [String|Cell]
33
- attr_reader :ref
34
-
35
- # TODO
36
- # r (Rich Text Run)
37
- # rPh (Phonetic Text Run)
38
- # phoneticPr (Phonetic Properties)
39
-
40
- # The vml shape that will render this comment
41
- # @return [VmlShape]
42
- def vml_shape
43
- @vml_shape ||= initialize_vml_shape
44
- end
45
-
46
- # The index of this author in a unique sorted list of all authors in
47
- # the comment.
48
- # @return [Integer]
49
- def author_index
50
- @comments.authors.index(author)
51
- end
52
-
53
- # @see ref
54
- def ref=(v)
55
- Axlsx::DataTypeValidator.validate :comment_ref, [String, Cell], v
56
- @ref = v if v.is_a?(String)
57
- @ref = v.r if v.is_a?(Cell)
58
- end
59
-
60
- # serialize the object
61
- # @param [String] str
62
- # @return [String]
63
- def to_xml_string(str = "")
64
- author = @comments.authors[author_index]
65
- str << ('<comment ref="' << ref << '" authorId="' << author_index.to_s << '">')
66
- str << '<text>'
67
- unless author.to_s == ""
68
- str << '<r><rPr><b/><color indexed="81"/></rPr>'
69
- str << ("<t>" << ::CGI.escapeHTML(author.to_s) << ":\n</t></r>")
70
- end
71
- str << '<r>'
72
- str << '<rPr><color indexed="81"/></rPr>'
73
- str << ('<t>' << ::CGI.escapeHTML(text) << '</t></r></text>')
74
- str << '</comment>'
75
- end
76
-
77
- private
78
-
79
- # initialize the vml shape based on this comment's ref/position in the worksheet.
80
- # by default, all columns are 5 columns wide and 5 rows high
81
- def initialize_vml_shape
82
- pos = Axlsx::name_to_indices(ref)
83
- @vml_shape = VmlShape.new(:row => pos[1], :column => pos[0], :visible => @visible) do |vml|
84
- vml.left_column = vml.column
85
- vml.right_column = vml.column + 2
86
- vml.top_row = vml.row
87
- vml.bottom_row = vml.row + 4
88
- end
89
- end
90
- end
91
- end
1
+ module Axlsx
2
+
3
+ # A comment is the text data for a comment
4
+ class Comment
5
+
6
+ include Axlsx::OptionsParser
7
+ include Axlsx::Accessors
8
+
9
+ # Creates a new comment object
10
+ # @param [Comments] comments The comment collection this comment belongs to
11
+ # @param [Hash] options
12
+ # @option [String] author the author of the comment
13
+ # @option [String] text The text for the comment
14
+ # @option [String] ref The refence (e.g. 'A3' where this comment will be anchored.
15
+ # @option [Boolean] visible This controls the visiblity of the associated vml_shape.
16
+ def initialize(comments, options={})
17
+ raise ArgumentError, "A comment needs a parent comments object" unless comments.is_a?(Comments)
18
+ @visible = true
19
+ @comments = comments
20
+ parse_options options
21
+ yield self if block_given?
22
+ end
23
+
24
+ string_attr_accessor :text, :author
25
+ boolean_attr_accessor :visible
26
+
27
+ # The owning Comments object
28
+ # @return [Comments]
29
+ attr_reader :comments
30
+
31
+ # The string based cell position reference (e.g. 'A1') that determines the positioning of this comment
32
+ # @return [String|Cell]
33
+ attr_reader :ref
34
+
35
+ # TODO
36
+ # r (Rich Text Run)
37
+ # rPh (Phonetic Text Run)
38
+ # phoneticPr (Phonetic Properties)
39
+
40
+ # The vml shape that will render this comment
41
+ # @return [VmlShape]
42
+ def vml_shape
43
+ @vml_shape ||= initialize_vml_shape
44
+ end
45
+
46
+ # The index of this author in a unique sorted list of all authors in
47
+ # the comment.
48
+ # @return [Integer]
49
+ def author_index
50
+ @comments.authors.index(author)
51
+ end
52
+
53
+ # @see ref
54
+ def ref=(v)
55
+ Axlsx::DataTypeValidator.validate :comment_ref, [String, Cell], v
56
+ @ref = v if v.is_a?(String)
57
+ @ref = v.r if v.is_a?(Cell)
58
+ end
59
+
60
+ # serialize the object
61
+ # @param [String] str
62
+ # @return [String]
63
+ def to_xml_string(str = "")
64
+ author = @comments.authors[author_index]
65
+ str << ('<comment ref="' << ref << '" authorId="' << author_index.to_s << '">')
66
+ str << '<text>'
67
+ unless author.to_s == ""
68
+ str << '<r><rPr><b/><color indexed="81"/></rPr>'
69
+ str << ("<t>" << ::CGI.escapeHTML(author.to_s) << ":\n</t></r>")
70
+ end
71
+ str << '<r>'
72
+ str << '<rPr><color indexed="81"/></rPr>'
73
+ str << ('<t>' << ::CGI.escapeHTML(text) << '</t></r></text>')
74
+ str << '</comment>'
75
+ end
76
+
77
+ private
78
+
79
+ # initialize the vml shape based on this comment's ref/position in the worksheet.
80
+ # by default, all columns are 5 columns wide and 5 rows high
81
+ def initialize_vml_shape
82
+ pos = Axlsx::name_to_indices(ref)
83
+ @vml_shape = VmlShape.new(:row => pos[1], :column => pos[0], :visible => @visible) do |vml|
84
+ vml.left_column = vml.column
85
+ vml.right_column = vml.column + 2
86
+ vml.top_row = vml.row
87
+ vml.bottom_row = vml.row + 4
88
+ end
89
+ end
90
+ end
91
+ end
@@ -1,82 +1,82 @@
1
- # -*- coding: utf-8 -*-
2
- module Axlsx
3
-
4
- # Comments is a collection of Comment objects for a worksheet
5
- class Comments < SimpleTypedList
6
-
7
- # the vml_drawing that holds the shapes for comments
8
- # @return [VmlDrawing]
9
- attr_reader :vml_drawing
10
-
11
- # The worksheet that these comments belong to
12
- # @return [Worksheet]
13
- attr_reader :worksheet
14
-
15
- # The index of this collection in the workbook. Effectively the index of the worksheet.
16
- # @return [Integer]
17
- def index
18
- @worksheet.index
19
- end
20
-
21
- # The part name for this object
22
- # @return [String]
23
- def pn
24
- "#{COMMENT_PN % (index+1)}"
25
- end
26
-
27
- # Creates a new Comments object
28
- # @param [Worksheet] worksheet The sheet that these comments belong to.
29
- def initialize(worksheet)
30
- raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
31
- super(Comment)
32
- @worksheet = worksheet
33
- @vml_drawing = VmlDrawing.new(self)
34
- end
35
-
36
- # Adds a new comment to the worksheet that owns these comments.
37
- # @note the author, text and ref options are required
38
- # @option options [String] author The name of the author for this comment
39
- # @option options [String] text The text for this comment
40
- # @option options [Stirng|Cell] ref The cell that this comment is attached to.
41
- def add_comment(options={})
42
- raise ArgumentError, "Comment require an author" unless options[:author]
43
- raise ArgumentError, "Comment requires text" unless options[:text]
44
- raise ArgumentError, "Comment requires ref" unless options[:ref]
45
- self << Comment.new(self, options)
46
- yield last if block_given?
47
- last
48
- end
49
-
50
- # A sorted list of the unique authors in the contained comments
51
- # @return [Array]
52
- def authors
53
- map { |comment| comment.author.to_s }.uniq.sort
54
- end
55
-
56
- # The relationships required by this object
57
- # @return [Array]
58
- def relationships
59
- [Relationship.new(self, VML_DRAWING_R, "../#{vml_drawing.pn}"),
60
- Relationship.new(self, COMMENT_R, "../#{pn}")]
61
- end
62
-
63
- # serialize the object
64
- # @param [String] str
65
- # @return [String]
66
- def to_xml_string(str="")
67
- str << '<?xml version="1.0" encoding="UTF-8"?>'
68
- str << ('<comments xmlns="' << XML_NS << '"><authors>')
69
- authors.each do |author|
70
- str << ('<author>' << author.to_s << '</author>')
71
- end
72
- str << '</authors><commentList>'
73
- each do |comment|
74
- comment.to_xml_string str
75
- end
76
- str << '</commentList></comments>'
77
-
78
- end
79
-
80
- end
81
-
82
- end
1
+ # -*- coding: utf-8 -*-
2
+ module Axlsx
3
+
4
+ # Comments is a collection of Comment objects for a worksheet
5
+ class Comments < SimpleTypedList
6
+
7
+ # the vml_drawing that holds the shapes for comments
8
+ # @return [VmlDrawing]
9
+ attr_reader :vml_drawing
10
+
11
+ # The worksheet that these comments belong to
12
+ # @return [Worksheet]
13
+ attr_reader :worksheet
14
+
15
+ # The index of this collection in the workbook. Effectively the index of the worksheet.
16
+ # @return [Integer]
17
+ def index
18
+ @worksheet.index
19
+ end
20
+
21
+ # The part name for this object
22
+ # @return [String]
23
+ def pn
24
+ "#{COMMENT_PN % (index+1)}"
25
+ end
26
+
27
+ # Creates a new Comments object
28
+ # @param [Worksheet] worksheet The sheet that these comments belong to.
29
+ def initialize(worksheet)
30
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
31
+ super(Comment)
32
+ @worksheet = worksheet
33
+ @vml_drawing = VmlDrawing.new(self)
34
+ end
35
+
36
+ # Adds a new comment to the worksheet that owns these comments.
37
+ # @note the author, text and ref options are required
38
+ # @option options [String] author The name of the author for this comment
39
+ # @option options [String] text The text for this comment
40
+ # @option options [Stirng|Cell] ref The cell that this comment is attached to.
41
+ def add_comment(options={})
42
+ raise ArgumentError, "Comment require an author" unless options[:author]
43
+ raise ArgumentError, "Comment requires text" unless options[:text]
44
+ raise ArgumentError, "Comment requires ref" unless options[:ref]
45
+ self << Comment.new(self, options)
46
+ yield last if block_given?
47
+ last
48
+ end
49
+
50
+ # A sorted list of the unique authors in the contained comments
51
+ # @return [Array]
52
+ def authors
53
+ map { |comment| comment.author.to_s }.uniq.sort
54
+ end
55
+
56
+ # The relationships required by this object
57
+ # @return [Array]
58
+ def relationships
59
+ [Relationship.new(self, VML_DRAWING_R, "../#{vml_drawing.pn}"),
60
+ Relationship.new(self, COMMENT_R, "../#{pn}")]
61
+ end
62
+
63
+ # serialize the object
64
+ # @param [String] str
65
+ # @return [String]
66
+ def to_xml_string(str="")
67
+ str << '<?xml version="1.0" encoding="UTF-8"?>'
68
+ str << ('<comments xmlns="' << XML_NS << '"><authors>')
69
+ authors.each do |author|
70
+ str << ('<author>' << author.to_s << '</author>')
71
+ end
72
+ str << '</authors><commentList>'
73
+ each do |comment|
74
+ comment.to_xml_string str
75
+ end
76
+ str << '</commentList></comments>'
77
+
78
+ end
79
+
80
+ end
81
+
82
+ end
@@ -1,82 +1,82 @@
1
- module Axlsx
2
- # Conditional formatting allows styling of ranges based on functions
3
- #
4
- # @note The recommended way to manage conditional formatting is via Worksheet#add_conditional_formatting
5
- # @see Worksheet#add_conditional_formatting
6
- # @see ConditionalFormattingRule
7
- class ConditionalFormatting
8
-
9
- include Axlsx::OptionsParser
10
-
11
- # Creates a new {ConditionalFormatting} object
12
- # @option options [Array] rules The rules to apply
13
- # @option options [String] sqref The range to apply the rules to
14
- def initialize(options={})
15
- @rules = []
16
- parse_options options
17
- end
18
-
19
- # Range over which the formatting is applied, in "A1:B2" format
20
- # @return [String]
21
- attr_reader :sqref
22
-
23
- # Rules to apply the formatting to. Can be either a hash of
24
- # options to create a {ConditionalFormattingRule}, an array of hashes
25
- # for multiple ConditionalFormattingRules, or an array of already
26
- # created ConditionalFormattingRules.
27
- # @see ConditionalFormattingRule#initialize
28
- # @return [Array]
29
- attr_reader :rules
30
-
31
- # Add Conditional Formatting Rules to this object. Rules can either
32
- # be already created {ConditionalFormattingRule} elements or
33
- # hashes of options for automatic creation. If rules is a hash
34
- # instead of an array, assume only one rule being added.
35
- #
36
- # @example This would apply formatting "1" to cells > 20, and formatting "2" to cells < 1
37
- # conditional_formatting.add_rules [
38
- # { :type => :cellIs, :operator => :greaterThan, :formula => "20", :dxfId => 1, :priority=> 1 },
39
- # { :type => :cellIs, :operator => :lessThan, :formula => "10", :dxfId => 2, :priority=> 2 } ]
40
- #
41
- # @param [Array|Hash] rules the rules to apply, can be just one in hash form
42
- # @see ConditionalFormattingRule#initialize
43
- def add_rules(rules)
44
- rules = [rules] if rules.is_a? Hash
45
- rules.each do |rule|
46
- add_rule rule
47
- end
48
- end
49
-
50
- # Add a ConditionalFormattingRule. If a hash of options is passed
51
- # in create a rule on the fly.
52
- # @param [ConditionalFormattingRule|Hash] rule A rule to use, or the options necessary to create one.
53
- # @see ConditionalFormattingRule#initialize
54
- def add_rule(rule)
55
- if rule.is_a? Axlsx::ConditionalFormattingRule
56
- @rules << rule
57
- elsif rule.is_a? Hash
58
- @rules << ConditionalFormattingRule.new(rule)
59
- end
60
- end
61
-
62
- # @see rules
63
- def rules=(v); @rules = v end
64
- # @see sqref
65
- def sqref=(v); Axlsx::validate_string(v); @sqref = v end
66
-
67
- # Serializes the conditional formatting element
68
- # @example Conditional Formatting XML looks like:
69
- # <conditionalFormatting sqref="E3:E9">
70
- # <cfRule type="cellIs" dxfId="0" priority="1" operator="greaterThan">
71
- # <formula>0.5</formula>
72
- # </cfRule>
73
- # </conditionalFormatting>
74
- # @param [String] str
75
- # @return [String]
76
- def to_xml_string(str = '')
77
- str << ('<conditionalFormatting sqref="' << sqref << '">')
78
- str << rules.collect{ |rule| rule.to_xml_string }.join(' ')
79
- str << '</conditionalFormatting>'
80
- end
81
- end
82
- end
1
+ module Axlsx
2
+ # Conditional formatting allows styling of ranges based on functions
3
+ #
4
+ # @note The recommended way to manage conditional formatting is via Worksheet#add_conditional_formatting
5
+ # @see Worksheet#add_conditional_formatting
6
+ # @see ConditionalFormattingRule
7
+ class ConditionalFormatting
8
+
9
+ include Axlsx::OptionsParser
10
+
11
+ # Creates a new {ConditionalFormatting} object
12
+ # @option options [Array] rules The rules to apply
13
+ # @option options [String] sqref The range to apply the rules to
14
+ def initialize(options={})
15
+ @rules = []
16
+ parse_options options
17
+ end
18
+
19
+ # Range over which the formatting is applied, in "A1:B2" format
20
+ # @return [String]
21
+ attr_reader :sqref
22
+
23
+ # Rules to apply the formatting to. Can be either a hash of
24
+ # options to create a {ConditionalFormattingRule}, an array of hashes
25
+ # for multiple ConditionalFormattingRules, or an array of already
26
+ # created ConditionalFormattingRules.
27
+ # @see ConditionalFormattingRule#initialize
28
+ # @return [Array]
29
+ attr_reader :rules
30
+
31
+ # Add Conditional Formatting Rules to this object. Rules can either
32
+ # be already created {ConditionalFormattingRule} elements or
33
+ # hashes of options for automatic creation. If rules is a hash
34
+ # instead of an array, assume only one rule being added.
35
+ #
36
+ # @example This would apply formatting "1" to cells > 20, and formatting "2" to cells < 1
37
+ # conditional_formatting.add_rules [
38
+ # { :type => :cellIs, :operator => :greaterThan, :formula => "20", :dxfId => 1, :priority=> 1 },
39
+ # { :type => :cellIs, :operator => :lessThan, :formula => "10", :dxfId => 2, :priority=> 2 } ]
40
+ #
41
+ # @param [Array|Hash] rules the rules to apply, can be just one in hash form
42
+ # @see ConditionalFormattingRule#initialize
43
+ def add_rules(rules)
44
+ rules = [rules] if rules.is_a? Hash
45
+ rules.each do |rule|
46
+ add_rule rule
47
+ end
48
+ end
49
+
50
+ # Add a ConditionalFormattingRule. If a hash of options is passed
51
+ # in create a rule on the fly.
52
+ # @param [ConditionalFormattingRule|Hash] rule A rule to use, or the options necessary to create one.
53
+ # @see ConditionalFormattingRule#initialize
54
+ def add_rule(rule)
55
+ if rule.is_a? Axlsx::ConditionalFormattingRule
56
+ @rules << rule
57
+ elsif rule.is_a? Hash
58
+ @rules << ConditionalFormattingRule.new(rule)
59
+ end
60
+ end
61
+
62
+ # @see rules
63
+ def rules=(v); @rules = v end
64
+ # @see sqref
65
+ def sqref=(v); Axlsx::validate_string(v); @sqref = v end
66
+
67
+ # Serializes the conditional formatting element
68
+ # @example Conditional Formatting XML looks like:
69
+ # <conditionalFormatting sqref="E3:E9">
70
+ # <cfRule type="cellIs" dxfId="0" priority="1" operator="greaterThan">
71
+ # <formula>0.5</formula>
72
+ # </cfRule>
73
+ # </conditionalFormatting>
74
+ # @param [String] str
75
+ # @return [String]
76
+ def to_xml_string(str = '')
77
+ str << ('<conditionalFormatting sqref="' << sqref << '">')
78
+ str << rules.collect{ |rule| rule.to_xml_string }.join(' ')
79
+ str << '</conditionalFormatting>'
80
+ end
81
+ end
82
+ end