caxlsx 2.0.2

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 (305) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +9 -0
  3. data/.yardopts_guide +19 -0
  4. data/CHANGELOG.md +239 -0
  5. data/LICENSE +22 -0
  6. data/README.md +256 -0
  7. data/Rakefile +31 -0
  8. data/examples/2010_comments.rb +17 -0
  9. data/examples/anchor_swapping.rb +28 -0
  10. data/examples/auto_filter.rb +16 -0
  11. data/examples/basic_charts.rb +58 -0
  12. data/examples/chart_colors.rb +88 -0
  13. data/examples/colored_links.rb +59 -0
  14. data/examples/conditional_formatting/example_conditional_formatting.rb +74 -0
  15. data/examples/conditional_formatting/getting_barred.rb +37 -0
  16. data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
  17. data/examples/conditional_formatting/scaled_colors.rb +39 -0
  18. data/examples/conditional_formatting/stop_and_go.rb +37 -0
  19. data/examples/data_validation.rb +50 -0
  20. data/examples/example.rb +777 -0
  21. data/examples/extractive.rb +45 -0
  22. data/examples/image1.jpeg +0 -0
  23. data/examples/ios_preview.rb +14 -0
  24. data/examples/page_setup.rb +11 -0
  25. data/examples/pivot_table.rb +39 -0
  26. data/examples/sheet_protection.rb +10 -0
  27. data/examples/skydrive/real_example.rb +63 -0
  28. data/examples/styles.rb +66 -0
  29. data/examples/underline.rb +13 -0
  30. data/examples/wrap_text.rb +21 -0
  31. data/lib/axlsx.rb +152 -0
  32. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  33. data/lib/axlsx/content_type/content_type.rb +26 -0
  34. data/lib/axlsx/content_type/default.rb +25 -0
  35. data/lib/axlsx/content_type/override.rb +25 -0
  36. data/lib/axlsx/doc_props/app.rb +235 -0
  37. data/lib/axlsx/doc_props/core.rb +39 -0
  38. data/lib/axlsx/drawing/ax_data_source.rb +26 -0
  39. data/lib/axlsx/drawing/axes.rb +61 -0
  40. data/lib/axlsx/drawing/axis.rb +187 -0
  41. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  42. data/lib/axlsx/drawing/bar_series.rb +82 -0
  43. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  44. data/lib/axlsx/drawing/chart.rb +232 -0
  45. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  46. data/lib/axlsx/drawing/drawing.rb +162 -0
  47. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  48. data/lib/axlsx/drawing/hyperlink.rb +102 -0
  49. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  50. data/lib/axlsx/drawing/line_chart.rb +99 -0
  51. data/lib/axlsx/drawing/line_series.rb +81 -0
  52. data/lib/axlsx/drawing/marker.rb +84 -0
  53. data/lib/axlsx/drawing/num_data.rb +52 -0
  54. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  55. data/lib/axlsx/drawing/num_val.rb +32 -0
  56. data/lib/axlsx/drawing/one_cell_anchor.rb +98 -0
  57. data/lib/axlsx/drawing/pic.rb +205 -0
  58. data/lib/axlsx/drawing/picture_locking.rb +44 -0
  59. data/lib/axlsx/drawing/pie_3D_chart.rb +48 -0
  60. data/lib/axlsx/drawing/pie_series.rb +74 -0
  61. data/lib/axlsx/drawing/scaling.rb +60 -0
  62. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  63. data/lib/axlsx/drawing/scatter_series.rb +65 -0
  64. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  65. data/lib/axlsx/drawing/series.rb +69 -0
  66. data/lib/axlsx/drawing/series_title.rb +23 -0
  67. data/lib/axlsx/drawing/str_data.rb +42 -0
  68. data/lib/axlsx/drawing/str_val.rb +32 -0
  69. data/lib/axlsx/drawing/title.rb +78 -0
  70. data/lib/axlsx/drawing/two_cell_anchor.rb +92 -0
  71. data/lib/axlsx/drawing/val_axis.rb +37 -0
  72. data/lib/axlsx/drawing/view_3D.rb +115 -0
  73. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  74. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  75. data/lib/axlsx/package.rb +352 -0
  76. data/lib/axlsx/rels/relationship.rb +129 -0
  77. data/lib/axlsx/rels/relationships.rb +29 -0
  78. data/lib/axlsx/stylesheet/border.rb +71 -0
  79. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  80. data/lib/axlsx/stylesheet/cell_alignment.rb +134 -0
  81. data/lib/axlsx/stylesheet/cell_protection.rb +43 -0
  82. data/lib/axlsx/stylesheet/cell_style.rb +74 -0
  83. data/lib/axlsx/stylesheet/color.rb +78 -0
  84. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  85. data/lib/axlsx/stylesheet/fill.rb +35 -0
  86. data/lib/axlsx/stylesheet/font.rb +148 -0
  87. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  88. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  89. data/lib/axlsx/stylesheet/num_fmt.rb +79 -0
  90. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  91. data/lib/axlsx/stylesheet/styles.rb +420 -0
  92. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  93. data/lib/axlsx/stylesheet/table_style_element.rb +79 -0
  94. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  95. data/lib/axlsx/stylesheet/xf.rb +147 -0
  96. data/lib/axlsx/util/accessors.rb +64 -0
  97. data/lib/axlsx/util/constants.rb +392 -0
  98. data/lib/axlsx/util/options_parser.rb +15 -0
  99. data/lib/axlsx/util/parser.rb +44 -0
  100. data/lib/axlsx/util/serialized_attributes.rb +79 -0
  101. data/lib/axlsx/util/simple_typed_list.rb +203 -0
  102. data/lib/axlsx/util/storage.rb +146 -0
  103. data/lib/axlsx/util/validators.rb +300 -0
  104. data/lib/axlsx/version.rb +5 -0
  105. data/lib/axlsx/workbook/defined_name.rb +129 -0
  106. data/lib/axlsx/workbook/defined_names.rb +21 -0
  107. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  108. data/lib/axlsx/workbook/workbook.rb +354 -0
  109. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  110. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  111. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +246 -0
  112. data/lib/axlsx/workbook/worksheet/break.rb +37 -0
  113. data/lib/axlsx/workbook/worksheet/cell.rb +416 -0
  114. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +144 -0
  115. data/lib/axlsx/workbook/worksheet/cfvo.rb +62 -0
  116. data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
  117. data/lib/axlsx/workbook/worksheet/col.rb +144 -0
  118. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  119. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  120. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  121. data/lib/axlsx/workbook/worksheet/comment.rb +92 -0
  122. data/lib/axlsx/workbook/worksheet/comments.rb +85 -0
  123. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  124. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  125. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  126. data/lib/axlsx/workbook/worksheet/data_bar.rb +131 -0
  127. data/lib/axlsx/workbook/worksheet/data_validation.rb +244 -0
  128. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  129. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  130. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  131. data/lib/axlsx/workbook/worksheet/header_footer.rb +54 -0
  132. data/lib/axlsx/workbook/worksheet/icon_set.rb +83 -0
  133. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  134. data/lib/axlsx/workbook/worksheet/page_margins.rb +99 -0
  135. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  136. data/lib/axlsx/workbook/worksheet/page_setup.rb +242 -0
  137. data/lib/axlsx/workbook/worksheet/pane.rb +141 -0
  138. data/lib/axlsx/workbook/worksheet/pivot_table.rb +273 -0
  139. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  140. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  141. data/lib/axlsx/workbook/worksheet/print_options.rb +41 -0
  142. data/lib/axlsx/workbook/worksheet/protected_range.rb +49 -0
  143. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  144. data/lib/axlsx/workbook/worksheet/row.rb +172 -0
  145. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  146. data/lib/axlsx/workbook/worksheet/selection.rb +103 -0
  147. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  148. data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -0
  149. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  150. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +69 -0
  151. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +120 -0
  152. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  153. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  154. data/lib/axlsx/workbook/worksheet/table_style_info.rb +51 -0
  155. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  156. data/lib/axlsx/workbook/worksheet/worksheet.rb +769 -0
  157. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  158. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  159. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  160. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  161. data/lib/schema/dc.xsd +118 -0
  162. data/lib/schema/dcmitype.xsd +52 -0
  163. data/lib/schema/dcterms.xsd +331 -0
  164. data/lib/schema/dml-chart.xsd +1499 -0
  165. data/lib/schema/dml-chartDrawing.xsd +146 -0
  166. data/lib/schema/dml-compatibility.xsd +14 -0
  167. data/lib/schema/dml-diagram.xsd +1091 -0
  168. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  169. data/lib/schema/dml-main.xsd +3048 -0
  170. data/lib/schema/dml-picture.xsd +23 -0
  171. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  172. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  173. data/lib/schema/opc-contentTypes.xsd +42 -0
  174. data/lib/schema/opc-coreProperties.xsd +54 -0
  175. data/lib/schema/opc-digSig.xsd +49 -0
  176. data/lib/schema/opc-relationships.xsd +33 -0
  177. data/lib/schema/pml.xsd +1676 -0
  178. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  179. data/lib/schema/shared-bibliography.xsd +144 -0
  180. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  181. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  182. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  183. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  184. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  185. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  186. data/lib/schema/shared-math.xsd +582 -0
  187. data/lib/schema/shared-relationshipReference.xsd +25 -0
  188. data/lib/schema/sml.xsd +4434 -0
  189. data/lib/schema/vml-main.xsd +569 -0
  190. data/lib/schema/vml-officeDrawing.xsd +509 -0
  191. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  192. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  193. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  194. data/lib/schema/wml.xsd +3644 -0
  195. data/lib/schema/xml.xsd +116 -0
  196. data/test/benchmark.rb +72 -0
  197. data/test/content_type/tc_content_type.rb +76 -0
  198. data/test/content_type/tc_default.rb +16 -0
  199. data/test/content_type/tc_override.rb +14 -0
  200. data/test/doc_props/tc_app.rb +43 -0
  201. data/test/doc_props/tc_core.rb +42 -0
  202. data/test/drawing/tc_axes.rb +8 -0
  203. data/test/drawing/tc_axis.rb +85 -0
  204. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  205. data/test/drawing/tc_bar_series.rb +37 -0
  206. data/test/drawing/tc_cat_axis.rb +31 -0
  207. data/test/drawing/tc_cat_axis_data.rb +27 -0
  208. data/test/drawing/tc_chart.rb +110 -0
  209. data/test/drawing/tc_d_lbls.rb +57 -0
  210. data/test/drawing/tc_data_source.rb +17 -0
  211. data/test/drawing/tc_drawing.rb +80 -0
  212. data/test/drawing/tc_graphic_frame.rb +27 -0
  213. data/test/drawing/tc_hyperlink.rb +64 -0
  214. data/test/drawing/tc_line_3d_chart.rb +47 -0
  215. data/test/drawing/tc_line_chart.rb +39 -0
  216. data/test/drawing/tc_line_series.rb +30 -0
  217. data/test/drawing/tc_marker.rb +44 -0
  218. data/test/drawing/tc_named_axis_data.rb +27 -0
  219. data/test/drawing/tc_num_data.rb +31 -0
  220. data/test/drawing/tc_num_val.rb +29 -0
  221. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  222. data/test/drawing/tc_pic.rb +107 -0
  223. data/test/drawing/tc_picture_locking.rb +72 -0
  224. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  225. data/test/drawing/tc_pie_series.rb +32 -0
  226. data/test/drawing/tc_scaling.rb +36 -0
  227. data/test/drawing/tc_scatter_chart.rb +48 -0
  228. data/test/drawing/tc_scatter_series.rb +21 -0
  229. data/test/drawing/tc_ser_axis.rb +31 -0
  230. data/test/drawing/tc_series.rb +23 -0
  231. data/test/drawing/tc_series_title.rb +33 -0
  232. data/test/drawing/tc_str_data.rb +18 -0
  233. data/test/drawing/tc_str_val.rb +21 -0
  234. data/test/drawing/tc_title.rb +49 -0
  235. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  236. data/test/drawing/tc_val_axis.rb +24 -0
  237. data/test/drawing/tc_view_3D.rb +54 -0
  238. data/test/drawing/tc_vml_drawing.rb +25 -0
  239. data/test/drawing/tc_vml_shape.rb +106 -0
  240. data/test/profile.rb +24 -0
  241. data/test/rels/tc_relationship.rb +44 -0
  242. data/test/rels/tc_relationships.rb +37 -0
  243. data/test/stylesheet/tc_border.rb +37 -0
  244. data/test/stylesheet/tc_border_pr.rb +32 -0
  245. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  246. data/test/stylesheet/tc_cell_protection.rb +29 -0
  247. data/test/stylesheet/tc_cell_style.rb +57 -0
  248. data/test/stylesheet/tc_color.rb +43 -0
  249. data/test/stylesheet/tc_dxf.rb +81 -0
  250. data/test/stylesheet/tc_fill.rb +18 -0
  251. data/test/stylesheet/tc_font.rb +121 -0
  252. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  253. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  254. data/test/stylesheet/tc_num_fmt.rb +30 -0
  255. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  256. data/test/stylesheet/tc_styles.rb +235 -0
  257. data/test/stylesheet/tc_table_style.rb +44 -0
  258. data/test/stylesheet/tc_table_style_element.rb +45 -0
  259. data/test/stylesheet/tc_table_styles.rb +29 -0
  260. data/test/stylesheet/tc_xf.rb +120 -0
  261. data/test/tc_axlsx.rb +72 -0
  262. data/test/tc_helper.rb +10 -0
  263. data/test/tc_package.rb +227 -0
  264. data/test/util/tc_serialized_attributes.rb +19 -0
  265. data/test/util/tc_simple_typed_list.rb +78 -0
  266. data/test/util/tc_validators.rb +186 -0
  267. data/test/workbook/tc_defined_name.rb +41 -0
  268. data/test/workbook/tc_shared_strings_table.rb +44 -0
  269. data/test/workbook/tc_workbook.rb +125 -0
  270. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  271. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  272. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  273. data/test/workbook/worksheet/tc_break.rb +49 -0
  274. data/test/workbook/worksheet/tc_cell.rb +319 -0
  275. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  276. data/test/workbook/worksheet/tc_col.rb +78 -0
  277. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  278. data/test/workbook/worksheet/tc_comment.rb +72 -0
  279. data/test/workbook/worksheet/tc_comments.rb +57 -0
  280. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  281. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  282. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  283. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  284. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  285. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  286. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  287. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  288. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  289. data/test/workbook/worksheet/tc_pane.rb +54 -0
  290. data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
  291. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  292. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  293. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  294. data/test/workbook/worksheet/tc_row.rb +117 -0
  295. data/test/workbook/worksheet/tc_selection.rb +55 -0
  296. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  297. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  298. data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
  299. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  300. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  301. data/test/workbook/worksheet/tc_table.rb +68 -0
  302. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  303. data/test/workbook/worksheet/tc_worksheet.rb +538 -0
  304. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  305. metadata +546 -0
@@ -0,0 +1,144 @@
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
+
7
+
8
+ # Calls the proper serialization method based on type.
9
+ # @param [Integer] row_index The index of the cell's row
10
+ # @param [Integer] column_index The index of the cell's column
11
+ # @param [String] str The string to apend serialization to.
12
+ # @return [String]
13
+ def to_xml_string(row_index, column_index, cell, str='')
14
+ str << '<c r="' << Axlsx::cell_r(column_index, row_index) << '" s="' << cell.style.to_s << '" '
15
+ return str << '/>' if cell.value.nil?
16
+ method = (cell.type.to_s << '_type_serialization').to_sym
17
+ self.send(method, cell, str)
18
+ str << '</c>'
19
+ end
20
+
21
+
22
+ # builds an xml text run based on this cells attributes.
23
+ # @param [String] str The string instance this run will be concated to.
24
+ # @return [String]
25
+ def run_xml_string(cell, str = '')
26
+ if cell.is_text_run?
27
+ data = cell.instance_values.reject{|key, value| value == nil || key == 'value' || key == 'type' }
28
+ keys = data.keys & Cell::INLINE_STYLES
29
+ str << "<r><rPr>"
30
+ keys.each do |key|
31
+ case key
32
+ when 'font_name'
33
+ str << "<rFont val='"<< cell.font_name << "'/>"
34
+ when 'color'
35
+ str << data[key].to_xml_string
36
+ else
37
+ str << "<" << key.to_s << " val='" << data[key].to_s << "'/>"
38
+ end
39
+ end
40
+ str << "</rPr>" << "<t>" << cell.value.to_s << "</t></r>"
41
+ else
42
+ str << "<t>" << cell.value.to_s << "</t>"
43
+ end
44
+ str
45
+ end
46
+
47
+ # serializes cells that are type iso_8601
48
+ # @param [Cell] cell The cell that is being serialized
49
+ # @param [String] str The string the serialized content will be appended to.
50
+ # @return [String]
51
+ def iso_8601_type_serialization(cell, str='')
52
+ value_serialization 'd', cell.value, str
53
+ end
54
+
55
+
56
+ # serializes cells that are type date
57
+ # @param [Cell] cell The cell that is being serialized
58
+ # @param [String] str The string the serialized content will be appended to.
59
+ # @return [String]
60
+ def date_type_serialization(cell, str='')
61
+ value_serialization false, DateTimeConverter::date_to_serial(cell.value).to_s, str
62
+ end
63
+
64
+ # Serializes cells that are type time
65
+ # @param [Cell] cell The cell that is being serialized
66
+ # @param [String] str The string the serialized content will be appended to.
67
+ # @return [String]
68
+ def time_type_serialization(cell, str='')
69
+ value_serialization false, DateTimeConverter::time_to_serial(cell.value).to_s, str
70
+ end
71
+
72
+ # Serializes cells that are type boolean
73
+ # @param [Cell] cell The cell that is being serialized
74
+ # @param [String] str The string the serialized content will be appended to.
75
+ # @return [String]
76
+ def boolean_type_serialization(cell, str='')
77
+ value_serialization 'b', cell.value.to_s, str
78
+ end
79
+
80
+ # Serializes cells that are type float
81
+ # @param [Cell] cell The cell that is being serialized
82
+ # @param [String] str The string the serialized content will be appended to.
83
+ # @return [String]
84
+ def float_type_serialization(cell, str='')
85
+ numeric_type_serialization cell, str
86
+ end
87
+
88
+ # Serializes cells that are type integer
89
+ # @param [Cell] cell The cell that is being serialized
90
+ # @param [String] str The string the serialized content will be appended to.
91
+ # @return [String]
92
+ def integer_type_serialization(cell, str = '')
93
+ numeric_type_serialization cell, str
94
+ end
95
+
96
+
97
+ # Serializes cells that are type formula
98
+ # @param [Cell] cell The cell that is being serialized
99
+ # @param [String] str The string the serialized content will be appended to.
100
+ # @return [String]
101
+ def formula_serialization(cell, str='')
102
+ str << 't="str">' << '<f>' << cell.value.to_s.sub('=', '') << '</f>'
103
+ str << '<v>' << cell.formula_value.to_s << '</v>' unless cell.formula_value.nil?
104
+ end
105
+
106
+ # Serializes cells that are type inline_string
107
+ # @param [Cell] cell The cell that is being serialized
108
+ # @param [String] str The string the serialized content will be appended to.
109
+ # @return [String]
110
+ def inline_string_serialization(cell, str = '')
111
+ str << 't="inlineStr">' << '<is>'
112
+ run_xml_string cell, str
113
+ str << '</is>'
114
+ end
115
+
116
+ # Serializes cells that are type string
117
+ # @param [Cell] cell The cell that is being serialized
118
+ # @param [String] str The string the serialized content will be appended to.
119
+ # @return [String]
120
+ def string_type_serialization(cell, str='')
121
+ if cell.is_formula?
122
+ formula_serialization cell, str
123
+ elsif !cell.ssti.nil?
124
+ value_serialization 's', cell.ssti.to_s, str
125
+ else
126
+ inline_string_serialization cell, str
127
+ end
128
+ end
129
+
130
+ private
131
+
132
+ def numeric_type_serialization(cell, str = '')
133
+ value_serialization 'n', cell.value.to_s, str
134
+ end
135
+
136
+ def value_serialization(serialization_type, serialization_value, str = '')
137
+ str << 't="' << serialization_type << '"' if serialization_type
138
+ str << '><v>' << serialization_value << '</v>'
139
+ end
140
+
141
+
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,62 @@
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
+ str << '<cfvo '
58
+ serialized_attributes str
59
+ str << ' />'
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,15 @@
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
+ def to_xml_string(str='')
12
+ @list.each { |cfvo| cfvo.to_xml_string(str) }
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,144 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+
4
+ # The Col class defines column attributes for columns in sheets.
5
+ class Col
6
+
7
+ include Axlsx::OptionsParser
8
+ include Axlsx::SerializedAttributes
9
+ # Create a new Col objects
10
+ # @param min First column affected by this 'column info' record.
11
+ # @param max Last column affected by this 'column info' record.
12
+ # @option options [Boolean] collapsed see Col#collapsed
13
+ # @option options [Boolean] hidden see Col#hidden
14
+ # @option options [Boolean] outlineLevel see Col#outlineLevel
15
+ # @option options [Boolean] phonetic see Col#phonetic
16
+ # @option options [Integer] style see Col#style
17
+ # @option options [Numeric] width see Col#width
18
+ def initialize(min, max, options={})
19
+ Axlsx.validate_unsigned_int(max)
20
+ Axlsx.validate_unsigned_int(min)
21
+ @min = min
22
+ @max = max
23
+ parse_options options
24
+ end
25
+
26
+ serializable_attributes :collapsed, :hidden, :outline_level, :phonetic, :style, :width, :min, :max, :best_fit, :custom_width
27
+
28
+ # First column affected by this 'column info' record.
29
+ # @return [Integer]
30
+ attr_reader :min
31
+
32
+ # Last column affected by this 'column info' record.
33
+ # @return [Integer]
34
+ attr_reader :max
35
+
36
+ # Flag indicating if the specified column(s) is set to 'best fit'. 'Best fit' is set to true under these conditions:
37
+ # The column width has never been manually set by the user, AND The column width is not the default width
38
+ # 'Best fit' means that when numbers are typed into a cell contained in a 'best fit' column, the column width should
39
+ # automatically resize to display the number. [Note: In best fit cases, column width must not be made smaller, only larger. end note]
40
+ # @return [Boolean]
41
+ attr_reader :best_fit
42
+ alias :bestFit :best_fit
43
+
44
+ # Flag indicating if the outlining of the affected column(s) is in the collapsed state.
45
+ # @return [Boolean]
46
+ attr_reader :collapsed
47
+
48
+ # Flag indicating if the affected column(s) are hidden on this worksheet.
49
+ # @return [Boolean]
50
+ attr_reader :hidden
51
+
52
+ # Outline level of affected column(s). Range is 0 to 7.
53
+ # @return [Integer]
54
+ attr_reader :outline_level
55
+ alias :outlineLevel :outline_level
56
+
57
+ # Flag indicating if the phonetic information should be displayed by default for the affected column(s) of the worksheet.
58
+ # @return [Boolean]
59
+ attr_reader :phonetic
60
+
61
+ # Default style for the affected column(s). Affects cells not yet allocated in the column(s). In other words, this style applies to new columns.
62
+ # @return [Integer]
63
+ attr_reader :style
64
+
65
+ # The width of the column
66
+ # @return [Numeric]
67
+ attr_reader :width
68
+
69
+ # @return [Boolean]
70
+ attr_reader :custom_width
71
+ alias :customWidth :custom_width
72
+
73
+ # @see Col#collapsed
74
+ def collapsed=(v)
75
+ Axlsx.validate_boolean(v)
76
+ @collapsed = v
77
+ end
78
+
79
+ # @see Col#hidden
80
+ def hidden=(v)
81
+ Axlsx.validate_boolean(v)
82
+ @hidden = v
83
+ end
84
+
85
+ # @see Col#outline
86
+ def outline_level=(v)
87
+ Axlsx.validate_unsigned_numeric(v)
88
+ raise ArgumentError, 'outlineLevel must be between 0 and 7' unless 0 <= v && v <= 7
89
+ @outline_level = v
90
+ end
91
+ alias :outlineLevel= :outline_level=
92
+
93
+ # @see Col#phonetic
94
+ def phonetic=(v)
95
+ Axlsx.validate_boolean(v)
96
+ @phonetic = v
97
+ end
98
+
99
+ # @see Col#style
100
+ def style=(v)
101
+ Axlsx.validate_unsigned_int(v)
102
+ @style = v
103
+ end
104
+
105
+ # @see Col#width
106
+ def width=(v)
107
+ # Removing this validation make a 10% difference in performance
108
+ # as it is called EVERY TIME A CELL IS ADDED - the proper solution
109
+ # is to only set this if a calculated value is greated than the
110
+ # current @width value.
111
+ # TODO!!!
112
+ #Axlsx.validate_unsigned_numeric(v) unless v == nil
113
+ @custom_width = @best_fit = v != nil
114
+ @width = v
115
+ end
116
+
117
+ # updates the width for this col based on the cells autowidth and
118
+ # an optionally specified fixed width
119
+ # @param [Cell] cell The cell to use in updating this col's width
120
+ # @param [Integer] fixed_width If this is specified the width is set
121
+ # to this value and the cell's attributes are ignored.
122
+ # @param [Boolean] use_autowidth If this is false, the cell's
123
+ # autowidth value will be ignored.
124
+ def update_width(cell, fixed_width=nil, use_autowidth=true)
125
+ if fixed_width.is_a? Numeric
126
+ self.width = fixed_width
127
+ elsif use_autowidth
128
+ cell_width = cell.autowidth
129
+ self.width = cell_width unless (width || 0) > (cell_width || 0)
130
+ #self.width = [width || 0, cell.autowidth || 0].max
131
+ end
132
+ end
133
+
134
+ # Serialize this columns data to an xml string
135
+ # @param [String] str
136
+ # @return [String]
137
+ def to_xml_string(str = '')
138
+ str << '<col '
139
+ serialized_attributes str
140
+ str << '/>'
141
+ end
142
+
143
+ end
144
+ end
@@ -0,0 +1,35 @@
1
+ module Axlsx
2
+
3
+ # A collection of Brake objects.
4
+ # Please do not use this class directly. Instead use
5
+ # Worksheet#add_break
6
+ class ColBreaks < SimpleTypedList
7
+
8
+ # Instantiates a new list restricted to Break types
9
+ def initialize
10
+ super Break
11
+ end
12
+
13
+ # A column break specific helper for adding a break.
14
+ # @param [Hash] options A list of options to pass into the Break object
15
+ # The max and man options are fixed, however any other valid option for
16
+ # Break will be passed to the created break object.
17
+ # @see Break
18
+ def add_break(options)
19
+ @list << Break.new(options.merge(:max => 1048575, :man => true))
20
+ last
21
+ end
22
+
23
+ # Serialize the collection to xml
24
+ # @param [String] str The string to append this lists xml to.
25
+ # <colBreaks count="1" manualBreakCount="1">
26
+ # <brk id="3" max="1048575" man="1"/>
27
+ # </colBreaks>
28
+ def to_xml_string(str='')
29
+ return if empty?
30
+ str << '<colBreaks count="' << @list.size.to_s << '" manualBreakCount="' << @list.size.to_s << '">'
31
+ each { |brk| brk.to_xml_string(str) }
32
+ str << '</colBreaks>'
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,110 @@
1
+ module Axlsx
2
+ # Conditional Format Rule color scale object
3
+ # Describes a gradated color scale in this conditional formatting rule.
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
+ class ColorScale
9
+
10
+ class << self
11
+
12
+ # These are the default conditional formatting value objects
13
+ # that define a two tone color gradient.
14
+ def default_cfvos
15
+ [{:type => :min, :val => 0, :color => 'FFFF7128'},
16
+ {:type => :max, :val => 0, :color => 'FFFFEF9C'}]
17
+ end
18
+
19
+ # A builder for two tone color gradient
20
+ # @example
21
+ # # this creates a two tone color scale
22
+ # color_scale = Axlsx::ColorScale.two_tone
23
+ # @see examples/example.rb conditional formatting examples.
24
+ def two_tone
25
+ self.new
26
+ end
27
+
28
+ # A builder for three tone color gradient
29
+ # @example
30
+ # #this creates a three tone color scale
31
+ # color_scale = Axlsx::ColorScale.three_tone
32
+ # @see examples/example.rb conditional formatting examples.
33
+ def three_tone
34
+ self.new({:type => :min, :val => 0, :color => 'FFF8696B'},
35
+ {:type => :percent, :val => '50', :color => 'FFFFEB84'},
36
+ {:type => :max, :val => 0, :color => 'FF63BE7B'})
37
+ end
38
+ end
39
+ # A simple typed list of cfvos
40
+ # @return [SimpleTypedList]
41
+ # @see Cfvo
42
+ def value_objects
43
+ @value_objects ||= Cfvos.new
44
+ end
45
+
46
+ # A simple types list of colors
47
+ # @return [SimpleTypedList]
48
+ # @see Color
49
+ def colors
50
+ @colors ||= SimpleTypedList.new Color
51
+ end
52
+
53
+ # creates a new ColorScale object.
54
+ # @see Cfvo
55
+ # @see Color
56
+ # @example
57
+ # color_scale = Axlsx::ColorScale.new({:type => :num, :val => 0.55, :color => 'fff7696c'})
58
+ def initialize(*cfvos)
59
+ initialize_default_cfvos(cfvos)
60
+ yield self if block_given?
61
+ end
62
+
63
+ # adds a new cfvo / color pair to the color scale and returns a hash containing
64
+ # a reference to the newly created cfvo and color objects so you can alter the default properties.
65
+ # @return [Hash] a hash with :cfvo and :color keys referencing the newly added objects.
66
+ # @param [Hash] options options for the new cfvo and color objects
67
+ # @option [Symbol] type The type of cfvo you to add
68
+ # @option [Any] val The value of the cfvo to add
69
+ # @option [String] The rgb color for the cfvo
70
+ def add(options={})
71
+ value_objects << Cfvo.new(:type => options[:type] || :min, :val => options[:val] || 0)
72
+ colors << Color.new(:rgb => options[:color] || "FF000000")
73
+ {:cfvo => value_objects.last, :color => colors.last}
74
+ end
75
+
76
+
77
+ # removes the cfvo and color pair at the index specified.
78
+ # @param [Integer] index The index of the cfvo and color object to delete
79
+ # @note you cannot remove the first two cfvo and color pairs
80
+ def delete_at(index=2)
81
+ value_objects.delete_at index
82
+ colors.delete_at index
83
+ end
84
+
85
+ # Serialize this color_scale object data to an xml string
86
+ # @param [String] str
87
+ # @return [String]
88
+ def to_xml_string(str = '')
89
+ str << '<colorScale>'
90
+ value_objects.to_xml_string(str)
91
+ colors.each { |color| color.to_xml_string(str) }
92
+ str << '</colorScale>'
93
+ end
94
+
95
+ private
96
+ # There has got to be cleaner way of merging these arrays.
97
+ def initialize_default_cfvos(user_cfvos)
98
+ defaults = self.class.default_cfvos
99
+ user_cfvos.each_with_index do |cfvo, index|
100
+ if index < defaults.size
101
+ cfvo = defaults[index].merge(cfvo)
102
+ end
103
+ add cfvo
104
+ end
105
+ while colors.size < defaults.size
106
+ add defaults[colors.size - 1]
107
+ end
108
+ end
109
+ end
110
+ end