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,25 @@
1
+ module Axlsx
2
+
3
+ # A simple, self serializing class for storing conditional formattings
4
+ class ConditionalFormattings < SimpleTypedList
5
+
6
+ # creates a new Tables object
7
+ def initialize(worksheet)
8
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
9
+ super ConditionalFormatting
10
+ @worksheet = worksheet
11
+ end
12
+
13
+ # The worksheet that owns this collection of tables
14
+ # @return [Worksheet]
15
+ attr_reader :worksheet
16
+
17
+ # serialize the conditional formattings
18
+ def to_xml_string(str = "")
19
+ return if empty?
20
+ each { |item| item.to_xml_string(str) }
21
+ end
22
+ end
23
+
24
+ end
25
+
@@ -0,0 +1,131 @@
1
+ module Axlsx
2
+ # Conditional Format Rule data bar object
3
+ # Describes a data bar 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 DataBar
9
+
10
+ include Axlsx::OptionsParser
11
+ include Axlsx::SerializedAttributes
12
+
13
+ class << self
14
+ # This differs from ColorScale. There must be exactly two cfvos one color
15
+ def default_cfvos
16
+ [{:type => :min, :val => "0"},
17
+ {:type => :max, :val => "0"}]
18
+ end
19
+ end
20
+
21
+ # Creates a new data bar conditional formatting object
22
+ # @param [Hash] options
23
+ # @option options [Integer] minLength
24
+ # @option options [Integer] maxLength
25
+ # @option options [Boolean] showValue
26
+ # @option options [String] color - the rbg value used to color the bars
27
+ # @param [Array] cfvos hashes defining the gradient interpolation points for this formatting.
28
+ def initialize(options = {}, *cfvos)
29
+ @min_length = 10
30
+ @max_length = 90
31
+ @show_value = true
32
+ parse_options options
33
+ initialize_cfvos(cfvos)
34
+ yield self if block_given?
35
+ end
36
+
37
+ serializable_attributes :min_length, :max_length, :show_value
38
+
39
+ # instance values that must be serialized as their own elements - e.g. not attributes.
40
+ CHILD_ELEMENTS = [:value_objects, :color]
41
+
42
+ # minLength attribute
43
+ # The minimum length of the data bar, as a percentage of the cell width.
44
+ # The default value is 10
45
+ # @return [Integer]
46
+ attr_reader :min_length
47
+ alias :minLength :min_length
48
+
49
+ # maxLength attribute
50
+ # The maximum length of the data bar, as a percentage of the cell width.
51
+ # The default value is 90
52
+ # @return [Integer]
53
+ attr_reader :max_length
54
+ alias :maxLength :max_length
55
+
56
+ # maxLength attribute
57
+ # Indicates whether to show the values of the cells on which this data bar is applied.
58
+ # The default value is true
59
+ # @return [Boolean]
60
+ attr_reader :show_value
61
+ alias :showValue :show_value
62
+
63
+ # A simple typed list of cfvos
64
+ # @return [SimpleTypedList]
65
+ # @see Cfvo
66
+ def value_objects
67
+ @value_objects ||= Cfvos.new
68
+ end
69
+
70
+ # color
71
+ # the color object used in the data bar formatting
72
+ # @return [Color]
73
+ def color
74
+ @color ||= Color.new :rgb => "FF0000FF"
75
+ end
76
+
77
+ # @see minLength
78
+ def min_length=(v)
79
+ Axlsx.validate_unsigned_int(v)
80
+ @min_length = v
81
+ end
82
+ alias :minLength= :min_length=
83
+
84
+ # @see maxLength
85
+ def max_length=(v)
86
+ Axlsx.validate_unsigned_int(v)
87
+ @max_length = v
88
+ end
89
+ alias :maxLength= :max_length=
90
+
91
+ # @see showValue
92
+ def show_value=(v)
93
+ Axlsx.validate_boolean(v)
94
+ @show_value = v
95
+ end
96
+ alias :showValue= :show_value=
97
+
98
+ # Sets the color for the data bars.
99
+ # @param [Color|String] v The color object, or rgb string value to apply
100
+ def color=(v)
101
+ @color = v if v.is_a? Color
102
+ self.color.rgb = v if v.is_a? String
103
+ @color
104
+ end
105
+
106
+ # Serialize this object to an xml string
107
+ # @param [String] str
108
+ # @return [String]
109
+ def to_xml_string(str="")
110
+ str << '<dataBar '
111
+ serialized_attributes str
112
+ str << '>'
113
+ value_objects.to_xml_string(str)
114
+ self.color.to_xml_string(str)
115
+ str << '</dataBar>'
116
+ end
117
+
118
+ private
119
+
120
+ def initialize_cfvos(cfvos)
121
+ self.class.default_cfvos.each_with_index.map do |default, index|
122
+ if index < cfvos.size
123
+ value_objects << Cfvo.new(default.merge(cfvos[index]))
124
+ else
125
+ value_objects << Cfvo.new(default)
126
+ end
127
+ end
128
+ end
129
+
130
+ end
131
+ end
@@ -0,0 +1,244 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # Data validation allows the validation of cell data
4
+ #
5
+ # @note The recommended way to manage data validations is via Worksheet#add_data_validation
6
+ # @see Worksheet#add_data_validation
7
+ class DataValidation
8
+ include Axlsx::OptionsParser
9
+
10
+ # Creates a new {DataValidation} object
11
+ # @option options [String] formula1
12
+ # @option options [String] formula2
13
+ # @option options [Boolean] allowBlank - A boolean value indicating whether the data validation allows the use of empty or blank entries.
14
+ # @option options [String] error - Message text of error alert.
15
+ # @option options [Symbol] errorStyle - The style of error alert used for this data validation.
16
+ # @option options [String] errorTitle - itle bar text of error alert.
17
+ # @option options [Symbol] operator - The relational operator used with this data validation.
18
+ # @option options [String] prompt - Message text of input prompt.
19
+ # @option options [String] promptTitle - Title bar text of input prompt.
20
+ # @option options [Boolean] showDropDown - A boolean value indicating whether to display a dropdown combo box for a list type data validation
21
+ # @option options [Boolean] showErrorMessage - A boolean value indicating whether to display the error alert message when an invalid value has been entered, according to the criteria specified.
22
+ # @option options [Boolean] showInputMessage - A boolean value indicating whether to display the input prompt message.
23
+ # @option options [String] sqref - Range over which data validation is applied, in "A1:B2" format.
24
+ # @option options [Symbol] type - The type of data validation.
25
+ def initialize(options={})
26
+ # defaults
27
+ @formula1 = @formula2 = @error = @errorTitle = @operator = @prompt = @promptTitle = @sqref = nil
28
+ @allowBlank = @showErrorMessage = true
29
+ @showDropDown = @showInputMessage = false
30
+ @type = :none
31
+ @errorStyle = :stop
32
+ parse_options options
33
+ end
34
+
35
+ # instance values that must be serialized as their own elements - e.g. not attributes.
36
+ CHILD_ELEMENTS = [:formula1, :formula2]
37
+
38
+ # Formula1
39
+ # Available for type whole, decimal, date, time, textLength, list, custom
40
+ # @see type
41
+ # @return [String]
42
+ # default nil
43
+ attr_reader :formula1
44
+
45
+ # Formula2
46
+ # Available for type whole, decimal, date, time, textLength
47
+ # @see type
48
+ # @return [String]
49
+ # default nil
50
+ attr_reader :formula2
51
+
52
+ # Allow Blank
53
+ # A boolean value indicating whether the data validation allows the use of empty or blank
54
+ # entries. 1 means empty entries are OK and do not violate the validation constraints.
55
+ # Available for type whole, decimal, date, time, textLength, list, custom
56
+ # @see type
57
+ # @return [Boolean]
58
+ # default true
59
+ attr_reader :allowBlank
60
+
61
+ # Error Message
62
+ # Message text of error alert.
63
+ # Available for type whole, decimal, date, time, textLength, list, custom
64
+ # @see type
65
+ # @return [String]
66
+ # default nil
67
+ attr_reader :error
68
+
69
+ # Error Style (ST_DataValidationErrorStyle)
70
+ # The style of error alert used for this data validation.
71
+ # Options are:
72
+ # * information: This data validation error style uses an information icon in the error alert.
73
+ # * stop: This data validation error style uses a stop icon in the error alert.
74
+ # * warning: This data validation error style uses a warning icon in the error alert.
75
+ # Available for type whole, decimal, date, time, textLength, list, custom
76
+ # @see type
77
+ # @return [Symbol]
78
+ # default :stop
79
+ attr_reader :errorStyle
80
+
81
+ # Error Title
82
+ # Title bar text of error alert.
83
+ # Available for type whole, decimal, date, time, textLength, list, custom
84
+ # @see type
85
+ # @return [String]
86
+ # default nil
87
+ attr_reader :errorTitle
88
+
89
+ # Operator (ST_DataValidationOperator)
90
+ # The relational operator used with this data validation.
91
+ # Options are:
92
+ # * between: Data validation which checks if a value is between two other values.
93
+ # * equal: Data validation which checks if a value is equal to a specified value.
94
+ # * greater_than: Data validation which checks if a value is greater than a specified value.
95
+ # * greater_than_or_equal: Data validation which checks if a value is greater than or equal to a specified value.
96
+ # * less_than: Data validation which checks if a value is less than a specified value.
97
+ # * less_than_or_equal: Data validation which checks if a value is less than or equal to a specified value.
98
+ # * not_between: Data validation which checks if a value is not between two other values.
99
+ # * not_equal: Data validation which checks if a value is not equal to a specified value.
100
+ # Available for type whole, decimal, date, time, textLength
101
+ # @see type
102
+ # @return [Symbol]
103
+ # default nil
104
+ attr_reader :operator
105
+
106
+ # Input prompt
107
+ # Message text of input prompt.
108
+ # Available for type whole, decimal, date, time, textLength, list, custom
109
+ # @see type
110
+ # @return [String]
111
+ # default nil
112
+ attr_reader :prompt
113
+
114
+ # Prompt title
115
+ # Title bar text of input prompt.
116
+ # Available for type whole, decimal, date, time, textLength, list, custom
117
+ # @see type
118
+ # @return [String]
119
+ # default nil
120
+ attr_reader :promptTitle
121
+
122
+ # Show drop down
123
+ # A boolean value indicating whether to display a dropdown combo box for a list type data
124
+ # validation. Be careful: false shows the dropdown list!
125
+ # Available for type list
126
+ # @see type
127
+ # @return [Boolean]
128
+ # default false
129
+ attr_reader :showDropDown
130
+
131
+ # Show error message
132
+ # A boolean value indicating whether to display the error alert message when an invalid
133
+ # value has been entered, according to the criteria specified.
134
+ # Available for type whole, decimal, date, time, textLength, list, custom
135
+ # @see type
136
+ # @return [Boolean]
137
+ # default false
138
+ attr_reader :showErrorMessage
139
+
140
+ # Show input message
141
+ # A boolean value indicating whether to display the input prompt message.
142
+ # Available for type whole, decimal, date, time, textLength, list, custom
143
+ # @see type
144
+ # @return [Boolean]
145
+ # default false
146
+ attr_reader :showInputMessage
147
+
148
+ # Range over which data validation is applied, in "A1:B2" format
149
+ # Available for type whole, decimal, date, time, textLength, list, custom
150
+ # @see type
151
+ # @return [String]
152
+ # default nil
153
+ attr_reader :sqref
154
+
155
+ # The type (ST_DataValidationType) of data validation.
156
+ # Options are:
157
+ # * custom: Data validation which uses a custom formula to check the cell value.
158
+ # * date: Data validation which checks for date values satisfying the given condition.
159
+ # * decimal: Data validation which checks for decimal values satisfying the given condition.
160
+ # * list: Data validation which checks for a value matching one of list of values.
161
+ # * none: No data validation.
162
+ # * textLength: Data validation which checks for text values, whose length satisfies the given condition.
163
+ # * time: Data validation which checks for time values satisfying the given condition.
164
+ # * whole: Data validation which checks for whole number values satisfying the given condition.
165
+ # @return [Symbol]
166
+ # default none
167
+ attr_reader :type
168
+
169
+
170
+ # @see formula1
171
+ def formula1=(v); Axlsx::validate_string(v); @formula1 = v end
172
+
173
+ # @see formula2
174
+ def formula2=(v); Axlsx::validate_string(v); @formula2 = v end
175
+
176
+ # @see allowBlank
177
+ def allowBlank=(v); Axlsx::validate_boolean(v); @allowBlank = v end
178
+
179
+ # @see error
180
+ def error=(v); Axlsx::validate_string(v); @error = v end
181
+
182
+ # @see errorStyle
183
+ def errorStyle=(v); Axlsx::validate_data_validation_error_style(v); @errorStyle = v end
184
+
185
+ # @see errorTitle
186
+ def errorTitle=(v); Axlsx::validate_string(v); @errorTitle = v end
187
+
188
+ # @see operator
189
+ def operator=(v); Axlsx::validate_data_validation_operator(v); @operator = v end
190
+
191
+ # @see prompt
192
+ def prompt=(v); Axlsx::validate_string(v); @prompt = v end
193
+
194
+ # @see promptTitle
195
+ def promptTitle=(v); Axlsx::validate_string(v); @promptTitle = v end
196
+
197
+ # @see showDropDown
198
+ def showDropDown=(v); Axlsx::validate_boolean(v); @showDropDown = v end
199
+
200
+ # @see showErrorMessage
201
+ def showErrorMessage=(v); Axlsx::validate_boolean(v); @showErrorMessage = v end
202
+
203
+ # @see showInputMessage
204
+ def showInputMessage=(v); Axlsx::validate_boolean(v); @showInputMessage = v end
205
+
206
+ # @see sqref
207
+ def sqref=(v); Axlsx::validate_string(v); @sqref = v end
208
+
209
+ # @see type
210
+ def type=(v); Axlsx::validate_data_validation_type(v); @type = v end
211
+
212
+ # Serializes the data validation
213
+ # @param [String] str
214
+ # @return [String]
215
+ def to_xml_string(str = '')
216
+ valid_attributes = get_valid_attributes
217
+
218
+ str << '<dataValidation '
219
+ str << instance_values.map { |key, value| '' << key << '="' << value.to_s << '"' if (valid_attributes.include?(key.to_sym) and not CHILD_ELEMENTS.include?(key.to_sym)) }.join(' ')
220
+ str << '>'
221
+ str << '<formula1>' << self.formula1 << '</formula1>' if @formula1 and valid_attributes.include?(:formula1)
222
+ str << '<formula2>' << self.formula2 << '</formula2>' if @formula2 and valid_attributes.include?(:formula2)
223
+ str << '</dataValidation>'
224
+ end
225
+
226
+ private
227
+ def get_valid_attributes
228
+ attributes = [:allowBlank, :error, :errorStyle, :errorTitle, :prompt, :promptTitle, :showErrorMessage, :showInputMessage, :sqref, :type ]
229
+
230
+ if [:whole, :decimal, :data, :time, :textLength].include?(@type)
231
+ attributes << [:operator, :formula1]
232
+ attributes << [:formula2] if [:between, :notBetween].include?(@operator)
233
+ elsif @type == :list
234
+ attributes << [:showDropDown, :formula1]
235
+ elsif @type == :custom
236
+ attributes << [:formula1]
237
+ else
238
+ attributes = []
239
+ end
240
+
241
+ attributes.flatten!
242
+ end
243
+ end
244
+ end
@@ -0,0 +1,28 @@
1
+ module Axlsx
2
+
3
+ # A simple, self serializing class for storing conditional formattings
4
+ class DataValidations < SimpleTypedList
5
+
6
+ # creates a new Tables object
7
+ def initialize(worksheet)
8
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
9
+ super DataValidation
10
+ @worksheet = worksheet
11
+ end
12
+
13
+ # The worksheet that owns this collection of tables
14
+ # @return [Worksheet]
15
+ attr_reader :worksheet
16
+
17
+ # serialize the conditional formattings
18
+ def to_xml_string(str = "")
19
+ return if empty?
20
+ str << "<dataValidations count='#{size}'>"
21
+ each { |item| item.to_xml_string(str) }
22
+ str << '</dataValidations>'
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+
@@ -0,0 +1,30 @@
1
+ # encoding: UTF-8
2
+ require "date"
3
+
4
+ module Axlsx
5
+ # The DateTimeConverter class converts both data and time types to their apprpriate excel serializations
6
+ class DateTimeConverter
7
+
8
+ # The date_to_serial method converts Date objects to the equivelant excel serialized forms
9
+ # @param [Date] date the date to be serialized
10
+ # @return [Numeric]
11
+ def self.date_to_serial(date)
12
+ epoch = Axlsx::Workbook::date1904 ? Date.new(1904) : Date.new(1899, 12, 30)
13
+ offset_date = date.respond_to?(:utc_offset) ? date + date.utc_offset.seconds : date
14
+ (offset_date - epoch).to_f
15
+ end
16
+
17
+ # The time_to_serial methond converts a Time object its excel serialized form.
18
+ # @param [Time] time the time to be serialized
19
+ # @return [Numeric]
20
+ def self.time_to_serial(time)
21
+ # Using hardcoded offsets here as some operating systems will not except
22
+ # a 'negative' offset from the ruby epoch.
23
+ epoch1900 = -2209161600.0 # Time.utc(1899, 12, 30).to_i
24
+ epoch1904 = -2082844800.0 # Time.utc(1904, 1, 1).to_i
25
+ seconds_per_day = 86400.0 # 60*60*24
26
+ epoch = Axlsx::Workbook::date1904 ? epoch1904 : epoch1900
27
+ (time.utc_offset + time.to_f - epoch)/seconds_per_day
28
+ end
29
+ end
30
+ end