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