caxlsx 3.0.4 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +354 -334
  5. data/LICENSE +21 -21
  6. data/README.md +168 -170
  7. data/Rakefile +29 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
  10. data/lib/axlsx/content_type/content_type.rb +26 -26
  11. data/lib/axlsx/content_type/default.rb +25 -25
  12. data/lib/axlsx/content_type/override.rb +25 -25
  13. data/lib/axlsx/doc_props/app.rb +235 -235
  14. data/lib/axlsx/doc_props/core.rb +39 -39
  15. data/lib/axlsx/drawing/area_chart.rb +99 -99
  16. data/lib/axlsx/drawing/area_series.rb +110 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +26 -26
  18. data/lib/axlsx/drawing/axes.rb +61 -61
  19. data/lib/axlsx/drawing/axis.rb +190 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +148 -151
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -143
  22. data/lib/axlsx/drawing/bar_series.rb +97 -80
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +85 -85
  26. data/lib/axlsx/drawing/chart.rb +276 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +90 -90
  28. data/lib/axlsx/drawing/drawing.rb +167 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +54 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +100 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
  32. data/lib/axlsx/drawing/line_chart.rb +99 -99
  33. data/lib/axlsx/drawing/line_series.rb +110 -110
  34. data/lib/axlsx/drawing/marker.rb +84 -84
  35. data/lib/axlsx/drawing/num_data.rb +52 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +62 -62
  37. data/lib/axlsx/drawing/num_val.rb +34 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
  39. data/lib/axlsx/drawing/pic.rb +211 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +42 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
  42. data/lib/axlsx/drawing/pie_series.rb +74 -74
  43. data/lib/axlsx/drawing/scaling.rb +60 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +74 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +129 -98
  46. data/lib/axlsx/drawing/ser_axis.rb +45 -45
  47. data/lib/axlsx/drawing/series.rb +69 -69
  48. data/lib/axlsx/drawing/series_title.rb +25 -25
  49. data/lib/axlsx/drawing/str_data.rb +42 -42
  50. data/lib/axlsx/drawing/str_val.rb +34 -34
  51. data/lib/axlsx/drawing/title.rb +97 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
  53. data/lib/axlsx/drawing/val_axis.rb +37 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +42 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +66 -66
  57. data/lib/axlsx/package.rb +388 -363
  58. data/lib/axlsx/rels/relationship.rb +130 -130
  59. data/lib/axlsx/rels/relationships.rb +32 -32
  60. data/lib/axlsx/stylesheet/border.rb +73 -71
  61. data/lib/axlsx/stylesheet/border_pr.rb +71 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +72 -72
  65. data/lib/axlsx/stylesheet/color.rb +76 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +79 -79
  67. data/lib/axlsx/stylesheet/fill.rb +35 -35
  68. data/lib/axlsx/stylesheet/font.rb +156 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
  73. data/lib/axlsx/stylesheet/styles.rb +494 -420
  74. data/lib/axlsx/stylesheet/table_style.rb +54 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +46 -46
  77. data/lib/axlsx/stylesheet/xf.rb +147 -147
  78. data/lib/axlsx/util/accessors.rb +64 -64
  79. data/lib/axlsx/util/constants.rb +410 -401
  80. data/lib/axlsx/util/mime_type_utils.rb +11 -11
  81. data/lib/axlsx/util/options_parser.rb +16 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +89 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +179 -179
  84. data/lib/axlsx/util/storage.rb +146 -146
  85. data/lib/axlsx/util/validators.rb +312 -312
  86. data/lib/axlsx/util/zip_command.rb +73 -73
  87. data/lib/axlsx/version.rb +5 -5
  88. data/lib/axlsx/workbook/defined_name.rb +128 -128
  89. data/lib/axlsx/workbook/defined_names.rb +21 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
  91. data/lib/axlsx/workbook/workbook.rb +395 -370
  92. data/lib/axlsx/workbook/workbook_view.rb +80 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +22 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
  97. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  98. data/lib/axlsx/workbook/worksheet/cell.rb +506 -505
  99. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  100. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  101. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  102. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  103. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  105. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  106. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  107. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  108. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  110. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  111. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  112. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -246
  113. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  114. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  115. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  116. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  117. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  118. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  119. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  120. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  121. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  122. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  123. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  124. data/lib/axlsx/workbook/worksheet/pivot_table.rb +296 -289
  125. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  126. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  127. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  128. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  129. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  130. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  131. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  132. data/lib/axlsx/workbook/worksheet/row.rb +164 -162
  133. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  134. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  135. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  136. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  137. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  138. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  139. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  140. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  141. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  142. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  143. data/lib/axlsx/workbook/worksheet/worksheet.rb +786 -764
  144. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  145. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  148. data/lib/axlsx.rb +185 -170
  149. data/lib/caxlsx.rb +2 -2
  150. data/lib/schema/dc.xsd +118 -118
  151. data/lib/schema/dcmitype.xsd +51 -51
  152. data/lib/schema/dcterms.xsd +331 -331
  153. data/lib/schema/dml-chartDrawing.xsd +146 -146
  154. data/lib/schema/dml-compatibility.xsd +14 -14
  155. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  156. data/lib/schema/dml-main.xsd +3048 -3048
  157. data/lib/schema/dml-picture.xsd +23 -23
  158. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  159. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  160. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  161. data/lib/schema/shared-bibliography.xsd +144 -144
  162. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  163. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  164. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  165. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  166. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  167. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  168. data/lib/schema/shared-relationshipReference.xsd +25 -25
  169. data/lib/schema/vml-main.xsd +569 -569
  170. data/lib/schema/vml-officeDrawing.xsd +509 -509
  171. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  172. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  173. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  174. data/lib/schema/xml.xsd +116 -116
  175. data/test/benchmark.rb +72 -72
  176. data/test/content_type/tc_content_type.rb +76 -76
  177. data/test/content_type/tc_default.rb +16 -16
  178. data/test/content_type/tc_override.rb +14 -14
  179. data/test/doc_props/tc_app.rb +43 -43
  180. data/test/doc_props/tc_core.rb +42 -42
  181. data/test/drawing/tc_area_chart.rb +39 -39
  182. data/test/drawing/tc_area_series.rb +71 -71
  183. data/test/drawing/tc_axes.rb +7 -7
  184. data/test/drawing/tc_axis.rb +112 -112
  185. data/test/drawing/tc_bar_3D_chart.rb +86 -71
  186. data/test/drawing/tc_bar_chart.rb +86 -71
  187. data/test/drawing/tc_bar_series.rb +46 -37
  188. data/test/drawing/tc_bubble_chart.rb +44 -44
  189. data/test/drawing/tc_bubble_series.rb +21 -21
  190. data/test/drawing/tc_cat_axis.rb +31 -31
  191. data/test/drawing/tc_cat_axis_data.rb +27 -27
  192. data/test/drawing/tc_chart.rb +123 -123
  193. data/test/drawing/tc_d_lbls.rb +57 -57
  194. data/test/drawing/tc_data_source.rb +23 -23
  195. data/test/drawing/tc_drawing.rb +80 -80
  196. data/test/drawing/tc_graphic_frame.rb +27 -27
  197. data/test/drawing/tc_hyperlink.rb +64 -64
  198. data/test/drawing/tc_line_3d_chart.rb +47 -47
  199. data/test/drawing/tc_line_chart.rb +39 -39
  200. data/test/drawing/tc_line_series.rb +71 -71
  201. data/test/drawing/tc_marker.rb +44 -44
  202. data/test/drawing/tc_named_axis_data.rb +27 -27
  203. data/test/drawing/tc_num_data.rb +31 -31
  204. data/test/drawing/tc_num_val.rb +29 -29
  205. data/test/drawing/tc_one_cell_anchor.rb +66 -66
  206. data/test/drawing/tc_pic.rb +103 -103
  207. data/test/drawing/tc_picture_locking.rb +72 -72
  208. data/test/drawing/tc_pie_3D_chart.rb +28 -28
  209. data/test/drawing/tc_pie_series.rb +33 -33
  210. data/test/drawing/tc_scaling.rb +36 -36
  211. data/test/drawing/tc_scatter_chart.rb +48 -48
  212. data/test/drawing/tc_scatter_series.rb +74 -56
  213. data/test/drawing/tc_ser_axis.rb +31 -31
  214. data/test/drawing/tc_series.rb +23 -23
  215. data/test/drawing/tc_series_title.rb +54 -54
  216. data/test/drawing/tc_str_data.rb +18 -18
  217. data/test/drawing/tc_str_val.rb +30 -30
  218. data/test/drawing/tc_title.rb +70 -70
  219. data/test/drawing/tc_two_cell_anchor.rb +36 -36
  220. data/test/drawing/tc_val_axis.rb +24 -24
  221. data/test/drawing/tc_view_3D.rb +54 -54
  222. data/test/drawing/tc_vml_drawing.rb +25 -25
  223. data/test/drawing/tc_vml_shape.rb +106 -106
  224. data/test/profile.rb +24 -24
  225. data/test/rels/tc_relationship.rb +52 -52
  226. data/test/rels/tc_relationships.rb +37 -37
  227. data/test/stylesheet/tc_border.rb +37 -37
  228. data/test/stylesheet/tc_border_pr.rb +32 -32
  229. data/test/stylesheet/tc_cell_alignment.rb +81 -81
  230. data/test/stylesheet/tc_cell_protection.rb +29 -29
  231. data/test/stylesheet/tc_cell_style.rb +57 -57
  232. data/test/stylesheet/tc_color.rb +43 -43
  233. data/test/stylesheet/tc_dxf.rb +81 -81
  234. data/test/stylesheet/tc_fill.rb +18 -18
  235. data/test/stylesheet/tc_font.rb +133 -133
  236. data/test/stylesheet/tc_gradient_fill.rb +72 -72
  237. data/test/stylesheet/tc_gradient_stop.rb +31 -31
  238. data/test/stylesheet/tc_num_fmt.rb +30 -30
  239. data/test/stylesheet/tc_pattern_fill.rb +43 -43
  240. data/test/stylesheet/tc_styles.rb +309 -261
  241. data/test/stylesheet/tc_table_style.rb +44 -44
  242. data/test/stylesheet/tc_table_style_element.rb +45 -45
  243. data/test/stylesheet/tc_table_styles.rb +29 -29
  244. data/test/stylesheet/tc_xf.rb +120 -120
  245. data/test/tc_axlsx.rb +109 -109
  246. data/test/tc_helper.rb +10 -12
  247. data/test/tc_package.rb +317 -264
  248. data/test/util/tc_mime_type_utils.rb +13 -13
  249. data/test/util/tc_serialized_attributes.rb +19 -19
  250. data/test/util/tc_simple_typed_list.rb +77 -77
  251. data/test/util/tc_validators.rb +210 -210
  252. data/test/workbook/tc_defined_name.rb +49 -49
  253. data/test/workbook/tc_shared_strings_table.rb +59 -59
  254. data/test/workbook/tc_workbook.rb +165 -160
  255. data/test/workbook/tc_workbook_view.rb +50 -50
  256. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -38
  257. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -76
  258. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -50
  259. data/test/workbook/worksheet/tc_break.rb +49 -49
  260. data/test/workbook/worksheet/tc_cell.rb +465 -453
  261. data/test/workbook/worksheet/tc_cfvo.rb +31 -31
  262. data/test/workbook/worksheet/tc_col.rb +93 -93
  263. data/test/workbook/worksheet/tc_color_scale.rb +58 -58
  264. data/test/workbook/worksheet/tc_comment.rb +72 -72
  265. data/test/workbook/worksheet/tc_comments.rb +57 -57
  266. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -224
  267. data/test/workbook/worksheet/tc_data_bar.rb +46 -46
  268. data/test/workbook/worksheet/tc_data_validation.rb +265 -265
  269. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -124
  270. data/test/workbook/worksheet/tc_header_footer.rb +151 -151
  271. data/test/workbook/worksheet/tc_icon_set.rb +45 -45
  272. data/test/workbook/worksheet/tc_outline_pr.rb +19 -19
  273. data/test/workbook/worksheet/tc_page_margins.rb +97 -97
  274. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -15
  275. data/test/workbook/worksheet/tc_page_setup.rb +143 -143
  276. data/test/workbook/worksheet/tc_pane.rb +54 -54
  277. data/test/workbook/worksheet/tc_pivot_table.rb +180 -135
  278. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +62 -54
  279. data/test/workbook/worksheet/tc_print_options.rb +72 -72
  280. data/test/workbook/worksheet/tc_protected_range.rb +17 -17
  281. data/test/workbook/worksheet/tc_rich_text.rb +44 -44
  282. data/test/workbook/worksheet/tc_rich_text_run.rb +173 -173
  283. data/test/workbook/worksheet/tc_row.rb +160 -139
  284. data/test/workbook/worksheet/tc_selection.rb +55 -55
  285. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -18
  286. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -88
  287. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -49
  288. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -117
  289. data/test/workbook/worksheet/tc_sheet_view.rb +214 -214
  290. data/test/workbook/worksheet/tc_table.rb +77 -67
  291. data/test/workbook/worksheet/tc_table_style_info.rb +53 -53
  292. data/test/workbook/worksheet/tc_worksheet.rb +632 -601
  293. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -55
  294. metadata +11 -11
@@ -1,370 +1,395 @@
1
- # -*- coding: utf-8 -*-
2
- module Axlsx
3
- require 'axlsx/workbook/worksheet/sheet_calc_pr.rb'
4
- require 'axlsx/workbook/worksheet/auto_filter/auto_filter.rb'
5
- require 'axlsx/workbook/worksheet/date_time_converter.rb'
6
- require 'axlsx/workbook/worksheet/protected_range.rb'
7
- require 'axlsx/workbook/worksheet/protected_ranges.rb'
8
- require 'axlsx/workbook/worksheet/rich_text_run'
9
- require 'axlsx/workbook/worksheet/rich_text'
10
- require 'axlsx/workbook/worksheet/cell_serializer.rb'
11
- require 'axlsx/workbook/worksheet/cell.rb'
12
- require 'axlsx/workbook/worksheet/page_margins.rb'
13
- require 'axlsx/workbook/worksheet/page_set_up_pr.rb'
14
- require 'axlsx/workbook/worksheet/outline_pr.rb'
15
- require 'axlsx/workbook/worksheet/page_setup.rb'
16
- require 'axlsx/workbook/worksheet/header_footer.rb'
17
- require 'axlsx/workbook/worksheet/print_options.rb'
18
- require 'axlsx/workbook/worksheet/cfvo.rb'
19
- require 'axlsx/workbook/worksheet/cfvos.rb'
20
- require 'axlsx/workbook/worksheet/color_scale.rb'
21
- require 'axlsx/workbook/worksheet/data_bar.rb'
22
- require 'axlsx/workbook/worksheet/icon_set.rb'
23
- require 'axlsx/workbook/worksheet/conditional_formatting.rb'
24
- require 'axlsx/workbook/worksheet/conditional_formatting_rule.rb'
25
- require 'axlsx/workbook/worksheet/conditional_formattings.rb'
26
- require 'axlsx/workbook/worksheet/row.rb'
27
- require 'axlsx/workbook/worksheet/col.rb'
28
- require 'axlsx/workbook/worksheet/cols.rb'
29
- require 'axlsx/workbook/worksheet/comments.rb'
30
- require 'axlsx/workbook/worksheet/comment.rb'
31
- require 'axlsx/workbook/worksheet/merged_cells.rb'
32
- require 'axlsx/workbook/worksheet/sheet_protection.rb'
33
- require 'axlsx/workbook/worksheet/sheet_pr.rb'
34
- require 'axlsx/workbook/worksheet/dimension.rb'
35
- require 'axlsx/workbook/worksheet/sheet_data.rb'
36
- require 'axlsx/workbook/worksheet/worksheet_drawing.rb'
37
- require 'axlsx/workbook/worksheet/worksheet_comments.rb'
38
- require 'axlsx/workbook/worksheet/worksheet_hyperlink'
39
- require 'axlsx/workbook/worksheet/worksheet_hyperlinks'
40
- require 'axlsx/workbook/worksheet/break'
41
- require 'axlsx/workbook/worksheet/row_breaks'
42
- require 'axlsx/workbook/worksheet/col_breaks'
43
- require 'axlsx/workbook/workbook_view'
44
- require 'axlsx/workbook/workbook_views'
45
-
46
-
47
- require 'axlsx/workbook/worksheet/worksheet.rb'
48
- require 'axlsx/workbook/shared_strings_table.rb'
49
- require 'axlsx/workbook/defined_name.rb'
50
- require 'axlsx/workbook/defined_names.rb'
51
- require 'axlsx/workbook/worksheet/table_style_info.rb'
52
- require 'axlsx/workbook/worksheet/table.rb'
53
- require 'axlsx/workbook/worksheet/tables.rb'
54
- require 'axlsx/workbook/worksheet/pivot_table_cache_definition.rb'
55
- require 'axlsx/workbook/worksheet/pivot_table.rb'
56
- require 'axlsx/workbook/worksheet/pivot_tables.rb'
57
- require 'axlsx/workbook/worksheet/data_validation.rb'
58
- require 'axlsx/workbook/worksheet/data_validations.rb'
59
- require 'axlsx/workbook/worksheet/sheet_view.rb'
60
- require 'axlsx/workbook/worksheet/sheet_format_pr.rb'
61
- require 'axlsx/workbook/worksheet/pane.rb'
62
- require 'axlsx/workbook/worksheet/selection.rb'
63
- # The Workbook class is an xlsx workbook that manages worksheets, charts, drawings and styles.
64
- # The following parts of the Office Open XML spreadsheet specification are not implimented in this version.
65
- #
66
- # bookViews
67
- # calcPr
68
- # customWorkbookViews
69
- # definedNames
70
- # externalReferences
71
- # extLst
72
- # fileRecoveryPr
73
- # fileSharing
74
- # fileVersion
75
- # functionGroups
76
- # oleSize
77
- # pivotCaches
78
- # smartTagPr
79
- # smartTagTypes
80
- # webPublishing
81
- # webPublishObjects
82
- # workbookProtection
83
- # workbookPr*
84
- #
85
- # *workbookPr is only supported to the extend of date1904
86
- class Workbook
87
-
88
- # When true, the Package will be generated with a shared string table. This may be required by some OOXML processors that do not
89
- # adhere to the ECMA specification that dictates string may be inline in the sheet.
90
- # Using this option will increase the time required to serialize the document as every string in every cell must be analzed and referenced.
91
- # @return [Boolean]
92
- attr_reader :use_shared_strings
93
-
94
- # @see use_shared_strings
95
- def use_shared_strings=(v)
96
- Axlsx::validate_boolean(v)
97
- @use_shared_strings = v
98
- end
99
-
100
- # If true reverse the order in which the workbook is serialized
101
- # @return [Boolean]
102
- attr_reader :is_reversed
103
-
104
- def is_reversed=(v)
105
- Axlsx::validate_boolean(v)
106
- @is_reversed = v
107
- end
108
-
109
-
110
- # A collection of worksheets associated with this workbook.
111
- # @note The recommended way to manage worksheets is add_worksheet
112
- # @see Workbook#add_worksheet
113
- # @see Worksheet
114
- # @return [SimpleTypedList]
115
- attr_reader :worksheets
116
-
117
- # A colllection of charts associated with this workbook
118
- # @note The recommended way to manage charts is Worksheet#add_chart
119
- # @see Worksheet#add_chart
120
- # @see Chart
121
- # @return [SimpleTypedList]
122
- attr_reader :charts
123
-
124
- # A colllection of images associated with this workbook
125
- # @note The recommended way to manage images is Worksheet#add_image
126
- # @see Worksheet#add_image
127
- # @see Pic
128
- # @return [SimpleTypedList]
129
- attr_reader :images
130
-
131
- # A colllection of drawings associated with this workbook
132
- # @note The recommended way to manage drawings is Worksheet#add_chart
133
- # @see Worksheet#add_chart
134
- # @see Drawing
135
- # @return [SimpleTypedList]
136
- attr_reader :drawings
137
-
138
- # pretty sure this two are always empty and can be removed.
139
-
140
-
141
- # A colllection of tables associated with this workbook
142
- # @note The recommended way to manage drawings is Worksheet#add_table
143
- # @see Worksheet#add_table
144
- # @see Table
145
- # @return [SimpleTypedList]
146
- attr_reader :tables
147
-
148
- # A colllection of pivot tables associated with this workbook
149
- # @note The recommended way to manage drawings is Worksheet#add_table
150
- # @see Worksheet#add_table
151
- # @see Table
152
- # @return [SimpleTypedList]
153
- attr_reader :pivot_tables
154
-
155
- # A collection of views for this workbook
156
- def views
157
- @views ||= WorkbookViews.new
158
- end
159
-
160
- # A collection of defined names for this workbook
161
- # @note The recommended way to manage defined names is Workbook#add_defined_name
162
- # @see DefinedName
163
- # @return [DefinedNames]
164
- def defined_names
165
- @defined_names ||= DefinedNames.new
166
- end
167
-
168
- # A collection of comments associated with this workbook
169
- # @note The recommended way to manage comments is WOrksheet#add_comment
170
- # @see Worksheet#add_comment
171
- # @see Comment
172
- # @return [Comments]
173
- def comments
174
- worksheets.map { |sheet| sheet.comments }.compact
175
- end
176
-
177
- # The styles associated with this workbook
178
- # @note The recommended way to manage styles is Styles#add_style
179
- # @see Style#add_style
180
- # @see Style
181
- # @return [Styles]
182
- def styles
183
- yield @styles if block_given?
184
- @styles
185
- end
186
-
187
-
188
- # Indicates if the epoc date for serialization should be 1904. If false, 1900 is used.
189
- @@date1904 = false
190
-
191
-
192
- # A quick helper to retrive a worksheet by name
193
- # @param [String] name The name of the sheet you are looking for
194
- # @return [Worksheet] The sheet found, or nil
195
- def sheet_by_name(name)
196
- index = @worksheets.index { |sheet| sheet.name == name }
197
- @worksheets[index] if index
198
- end
199
-
200
- # Creates a new Workbook
201
- # The recomended way to work with workbooks is via Package#workbook
202
- # @option options [Boolean] date1904. If this is not specified, date1904 is set to false. Office 2011 for Mac defaults to false.
203
- def initialize(options={})
204
- @styles = Styles.new
205
- @worksheets = SimpleTypedList.new Worksheet
206
- @drawings = SimpleTypedList.new Drawing
207
- @charts = SimpleTypedList.new Chart
208
- @images = SimpleTypedList.new Pic
209
- # Are these even used????? Check package serialization parts
210
- @tables = SimpleTypedList.new Table
211
- @pivot_tables = SimpleTypedList.new PivotTable
212
- @comments = SimpleTypedList.new Comments
213
-
214
-
215
- @use_autowidth = true
216
-
217
- self.date1904= !options[:date1904].nil? && options[:date1904]
218
- yield self if block_given?
219
- end
220
-
221
- # Instance level access to the class variable 1904
222
- # @return [Boolean]
223
- def date1904() @@date1904; end
224
-
225
- # see @date1904
226
- def date1904=(v) Axlsx::validate_boolean v; @@date1904 = v; end
227
-
228
- # Sets the date1904 attribute to the provided boolean
229
- # @return [Boolean]
230
- def self.date1904=(v) Axlsx::validate_boolean v; @@date1904 = v; end
231
-
232
- # retrieves the date1904 attribute
233
- # @return [Boolean]
234
- def self.date1904() @@date1904; end
235
-
236
- # Indicates if the workbook should use autowidths or not.
237
- # @note This gem no longer depends on RMagick for autowidth
238
- # calculation. Thus the performance benefits of turning this off are
239
- # marginal unless you are creating a very large sheet.
240
- # @return [Boolean]
241
- def use_autowidth() @use_autowidth; end
242
-
243
- # see @use_autowidth
244
- def use_autowidth=(v=true) Axlsx::validate_boolean v; @use_autowidth = v; end
245
-
246
- # inserts a worksheet into this workbook at the position specified.
247
- # It the index specified is out of range, the worksheet will be added to the end of the
248
- # worksheets collection
249
- # @return [Worksheet]
250
- # @param index The zero based position to insert the newly created worksheet
251
- # @param [Hash] options Options to pass into the worksheed during initialization.
252
- # @option options [String] name The name of the worksheet
253
- # @option options [Hash] page_margins The page margins for the worksheet
254
- def insert_worksheet(index=0, options={})
255
- worksheet = Worksheet.new(self, options)
256
- @worksheets.delete_at(@worksheets.size - 1)
257
- @worksheets.insert(index, worksheet)
258
- yield worksheet if block_given?
259
- worksheet
260
- end
261
-
262
- #
263
- # Adds a worksheet to this workbook
264
- # @return [Worksheet]
265
- # @option options [String] name The name of the worksheet.
266
- # @option options [Hash] page_margins The page margins for the worksheet.
267
- # @see Worksheet#initialize
268
- def add_worksheet(options={})
269
- worksheet = Worksheet.new(self, options)
270
- yield worksheet if block_given?
271
- worksheet
272
- end
273
-
274
- # Adds a new WorkbookView
275
- # @return WorkbookViews
276
- # @option options [Hash] options passed into the added WorkbookView
277
- # @see WorkbookView#initialize
278
- def add_view(options={})
279
- views << WorkbookView.new(options)
280
- end
281
-
282
- # Adds a defined name to this workbook
283
- # @return [DefinedName]
284
- # @param [String] formula @see DefinedName
285
- # @param [Hash] options @see DefinedName
286
- def add_defined_name(formula, options)
287
- defined_names << DefinedName.new(formula, options)
288
- end
289
-
290
- # The workbook relationships. This is managed automatically by the workbook
291
- # @return [Relationships]
292
- def relationships
293
- r = Relationships.new
294
- @worksheets.each do |sheet|
295
- r << Relationship.new(sheet, WORKSHEET_R, WORKSHEET_PN % (r.size+1))
296
- end
297
- pivot_tables.each_with_index do |pivot_table, index|
298
- r << Relationship.new(pivot_table.cache_definition, PIVOT_TABLE_CACHE_DEFINITION_R, PIVOT_TABLE_CACHE_DEFINITION_PN % (index+1))
299
- end
300
- r << Relationship.new(self, STYLES_R, STYLES_PN)
301
- if use_shared_strings
302
- r << Relationship.new(self, SHARED_STRINGS_R, SHARED_STRINGS_PN)
303
- end
304
- r
305
- end
306
-
307
- # generates a shared string object against all cells in all worksheets.
308
- # @return [SharedStringTable]
309
- def shared_strings
310
- SharedStringsTable.new(worksheets.collect { |ws| ws.cells }, xml_space)
311
- end
312
-
313
- # The xml:space attribute for the worksheet.
314
- # This determines how whitespace is handled withing the document.
315
- # The most relevant part being whitespace in the cell text.
316
- # allowed values are :preserve and :default. Axlsx uses :preserve unless
317
- # you explicily set this to :default.
318
- # @return Symbol
319
- def xml_space
320
- @xml_space ||= :preserve
321
- end
322
-
323
- # Sets the xml:space attribute for the worksheet
324
- # @see Worksheet#xml_space
325
- # @param [Symbol] space must be one of :preserve or :default
326
- def xml_space=(space)
327
- Axlsx::RestrictionValidator.validate(:xml_space, [:preserve, :default], space)
328
- @xml_space = space;
329
- end
330
-
331
- # returns a range of cells in a worksheet
332
- # @param [String] cell_def The excel style reference defining the worksheet and cells. The range must specify the sheet to
333
- # retrieve the cells from. e.g. range('Sheet1!A1:B2') will return an array of four cells [A1, A2, B1, B2] while range('Sheet1!A1') will return a single Cell.
334
- # @return [Cell, Array]
335
- def [](cell_def)
336
- sheet_name = cell_def.split('!')[0] if cell_def.match('!')
337
- worksheet = self.worksheets.select { |s| s.name == sheet_name }.first
338
- raise ArgumentError, 'Unknown Sheet' unless sheet_name && worksheet.is_a?(Worksheet)
339
- worksheet[cell_def.gsub(/.+!/,"")]
340
- end
341
-
342
- # Serialize the workbook
343
- # @param [String] str
344
- # @return [String]
345
- def to_xml_string(str='')
346
- add_worksheet(name: 'Sheet1') unless worksheets.size > 0
347
- str << '<?xml version="1.0" encoding="UTF-8"?>'
348
- str << ('<workbook xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '">')
349
- str << ('<workbookPr date1904="' << @@date1904.to_s << '"/>')
350
- views.to_xml_string(str)
351
- str << '<sheets>'
352
- if is_reversed
353
- worksheets.reverse_each { |sheet| sheet.to_sheet_node_xml_string(str) }
354
- else
355
- worksheets.each { |sheet| sheet.to_sheet_node_xml_string(str) }
356
- end
357
- str << '</sheets>'
358
- defined_names.to_xml_string(str)
359
- unless pivot_tables.empty?
360
- str << '<pivotCaches>'
361
- pivot_tables.each do |pivot_table|
362
- str << ('<pivotCache cacheId="' << pivot_table.cache_definition.cache_id.to_s << '" r:id="' << pivot_table.cache_definition.rId << '"/>')
363
- end
364
- str << '</pivotCaches>'
365
- end
366
- str << '</workbook>'
367
- end
368
-
369
- end
370
- end
1
+ # -*- coding: utf-8 -*-
2
+ module Axlsx
3
+ require 'axlsx/workbook/worksheet/sheet_calc_pr.rb'
4
+ require 'axlsx/workbook/worksheet/auto_filter/auto_filter.rb'
5
+ require 'axlsx/workbook/worksheet/date_time_converter.rb'
6
+ require 'axlsx/workbook/worksheet/protected_range.rb'
7
+ require 'axlsx/workbook/worksheet/protected_ranges.rb'
8
+ require 'axlsx/workbook/worksheet/rich_text_run'
9
+ require 'axlsx/workbook/worksheet/rich_text'
10
+ require 'axlsx/workbook/worksheet/cell_serializer.rb'
11
+ require 'axlsx/workbook/worksheet/cell.rb'
12
+ require 'axlsx/workbook/worksheet/page_margins.rb'
13
+ require 'axlsx/workbook/worksheet/page_set_up_pr.rb'
14
+ require 'axlsx/workbook/worksheet/outline_pr.rb'
15
+ require 'axlsx/workbook/worksheet/page_setup.rb'
16
+ require 'axlsx/workbook/worksheet/header_footer.rb'
17
+ require 'axlsx/workbook/worksheet/print_options.rb'
18
+ require 'axlsx/workbook/worksheet/cfvo.rb'
19
+ require 'axlsx/workbook/worksheet/cfvos.rb'
20
+ require 'axlsx/workbook/worksheet/color_scale.rb'
21
+ require 'axlsx/workbook/worksheet/data_bar.rb'
22
+ require 'axlsx/workbook/worksheet/icon_set.rb'
23
+ require 'axlsx/workbook/worksheet/conditional_formatting.rb'
24
+ require 'axlsx/workbook/worksheet/conditional_formatting_rule.rb'
25
+ require 'axlsx/workbook/worksheet/conditional_formattings.rb'
26
+ require 'axlsx/workbook/worksheet/row.rb'
27
+ require 'axlsx/workbook/worksheet/col.rb'
28
+ require 'axlsx/workbook/worksheet/cols.rb'
29
+ require 'axlsx/workbook/worksheet/comments.rb'
30
+ require 'axlsx/workbook/worksheet/comment.rb'
31
+ require 'axlsx/workbook/worksheet/merged_cells.rb'
32
+ require 'axlsx/workbook/worksheet/sheet_protection.rb'
33
+ require 'axlsx/workbook/worksheet/sheet_pr.rb'
34
+ require 'axlsx/workbook/worksheet/dimension.rb'
35
+ require 'axlsx/workbook/worksheet/sheet_data.rb'
36
+ require 'axlsx/workbook/worksheet/worksheet_drawing.rb'
37
+ require 'axlsx/workbook/worksheet/worksheet_comments.rb'
38
+ require 'axlsx/workbook/worksheet/worksheet_hyperlink'
39
+ require 'axlsx/workbook/worksheet/worksheet_hyperlinks'
40
+ require 'axlsx/workbook/worksheet/break'
41
+ require 'axlsx/workbook/worksheet/row_breaks'
42
+ require 'axlsx/workbook/worksheet/col_breaks'
43
+ require 'axlsx/workbook/workbook_view'
44
+ require 'axlsx/workbook/workbook_views'
45
+
46
+
47
+ require 'axlsx/workbook/worksheet/worksheet.rb'
48
+ require 'axlsx/workbook/shared_strings_table.rb'
49
+ require 'axlsx/workbook/defined_name.rb'
50
+ require 'axlsx/workbook/defined_names.rb'
51
+ require 'axlsx/workbook/worksheet/table_style_info.rb'
52
+ require 'axlsx/workbook/worksheet/table.rb'
53
+ require 'axlsx/workbook/worksheet/tables.rb'
54
+ require 'axlsx/workbook/worksheet/pivot_table_cache_definition.rb'
55
+ require 'axlsx/workbook/worksheet/pivot_table.rb'
56
+ require 'axlsx/workbook/worksheet/pivot_tables.rb'
57
+ require 'axlsx/workbook/worksheet/data_validation.rb'
58
+ require 'axlsx/workbook/worksheet/data_validations.rb'
59
+ require 'axlsx/workbook/worksheet/sheet_view.rb'
60
+ require 'axlsx/workbook/worksheet/sheet_format_pr.rb'
61
+ require 'axlsx/workbook/worksheet/pane.rb'
62
+ require 'axlsx/workbook/worksheet/selection.rb'
63
+ # The Workbook class is an xlsx workbook that manages worksheets, charts, drawings and styles.
64
+ # The following parts of the Office Open XML spreadsheet specification are not implimented in this version.
65
+ #
66
+ # bookViews
67
+ # calcPr
68
+ # customWorkbookViews
69
+ # definedNames
70
+ # externalReferences
71
+ # extLst
72
+ # fileRecoveryPr
73
+ # fileSharing
74
+ # fileVersion
75
+ # functionGroups
76
+ # oleSize
77
+ # pivotCaches
78
+ # smartTagPr
79
+ # smartTagTypes
80
+ # webPublishing
81
+ # webPublishObjects
82
+ # workbookProtection
83
+ # workbookPr*
84
+ #
85
+ # *workbookPr is only supported to the extend of date1904
86
+ class Workbook
87
+
88
+ BOLD_FONT_MULTIPLIER = 1.5
89
+ FONT_SCALE_DIVISOR = 10.0
90
+
91
+ # When true, the Package will be generated with a shared string table. This may be required by some OOXML processors that do not
92
+ # adhere to the ECMA specification that dictates string may be inline in the sheet.
93
+ # Using this option will increase the time required to serialize the document as every string in every cell must be analzed and referenced.
94
+ # @return [Boolean]
95
+ attr_reader :use_shared_strings
96
+
97
+ # @see use_shared_strings
98
+ def use_shared_strings=(v)
99
+ Axlsx::validate_boolean(v)
100
+ @use_shared_strings = v
101
+ end
102
+
103
+ # If true reverse the order in which the workbook is serialized
104
+ # @return [Boolean]
105
+ attr_reader :is_reversed
106
+
107
+ def is_reversed=(v)
108
+ Axlsx::validate_boolean(v)
109
+ @is_reversed = v
110
+ end
111
+
112
+
113
+ # A collection of worksheets associated with this workbook.
114
+ # @note The recommended way to manage worksheets is add_worksheet
115
+ # @see Workbook#add_worksheet
116
+ # @see Worksheet
117
+ # @return [SimpleTypedList]
118
+ attr_reader :worksheets
119
+
120
+ # A colllection of charts associated with this workbook
121
+ # @note The recommended way to manage charts is Worksheet#add_chart
122
+ # @see Worksheet#add_chart
123
+ # @see Chart
124
+ # @return [SimpleTypedList]
125
+ attr_reader :charts
126
+
127
+ # A colllection of images associated with this workbook
128
+ # @note The recommended way to manage images is Worksheet#add_image
129
+ # @see Worksheet#add_image
130
+ # @see Pic
131
+ # @return [SimpleTypedList]
132
+ attr_reader :images
133
+
134
+ # A colllection of drawings associated with this workbook
135
+ # @note The recommended way to manage drawings is Worksheet#add_chart
136
+ # @see Worksheet#add_chart
137
+ # @see Drawing
138
+ # @return [SimpleTypedList]
139
+ attr_reader :drawings
140
+
141
+ # pretty sure this two are always empty and can be removed.
142
+
143
+
144
+ # A colllection of tables associated with this workbook
145
+ # @note The recommended way to manage drawings is Worksheet#add_table
146
+ # @see Worksheet#add_table
147
+ # @see Table
148
+ # @return [SimpleTypedList]
149
+ attr_reader :tables
150
+
151
+ # A colllection of pivot tables associated with this workbook
152
+ # @note The recommended way to manage drawings is Worksheet#add_table
153
+ # @see Worksheet#add_table
154
+ # @see Table
155
+ # @return [SimpleTypedList]
156
+ attr_reader :pivot_tables
157
+
158
+ # A collection of views for this workbook
159
+ def views
160
+ @views ||= WorkbookViews.new
161
+ end
162
+
163
+ # A collection of defined names for this workbook
164
+ # @note The recommended way to manage defined names is Workbook#add_defined_name
165
+ # @see DefinedName
166
+ # @return [DefinedNames]
167
+ def defined_names
168
+ @defined_names ||= DefinedNames.new
169
+ end
170
+
171
+ # A collection of comments associated with this workbook
172
+ # @note The recommended way to manage comments is WOrksheet#add_comment
173
+ # @see Worksheet#add_comment
174
+ # @see Comment
175
+ # @return [Comments]
176
+ def comments
177
+ worksheets.map { |sheet| sheet.comments }.compact
178
+ end
179
+
180
+ # The styles associated with this workbook
181
+ # @note The recommended way to manage styles is Styles#add_style
182
+ # @see Style#add_style
183
+ # @see Style
184
+ # @return [Styles]
185
+ def styles
186
+ yield @styles if block_given?
187
+ @styles
188
+ end
189
+
190
+
191
+ # Indicates if the epoc date for serialization should be 1904. If false, 1900 is used.
192
+ @@date1904 = false
193
+
194
+
195
+ # A quick helper to retrive a worksheet by name
196
+ # @param [String] name The name of the sheet you are looking for
197
+ # @return [Worksheet] The sheet found, or nil
198
+ def sheet_by_name(name)
199
+ index = @worksheets.index { |sheet| sheet.name == name }
200
+ @worksheets[index] if index
201
+ end
202
+
203
+ # Creates a new Workbook
204
+ # The recomended way to work with workbooks is via Package#workbook
205
+ # @option options [Boolean] date1904. If this is not specified, date1904 is set to false. Office 2011 for Mac defaults to false.
206
+ def initialize(options={})
207
+ @styles = Styles.new
208
+ @worksheets = SimpleTypedList.new Worksheet
209
+ @drawings = SimpleTypedList.new Drawing
210
+ @charts = SimpleTypedList.new Chart
211
+ @images = SimpleTypedList.new Pic
212
+ # Are these even used????? Check package serialization parts
213
+ @tables = SimpleTypedList.new Table
214
+ @pivot_tables = SimpleTypedList.new PivotTable
215
+ @comments = SimpleTypedList.new Comments
216
+
217
+
218
+ @use_autowidth = true
219
+ @bold_font_multiplier = BOLD_FONT_MULTIPLIER
220
+ @font_scale_divisor = FONT_SCALE_DIVISOR
221
+
222
+ self.date1904= !options[:date1904].nil? && options[:date1904]
223
+ yield self if block_given?
224
+ end
225
+
226
+ # Instance level access to the class variable 1904
227
+ # @return [Boolean]
228
+ def date1904() @@date1904; end
229
+
230
+ # see @date1904
231
+ def date1904=(v) Axlsx::validate_boolean v; @@date1904 = v; end
232
+
233
+ # Sets the date1904 attribute to the provided boolean
234
+ # @return [Boolean]
235
+ def self.date1904=(v) Axlsx::validate_boolean v; @@date1904 = v; end
236
+
237
+ # retrieves the date1904 attribute
238
+ # @return [Boolean]
239
+ def self.date1904() @@date1904; end
240
+
241
+ # Indicates if the workbook should use autowidths or not.
242
+ # @note This gem no longer depends on RMagick for autowidth
243
+ # calculation. Thus the performance benefits of turning this off are
244
+ # marginal unless you are creating a very large sheet.
245
+ # @return [Boolean]
246
+ def use_autowidth() @use_autowidth; end
247
+
248
+ # see @use_autowidth
249
+ def use_autowidth=(v=true) Axlsx::validate_boolean v; @use_autowidth = v; end
250
+
251
+ # Font size of bold fonts is multiplied with this
252
+ # Used for automatic calculation of cell widths with bold text
253
+ # @return [Float]
254
+ attr_reader :bold_font_multiplier
255
+
256
+ def bold_font_multiplier=(v)
257
+ Axlsx::validate_float v
258
+ @bold_font_multiplier = v
259
+ end
260
+
261
+ # Font scale is calculated with this value (font_size / font_scale_divisor)
262
+ # Used for automatic calculation of cell widths
263
+ # @return [Float]
264
+ attr_reader :font_scale_divisor
265
+
266
+ def font_scale_divisor=(v)
267
+ Axlsx::validate_float v
268
+ @font_scale_divisor = v
269
+ end
270
+
271
+ # inserts a worksheet into this workbook at the position specified.
272
+ # It the index specified is out of range, the worksheet will be added to the end of the
273
+ # worksheets collection
274
+ # @return [Worksheet]
275
+ # @param index The zero based position to insert the newly created worksheet
276
+ # @param [Hash] options Options to pass into the worksheed during initialization.
277
+ # @option options [String] name The name of the worksheet
278
+ # @option options [Hash] page_margins The page margins for the worksheet
279
+ def insert_worksheet(index=0, options={})
280
+ worksheet = Worksheet.new(self, options)
281
+ @worksheets.delete_at(@worksheets.size - 1)
282
+ @worksheets.insert(index, worksheet)
283
+ yield worksheet if block_given?
284
+ worksheet
285
+ end
286
+
287
+ #
288
+ # Adds a worksheet to this workbook
289
+ # @return [Worksheet]
290
+ # @option options [String] name The name of the worksheet.
291
+ # @option options [Hash] page_margins The page margins for the worksheet.
292
+ # @see Worksheet#initialize
293
+ def add_worksheet(options={})
294
+ worksheet = Worksheet.new(self, options)
295
+ yield worksheet if block_given?
296
+ worksheet
297
+ end
298
+
299
+ # Adds a new WorkbookView
300
+ # @return WorkbookViews
301
+ # @option options [Hash] options passed into the added WorkbookView
302
+ # @see WorkbookView#initialize
303
+ def add_view(options={})
304
+ views << WorkbookView.new(options)
305
+ end
306
+
307
+ # Adds a defined name to this workbook
308
+ # @return [DefinedName]
309
+ # @param [String] formula @see DefinedName
310
+ # @param [Hash] options @see DefinedName
311
+ def add_defined_name(formula, options)
312
+ defined_names << DefinedName.new(formula, options)
313
+ end
314
+
315
+ # The workbook relationships. This is managed automatically by the workbook
316
+ # @return [Relationships]
317
+ def relationships
318
+ r = Relationships.new
319
+ @worksheets.each do |sheet|
320
+ r << Relationship.new(sheet, WORKSHEET_R, WORKSHEET_PN % (r.size+1))
321
+ end
322
+ pivot_tables.each_with_index do |pivot_table, index|
323
+ r << Relationship.new(pivot_table.cache_definition, PIVOT_TABLE_CACHE_DEFINITION_R, PIVOT_TABLE_CACHE_DEFINITION_PN % (index+1))
324
+ end
325
+ r << Relationship.new(self, STYLES_R, STYLES_PN)
326
+ if use_shared_strings
327
+ r << Relationship.new(self, SHARED_STRINGS_R, SHARED_STRINGS_PN)
328
+ end
329
+ r
330
+ end
331
+
332
+ # generates a shared string object against all cells in all worksheets.
333
+ # @return [SharedStringTable]
334
+ def shared_strings
335
+ SharedStringsTable.new(worksheets.collect { |ws| ws.cells }, xml_space)
336
+ end
337
+
338
+ # The xml:space attribute for the worksheet.
339
+ # This determines how whitespace is handled withing the document.
340
+ # The most relevant part being whitespace in the cell text.
341
+ # allowed values are :preserve and :default. Axlsx uses :preserve unless
342
+ # you explicily set this to :default.
343
+ # @return Symbol
344
+ def xml_space
345
+ @xml_space ||= :preserve
346
+ end
347
+
348
+ # Sets the xml:space attribute for the worksheet
349
+ # @see Worksheet#xml_space
350
+ # @param [Symbol] space must be one of :preserve or :default
351
+ def xml_space=(space)
352
+ Axlsx::RestrictionValidator.validate(:xml_space, [:preserve, :default], space)
353
+ @xml_space = space;
354
+ end
355
+
356
+ # returns a range of cells in a worksheet
357
+ # @param [String] cell_def The excel style reference defining the worksheet and cells. The range must specify the sheet to
358
+ # retrieve the cells from. e.g. range('Sheet1!A1:B2') will return an array of four cells [A1, A2, B1, B2] while range('Sheet1!A1') will return a single Cell.
359
+ # @return [Cell, Array]
360
+ def [](cell_def)
361
+ sheet_name = cell_def.split('!')[0] if cell_def.match('!')
362
+ worksheet = self.worksheets.select { |s| s.name == sheet_name }.first
363
+ raise ArgumentError, 'Unknown Sheet' unless sheet_name && worksheet.is_a?(Worksheet)
364
+ worksheet[cell_def.gsub(/.+!/,"")]
365
+ end
366
+
367
+ # Serialize the workbook
368
+ # @param [String] str
369
+ # @return [String]
370
+ def to_xml_string(str='')
371
+ add_worksheet(name: 'Sheet1') unless worksheets.size > 0
372
+ str << '<?xml version="1.0" encoding="UTF-8"?>'
373
+ str << ('<workbook xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '">')
374
+ str << ('<workbookPr date1904="' << @@date1904.to_s << '"/>')
375
+ views.to_xml_string(str)
376
+ str << '<sheets>'
377
+ if is_reversed
378
+ worksheets.reverse_each { |sheet| sheet.to_sheet_node_xml_string(str) }
379
+ else
380
+ worksheets.each { |sheet| sheet.to_sheet_node_xml_string(str) }
381
+ end
382
+ str << '</sheets>'
383
+ defined_names.to_xml_string(str)
384
+ unless pivot_tables.empty?
385
+ str << '<pivotCaches>'
386
+ pivot_tables.each do |pivot_table|
387
+ str << ('<pivotCache cacheId="' << pivot_table.cache_definition.cache_id.to_s << '" r:id="' << pivot_table.cache_definition.rId << '"/>')
388
+ end
389
+ str << '</pivotCaches>'
390
+ end
391
+ str << '</workbook>'
392
+ end
393
+
394
+ end
395
+ end