caxlsx 3.1.1 → 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 -343
  5. data/LICENSE +21 -21
  6. data/README.md +168 -172
  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 +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 -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 -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 -294
  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 -164
  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 -768
  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 -171
  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 -86
  186. data/test/drawing/tc_bar_chart.rb +86 -86
  187. data/test/drawing/tc_bar_series.rb +46 -46
  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 -10
  247. data/test/tc_package.rb +317 -314
  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 -143
  278. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +62 -62
  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 -160
  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 -77
  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 +101 -101
@@ -1,164 +1,164 @@
1
- module Axlsx
2
-
3
- # The Cell Serializer class contains the logic for serializing cells based on their type.
4
- class CellSerializer
5
- class << self
6
- # Calls the proper serialization method based on type.
7
- # @param [Integer] row_index The index of the cell's row
8
- # @param [Integer] column_index The index of the cell's column
9
- # @param [String] str The string to apend serialization to.
10
- # @return [String]
11
- def to_xml_string(row_index, column_index, cell, str='')
12
- str << ('<c r="' << Axlsx::cell_r(column_index, row_index) << '" s="' << cell.style.to_s << '" ')
13
- return str << '/>' if cell.value.nil?
14
- method = cell.type
15
- self.send(method, cell, str)
16
- str << '</c>'
17
- end
18
-
19
- # builds an xml text run based on this cells attributes.
20
- # @param [String] str The string instance this run will be concated to.
21
- # @return [String]
22
- def run_xml_string(cell, str = '')
23
- if cell.is_text_run?
24
- valid = RichTextRun::INLINE_STYLES - [:value, :type]
25
- data = Hash[cell.instance_values.map{ |k, v| [k.to_sym, v] }]
26
- data = data.select { |key, value| valid.include?(key) && !value.nil? }
27
- RichText.new(cell.value.to_s, data).to_xml_string(str)
28
- elsif cell.contains_rich_text?
29
- cell.value.to_xml_string(str)
30
- else
31
- str << ('<t>' << cell.clean_value << '</t>')
32
- end
33
- str
34
- end
35
-
36
- # serializes cells that are type iso_8601
37
- # @param [Cell] cell The cell that is being serialized
38
- # @param [String] str The string the serialized content will be appended to.
39
- # @return [String]
40
- def iso_8601(cell, str='')
41
- value_serialization 'd', cell.value, str
42
- end
43
-
44
- # serializes cells that are type date
45
- # @param [Cell] cell The cell that is being serialized
46
- # @param [String] str The string the serialized content will be appended to.
47
- # @return [String]
48
- def date(cell, str='')
49
- value_serialization false, DateTimeConverter::date_to_serial(cell.value).to_s, str
50
- end
51
-
52
- # Serializes cells that are type time
53
- # @param [Cell] cell The cell that is being serialized
54
- # @param [String] str The string the serialized content will be appended to.
55
- # @return [String]
56
- def time(cell, str='')
57
- value_serialization false, DateTimeConverter::time_to_serial(cell.value).to_s, str
58
- end
59
-
60
- # Serializes cells that are type boolean
61
- # @param [Cell] cell The cell that is being serialized
62
- # @param [String] str The string the serialized content will be appended to.
63
- # @return [String]
64
- def boolean(cell, str='')
65
- value_serialization 'b', cell.value.to_s, str
66
- end
67
-
68
- # Serializes cells that are type float
69
- # @param [Cell] cell The cell that is being serialized
70
- # @param [String] str The string the serialized content will be appended to.
71
- # @return [String]
72
- def float(cell, str='')
73
- numeric cell, str
74
- end
75
-
76
- # Serializes cells that are type integer
77
- # @param [Cell] cell The cell that is being serialized
78
- # @param [String] str The string the serialized content will be appended to.
79
- # @return [String]
80
- def integer(cell, str = '')
81
- numeric cell, str
82
- end
83
-
84
- # Serializes cells that are type formula
85
- # @param [Cell] cell The cell that is being serialized
86
- # @param [String] str The string the serialized content will be appended to.
87
- # @return [String]
88
- def formula_serialization(cell, str='')
89
- str << ('t="str"><f>' << cell.clean_value.to_s.sub('=', '') << '</f>')
90
- str << ('<v>' << cell.formula_value.to_s << '</v>') unless cell.formula_value.nil?
91
- end
92
-
93
- # Serializes cells that are type array formula
94
- # @param [Cell] cell The cell that is being serialized
95
- # @param [String] str The string the serialized content will be appended to.
96
- # @return [String]
97
- def array_formula_serialization(cell, str='')
98
- str << ('t="str">' << '<f t="array" ref="' << cell.r << '">' << cell.clean_value.to_s.sub('{=', '').sub(/}$/, '') << '</f>')
99
- str << ('<v>' << cell.formula_value.to_s << '</v>') unless cell.formula_value.nil?
100
- end
101
-
102
- # Serializes cells that are type inline_string
103
- # @param [Cell] cell The cell that is being serialized
104
- # @param [String] str The string the serialized content will be appended to.
105
- # @return [String]
106
- def inline_string_serialization(cell, str = '')
107
- str << 't="inlineStr"><is>'
108
- run_xml_string cell, str
109
- str << '</is>'
110
- end
111
-
112
- # Serializes cells that are type string
113
- # @param [Cell] cell The cell that is being serialized
114
- # @param [String] str The string the serialized content will be appended to.
115
- # @return [String]
116
- def string(cell, str='')
117
- if cell.is_array_formula?
118
- array_formula_serialization cell, str
119
- elsif cell.is_formula?
120
- formula_serialization cell, str
121
- elsif !cell.ssti.nil?
122
- value_serialization 's', cell.ssti, str
123
- else
124
- inline_string_serialization cell, str
125
- end
126
- end
127
-
128
- # Serializes cells that are of the type richtext
129
- # @param [Cell] cell The cell that is being serialized
130
- # @param [String] str The string the serialized content will be appended to.
131
- # @return [String]
132
- def richtext(cell, str)
133
- if cell.ssti.nil?
134
- inline_string_serialization cell, str
135
- else
136
- value_serialization 's', cell.ssti, str
137
- end
138
- end
139
-
140
- # Serializes cells that are of the type text
141
- # @param [Cell] cell The cell that is being serialized
142
- # @param [String] str The string the serialized content will be appended to.
143
- # @return [String]
144
- def text(cell, str)
145
- if cell.ssti.nil?
146
- inline_string_serialization cell, str
147
- else
148
- value_serialization 's', cell.ssti, str
149
- end
150
- end
151
-
152
- private
153
-
154
- def numeric(cell, str = '')
155
- value_serialization 'n', cell.value, str
156
- end
157
-
158
- def value_serialization(serialization_type, serialization_value, str = '')
159
- str << ('t="' << serialization_type.to_s << '"') if serialization_type
160
- str << ('><v>' << serialization_value.to_s << '</v>')
161
- end
162
- end
163
- end
164
- end
1
+ module Axlsx
2
+
3
+ # The Cell Serializer class contains the logic for serializing cells based on their type.
4
+ class CellSerializer
5
+ class << self
6
+ # Calls the proper serialization method based on type.
7
+ # @param [Integer] row_index The index of the cell's row
8
+ # @param [Integer] column_index The index of the cell's column
9
+ # @param [String] str The string to apend serialization to.
10
+ # @return [String]
11
+ def to_xml_string(row_index, column_index, cell, str='')
12
+ str << ('<c r="' << Axlsx::cell_r(column_index, row_index) << '" s="' << cell.style.to_s << '" ')
13
+ return str << '/>' if cell.value.nil?
14
+ method = cell.type
15
+ self.send(method, cell, str)
16
+ str << '</c>'
17
+ end
18
+
19
+ # builds an xml text run based on this cells attributes.
20
+ # @param [String] str The string instance this run will be concated to.
21
+ # @return [String]
22
+ def run_xml_string(cell, str = '')
23
+ if cell.is_text_run?
24
+ valid = RichTextRun::INLINE_STYLES - [:value, :type]
25
+ data = Hash[cell.instance_values.map{ |k, v| [k.to_sym, v] }]
26
+ data = data.select { |key, value| valid.include?(key) && !value.nil? }
27
+ RichText.new(cell.value.to_s, data).to_xml_string(str)
28
+ elsif cell.contains_rich_text?
29
+ cell.value.to_xml_string(str)
30
+ else
31
+ str << ('<t>' << cell.clean_value << '</t>')
32
+ end
33
+ str
34
+ end
35
+
36
+ # serializes cells that are type iso_8601
37
+ # @param [Cell] cell The cell that is being serialized
38
+ # @param [String] str The string the serialized content will be appended to.
39
+ # @return [String]
40
+ def iso_8601(cell, str='')
41
+ value_serialization 'd', cell.value, str
42
+ end
43
+
44
+ # serializes cells that are type date
45
+ # @param [Cell] cell The cell that is being serialized
46
+ # @param [String] str The string the serialized content will be appended to.
47
+ # @return [String]
48
+ def date(cell, str='')
49
+ value_serialization false, DateTimeConverter::date_to_serial(cell.value).to_s, str
50
+ end
51
+
52
+ # Serializes cells that are type time
53
+ # @param [Cell] cell The cell that is being serialized
54
+ # @param [String] str The string the serialized content will be appended to.
55
+ # @return [String]
56
+ def time(cell, str='')
57
+ value_serialization false, DateTimeConverter::time_to_serial(cell.value).to_s, str
58
+ end
59
+
60
+ # Serializes cells that are type boolean
61
+ # @param [Cell] cell The cell that is being serialized
62
+ # @param [String] str The string the serialized content will be appended to.
63
+ # @return [String]
64
+ def boolean(cell, str='')
65
+ value_serialization 'b', cell.value.to_s, str
66
+ end
67
+
68
+ # Serializes cells that are type float
69
+ # @param [Cell] cell The cell that is being serialized
70
+ # @param [String] str The string the serialized content will be appended to.
71
+ # @return [String]
72
+ def float(cell, str='')
73
+ numeric cell, str
74
+ end
75
+
76
+ # Serializes cells that are type integer
77
+ # @param [Cell] cell The cell that is being serialized
78
+ # @param [String] str The string the serialized content will be appended to.
79
+ # @return [String]
80
+ def integer(cell, str = '')
81
+ numeric cell, str
82
+ end
83
+
84
+ # Serializes cells that are type formula
85
+ # @param [Cell] cell The cell that is being serialized
86
+ # @param [String] str The string the serialized content will be appended to.
87
+ # @return [String]
88
+ def formula_serialization(cell, str='')
89
+ str << ('t="str"><f>' << cell.clean_value.to_s.sub('=', '') << '</f>')
90
+ str << ('<v>' << cell.formula_value.to_s << '</v>') unless cell.formula_value.nil?
91
+ end
92
+
93
+ # Serializes cells that are type array formula
94
+ # @param [Cell] cell The cell that is being serialized
95
+ # @param [String] str The string the serialized content will be appended to.
96
+ # @return [String]
97
+ def array_formula_serialization(cell, str='')
98
+ str << ('t="str">' << '<f t="array" ref="' << cell.r << '">' << cell.clean_value.to_s.sub('{=', '').sub(/}$/, '') << '</f>')
99
+ str << ('<v>' << cell.formula_value.to_s << '</v>') unless cell.formula_value.nil?
100
+ end
101
+
102
+ # Serializes cells that are type inline_string
103
+ # @param [Cell] cell The cell that is being serialized
104
+ # @param [String] str The string the serialized content will be appended to.
105
+ # @return [String]
106
+ def inline_string_serialization(cell, str = '')
107
+ str << 't="inlineStr"><is>'
108
+ run_xml_string cell, str
109
+ str << '</is>'
110
+ end
111
+
112
+ # Serializes cells that are type string
113
+ # @param [Cell] cell The cell that is being serialized
114
+ # @param [String] str The string the serialized content will be appended to.
115
+ # @return [String]
116
+ def string(cell, str='')
117
+ if cell.is_array_formula?
118
+ array_formula_serialization cell, str
119
+ elsif cell.is_formula?
120
+ formula_serialization cell, str
121
+ elsif !cell.ssti.nil?
122
+ value_serialization 's', cell.ssti, str
123
+ else
124
+ inline_string_serialization cell, str
125
+ end
126
+ end
127
+
128
+ # Serializes cells that are of the type richtext
129
+ # @param [Cell] cell The cell that is being serialized
130
+ # @param [String] str The string the serialized content will be appended to.
131
+ # @return [String]
132
+ def richtext(cell, str)
133
+ if cell.ssti.nil?
134
+ inline_string_serialization cell, str
135
+ else
136
+ value_serialization 's', cell.ssti, str
137
+ end
138
+ end
139
+
140
+ # Serializes cells that are of the type text
141
+ # @param [Cell] cell The cell that is being serialized
142
+ # @param [String] str The string the serialized content will be appended to.
143
+ # @return [String]
144
+ def text(cell, str)
145
+ if cell.ssti.nil?
146
+ inline_string_serialization cell, str
147
+ else
148
+ value_serialization 's', cell.ssti, str
149
+ end
150
+ end
151
+
152
+ private
153
+
154
+ def numeric(cell, str = '')
155
+ value_serialization 'n', cell.value, str
156
+ end
157
+
158
+ def value_serialization(serialization_type, serialization_value, str = '')
159
+ str << ('t="' << serialization_type.to_s << '"') if serialization_type
160
+ str << ('><v>' << serialization_value.to_s << '</v>')
161
+ end
162
+ end
163
+ end
164
+ end
@@ -1,60 +1,60 @@
1
- module Axlsx
2
- # Conditional Format Value Object
3
- # Describes the values of the interpolation points in a gradient scale. This object is used by ColorScale, DataBar and IconSet classes
4
- #
5
- # @note The recommended way to manage these rules is via Worksheet#add_conditional_formatting
6
- # @see Worksheet#add_conditional_formatting
7
- # @see ConditionalFormattingRule#initialize
8
- #
9
- class Cfvo
10
-
11
- include Axlsx::OptionsParser
12
- include Axlsx::SerializedAttributes
13
-
14
- # Creates a new Cfvo object
15
- # @option options [Symbol] type The type of conditional formatting value object
16
- # @option options [Boolean] gte threshold value usage indicator
17
- # @option options [String] val The value of the conditional formatting object
18
- def initialize(options={})
19
- @gte = true
20
- parse_options options
21
- end
22
-
23
- serializable_attributes :type, :gte, :val
24
-
25
- # Type (ST_CfvoType)
26
- # The type of this conditional formatting value object. options are num, percent, max, min, formula and percentile
27
- # @return [Symbol]
28
- attr_reader :type
29
-
30
- # Type (xsd:boolean)
31
- # For icon sets, determines whether this threshold value uses the greater than or equal to operator. 0 indicates 'greater than' is used instead of 'greater than or equal to'.
32
- # The default value is true
33
- # @return [Boolean]
34
- attr_reader :gte
35
-
36
- # Type (ST_Xstring)
37
- # The value of the conditional formatting object
38
- # This library will accept any value so long as it supports to_s
39
- attr_reader :val
40
-
41
- # @see type
42
- def type=(v); Axlsx::validate_conditional_formatting_value_object_type(v); @type = v end
43
-
44
- # @see gte
45
- def gte=(v); Axlsx::validate_boolean(v); @gte = v end
46
-
47
- # @see val
48
- def val=(v)
49
- raise ArgumentError, "#{v.inspect} must respond to to_s" unless v.respond_to?(:to_s)
50
- @val = v.to_s
51
- end
52
-
53
- # serialize the Csvo object
54
- # @param [String] str
55
- # @return [String]
56
- def to_xml_string(str = '')
57
- serialized_tag('cfvo', str)
58
- end
59
- end
60
- end
1
+ module Axlsx
2
+ # Conditional Format Value Object
3
+ # Describes the values of the interpolation points in a gradient scale. This object is used by ColorScale, DataBar and IconSet classes
4
+ #
5
+ # @note The recommended way to manage these rules is via Worksheet#add_conditional_formatting
6
+ # @see Worksheet#add_conditional_formatting
7
+ # @see ConditionalFormattingRule#initialize
8
+ #
9
+ class Cfvo
10
+
11
+ include Axlsx::OptionsParser
12
+ include Axlsx::SerializedAttributes
13
+
14
+ # Creates a new Cfvo object
15
+ # @option options [Symbol] type The type of conditional formatting value object
16
+ # @option options [Boolean] gte threshold value usage indicator
17
+ # @option options [String] val The value of the conditional formatting object
18
+ def initialize(options={})
19
+ @gte = true
20
+ parse_options options
21
+ end
22
+
23
+ serializable_attributes :type, :gte, :val
24
+
25
+ # Type (ST_CfvoType)
26
+ # The type of this conditional formatting value object. options are num, percent, max, min, formula and percentile
27
+ # @return [Symbol]
28
+ attr_reader :type
29
+
30
+ # Type (xsd:boolean)
31
+ # For icon sets, determines whether this threshold value uses the greater than or equal to operator. 0 indicates 'greater than' is used instead of 'greater than or equal to'.
32
+ # The default value is true
33
+ # @return [Boolean]
34
+ attr_reader :gte
35
+
36
+ # Type (ST_Xstring)
37
+ # The value of the conditional formatting object
38
+ # This library will accept any value so long as it supports to_s
39
+ attr_reader :val
40
+
41
+ # @see type
42
+ def type=(v); Axlsx::validate_conditional_formatting_value_object_type(v); @type = v end
43
+
44
+ # @see gte
45
+ def gte=(v); Axlsx::validate_boolean(v); @gte = v end
46
+
47
+ # @see val
48
+ def val=(v)
49
+ raise ArgumentError, "#{v.inspect} must respond to to_s" unless v.respond_to?(:to_s)
50
+ @val = v.to_s
51
+ end
52
+
53
+ # serialize the Csvo object
54
+ # @param [String] str
55
+ # @return [String]
56
+ def to_xml_string(str = '')
57
+ serialized_tag('cfvo', str)
58
+ end
59
+ end
60
+ end
@@ -1,18 +1,18 @@
1
- module Axlsx
2
-
3
- #A collection of Cfvo objects that initializes with the required
4
- #first two items
5
- class Cfvos < SimpleTypedList
6
-
7
- def initialize
8
- super(Cfvo)
9
- end
10
-
11
- # Serialize the Cfvo object
12
- # @param [String] str
13
- # @return [String]
14
- def to_xml_string(str='')
15
- each { |cfvo| cfvo.to_xml_string(str) }
16
- end
17
- end
18
- end
1
+ module Axlsx
2
+
3
+ #A collection of Cfvo objects that initializes with the required
4
+ #first two items
5
+ class Cfvos < SimpleTypedList
6
+
7
+ def initialize
8
+ super(Cfvo)
9
+ end
10
+
11
+ # Serialize the Cfvo object
12
+ # @param [String] str
13
+ # @return [String]
14
+ def to_xml_string(str='')
15
+ each { |cfvo| cfvo.to_xml_string(str) }
16
+ end
17
+ end
18
+ end