caxlsx 3.0.4 → 3.2.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 (294) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +354 -334
  5. data/LICENSE +21 -21
  6. data/README.md +168 -170
  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 -151
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -143
  22. data/lib/axlsx/drawing/bar_series.rb +97 -80
  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 +276 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +90 -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 -98
  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 +97 -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 +388 -363
  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 -71
  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 +494 -420
  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 +410 -401
  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 +395 -370
  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/break.rb +35 -35
  98. data/lib/axlsx/workbook/worksheet/cell.rb +506 -505
  99. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  100. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  101. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  102. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  103. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  105. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  106. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  107. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  108. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  110. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  111. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  112. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -246
  113. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  114. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  115. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  116. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  117. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  118. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  119. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  120. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  121. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  122. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  123. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  124. data/lib/axlsx/workbook/worksheet/pivot_table.rb +296 -289
  125. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  126. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  127. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  128. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  129. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  130. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  131. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  132. data/lib/axlsx/workbook/worksheet/row.rb +164 -162
  133. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  134. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  135. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  136. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  137. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  138. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  139. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  140. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  141. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  142. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  143. data/lib/axlsx/workbook/worksheet/worksheet.rb +786 -764
  144. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  145. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  148. data/lib/axlsx.rb +185 -170
  149. data/lib/caxlsx.rb +2 -2
  150. data/lib/schema/dc.xsd +118 -118
  151. data/lib/schema/dcmitype.xsd +51 -51
  152. data/lib/schema/dcterms.xsd +331 -331
  153. data/lib/schema/dml-chartDrawing.xsd +146 -146
  154. data/lib/schema/dml-compatibility.xsd +14 -14
  155. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  156. data/lib/schema/dml-main.xsd +3048 -3048
  157. data/lib/schema/dml-picture.xsd +23 -23
  158. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  159. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  160. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  161. data/lib/schema/shared-bibliography.xsd +144 -144
  162. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  163. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  164. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  165. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  166. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  167. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  168. data/lib/schema/shared-relationshipReference.xsd +25 -25
  169. data/lib/schema/vml-main.xsd +569 -569
  170. data/lib/schema/vml-officeDrawing.xsd +509 -509
  171. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  172. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  173. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  174. data/lib/schema/xml.xsd +116 -116
  175. data/test/benchmark.rb +72 -72
  176. data/test/content_type/tc_content_type.rb +76 -76
  177. data/test/content_type/tc_default.rb +16 -16
  178. data/test/content_type/tc_override.rb +14 -14
  179. data/test/doc_props/tc_app.rb +43 -43
  180. data/test/doc_props/tc_core.rb +42 -42
  181. data/test/drawing/tc_area_chart.rb +39 -39
  182. data/test/drawing/tc_area_series.rb +71 -71
  183. data/test/drawing/tc_axes.rb +7 -7
  184. data/test/drawing/tc_axis.rb +112 -112
  185. data/test/drawing/tc_bar_3D_chart.rb +86 -71
  186. data/test/drawing/tc_bar_chart.rb +86 -71
  187. data/test/drawing/tc_bar_series.rb +46 -37
  188. data/test/drawing/tc_bubble_chart.rb +44 -44
  189. data/test/drawing/tc_bubble_series.rb +21 -21
  190. data/test/drawing/tc_cat_axis.rb +31 -31
  191. data/test/drawing/tc_cat_axis_data.rb +27 -27
  192. data/test/drawing/tc_chart.rb +123 -123
  193. data/test/drawing/tc_d_lbls.rb +57 -57
  194. data/test/drawing/tc_data_source.rb +23 -23
  195. data/test/drawing/tc_drawing.rb +80 -80
  196. data/test/drawing/tc_graphic_frame.rb +27 -27
  197. data/test/drawing/tc_hyperlink.rb +64 -64
  198. data/test/drawing/tc_line_3d_chart.rb +47 -47
  199. data/test/drawing/tc_line_chart.rb +39 -39
  200. data/test/drawing/tc_line_series.rb +71 -71
  201. data/test/drawing/tc_marker.rb +44 -44
  202. data/test/drawing/tc_named_axis_data.rb +27 -27
  203. data/test/drawing/tc_num_data.rb +31 -31
  204. data/test/drawing/tc_num_val.rb +29 -29
  205. data/test/drawing/tc_one_cell_anchor.rb +66 -66
  206. data/test/drawing/tc_pic.rb +103 -103
  207. data/test/drawing/tc_picture_locking.rb +72 -72
  208. data/test/drawing/tc_pie_3D_chart.rb +28 -28
  209. data/test/drawing/tc_pie_series.rb +33 -33
  210. data/test/drawing/tc_scaling.rb +36 -36
  211. data/test/drawing/tc_scatter_chart.rb +48 -48
  212. data/test/drawing/tc_scatter_series.rb +74 -56
  213. data/test/drawing/tc_ser_axis.rb +31 -31
  214. data/test/drawing/tc_series.rb +23 -23
  215. data/test/drawing/tc_series_title.rb +54 -54
  216. data/test/drawing/tc_str_data.rb +18 -18
  217. data/test/drawing/tc_str_val.rb +30 -30
  218. data/test/drawing/tc_title.rb +70 -70
  219. data/test/drawing/tc_two_cell_anchor.rb +36 -36
  220. data/test/drawing/tc_val_axis.rb +24 -24
  221. data/test/drawing/tc_view_3D.rb +54 -54
  222. data/test/drawing/tc_vml_drawing.rb +25 -25
  223. data/test/drawing/tc_vml_shape.rb +106 -106
  224. data/test/profile.rb +24 -24
  225. data/test/rels/tc_relationship.rb +52 -52
  226. data/test/rels/tc_relationships.rb +37 -37
  227. data/test/stylesheet/tc_border.rb +37 -37
  228. data/test/stylesheet/tc_border_pr.rb +32 -32
  229. data/test/stylesheet/tc_cell_alignment.rb +81 -81
  230. data/test/stylesheet/tc_cell_protection.rb +29 -29
  231. data/test/stylesheet/tc_cell_style.rb +57 -57
  232. data/test/stylesheet/tc_color.rb +43 -43
  233. data/test/stylesheet/tc_dxf.rb +81 -81
  234. data/test/stylesheet/tc_fill.rb +18 -18
  235. data/test/stylesheet/tc_font.rb +133 -133
  236. data/test/stylesheet/tc_gradient_fill.rb +72 -72
  237. data/test/stylesheet/tc_gradient_stop.rb +31 -31
  238. data/test/stylesheet/tc_num_fmt.rb +30 -30
  239. data/test/stylesheet/tc_pattern_fill.rb +43 -43
  240. data/test/stylesheet/tc_styles.rb +309 -261
  241. data/test/stylesheet/tc_table_style.rb +44 -44
  242. data/test/stylesheet/tc_table_style_element.rb +45 -45
  243. data/test/stylesheet/tc_table_styles.rb +29 -29
  244. data/test/stylesheet/tc_xf.rb +120 -120
  245. data/test/tc_axlsx.rb +109 -109
  246. data/test/tc_helper.rb +10 -12
  247. data/test/tc_package.rb +317 -264
  248. data/test/util/tc_mime_type_utils.rb +13 -13
  249. data/test/util/tc_serialized_attributes.rb +19 -19
  250. data/test/util/tc_simple_typed_list.rb +77 -77
  251. data/test/util/tc_validators.rb +210 -210
  252. data/test/workbook/tc_defined_name.rb +49 -49
  253. data/test/workbook/tc_shared_strings_table.rb +59 -59
  254. data/test/workbook/tc_workbook.rb +165 -160
  255. data/test/workbook/tc_workbook_view.rb +50 -50
  256. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -38
  257. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -76
  258. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -50
  259. data/test/workbook/worksheet/tc_break.rb +49 -49
  260. data/test/workbook/worksheet/tc_cell.rb +465 -453
  261. data/test/workbook/worksheet/tc_cfvo.rb +31 -31
  262. data/test/workbook/worksheet/tc_col.rb +93 -93
  263. data/test/workbook/worksheet/tc_color_scale.rb +58 -58
  264. data/test/workbook/worksheet/tc_comment.rb +72 -72
  265. data/test/workbook/worksheet/tc_comments.rb +57 -57
  266. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -224
  267. data/test/workbook/worksheet/tc_data_bar.rb +46 -46
  268. data/test/workbook/worksheet/tc_data_validation.rb +265 -265
  269. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -124
  270. data/test/workbook/worksheet/tc_header_footer.rb +151 -151
  271. data/test/workbook/worksheet/tc_icon_set.rb +45 -45
  272. data/test/workbook/worksheet/tc_outline_pr.rb +19 -19
  273. data/test/workbook/worksheet/tc_page_margins.rb +97 -97
  274. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -15
  275. data/test/workbook/worksheet/tc_page_setup.rb +143 -143
  276. data/test/workbook/worksheet/tc_pane.rb +54 -54
  277. data/test/workbook/worksheet/tc_pivot_table.rb +180 -135
  278. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +62 -54
  279. data/test/workbook/worksheet/tc_print_options.rb +72 -72
  280. data/test/workbook/worksheet/tc_protected_range.rb +17 -17
  281. data/test/workbook/worksheet/tc_rich_text.rb +44 -44
  282. data/test/workbook/worksheet/tc_rich_text_run.rb +173 -173
  283. data/test/workbook/worksheet/tc_row.rb +160 -139
  284. data/test/workbook/worksheet/tc_selection.rb +55 -55
  285. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -18
  286. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -88
  287. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -49
  288. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -117
  289. data/test/workbook/worksheet/tc_sheet_view.rb +214 -214
  290. data/test/workbook/worksheet/tc_table.rb +77 -67
  291. data/test/workbook/worksheet/tc_table_style_info.rb +53 -53
  292. data/test/workbook/worksheet/tc_worksheet.rb +632 -601
  293. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -55
  294. metadata +11 -11
@@ -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