caxlsx 3.2.0 → 3.3.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 (300) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +385 -354
  5. data/LICENSE +21 -21
  6. data/README.md +165 -168
  7. data/Rakefile +29 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
  10. data/lib/axlsx/content_type/content_type.rb +26 -26
  11. data/lib/axlsx/content_type/default.rb +25 -25
  12. data/lib/axlsx/content_type/override.rb +25 -25
  13. data/lib/axlsx/doc_props/app.rb +235 -235
  14. data/lib/axlsx/doc_props/core.rb +39 -39
  15. data/lib/axlsx/drawing/area_chart.rb +99 -99
  16. data/lib/axlsx/drawing/area_series.rb +110 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +26 -26
  18. data/lib/axlsx/drawing/axes.rb +61 -61
  19. data/lib/axlsx/drawing/axis.rb +190 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +148 -148
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -138
  22. data/lib/axlsx/drawing/bar_series.rb +97 -97
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +85 -85
  26. data/lib/axlsx/drawing/chart.rb +299 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +91 -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 -129
  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 +107 -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 +398 -388
  58. data/lib/axlsx/rels/relationship.rb +130 -130
  59. data/lib/axlsx/rels/relationships.rb +32 -32
  60. data/lib/axlsx/stylesheet/border.rb +73 -73
  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 +535 -494
  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 +416 -410
  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 +425 -395
  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/border_creator.rb +76 -0
  98. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  99. data/lib/axlsx/workbook/worksheet/cell.rb +532 -506
  100. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  101. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  102. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  103. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  104. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  105. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  106. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  107. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  108. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  111. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  112. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  113. data/lib/axlsx/workbook/worksheet/data_validation.rb +267 -246
  114. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  115. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  116. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  117. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  118. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  119. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  120. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  121. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  122. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  123. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  124. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  125. data/lib/axlsx/workbook/worksheet/pivot_table.rb +335 -296
  126. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  127. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  128. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  129. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  130. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  131. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  132. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  133. data/lib/axlsx/workbook/worksheet/row.rb +164 -164
  134. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  135. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  136. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  137. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  138. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  139. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  140. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  141. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  142. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  143. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  144. data/lib/axlsx/workbook/worksheet/worksheet.rb +829 -786
  145. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  149. data/lib/axlsx.rb +204 -185
  150. data/lib/caxlsx.rb +2 -2
  151. data/lib/schema/dc.xsd +118 -118
  152. data/lib/schema/dcmitype.xsd +51 -51
  153. data/lib/schema/dcterms.xsd +331 -331
  154. data/lib/schema/dml-chartDrawing.xsd +146 -146
  155. data/lib/schema/dml-compatibility.xsd +14 -14
  156. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  157. data/lib/schema/dml-main.xsd +3048 -3048
  158. data/lib/schema/dml-picture.xsd +23 -23
  159. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  160. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  161. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  162. data/lib/schema/shared-bibliography.xsd +144 -144
  163. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  164. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  165. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  166. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  167. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  168. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  169. data/lib/schema/shared-relationshipReference.xsd +25 -25
  170. data/lib/schema/vml-main.xsd +569 -569
  171. data/lib/schema/vml-officeDrawing.xsd +509 -509
  172. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  173. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  174. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  175. data/lib/schema/xml.xsd +116 -116
  176. metadata +5 -252
  177. data/test/benchmark.rb +0 -72
  178. data/test/content_type/tc_content_type.rb +0 -76
  179. data/test/content_type/tc_default.rb +0 -16
  180. data/test/content_type/tc_override.rb +0 -14
  181. data/test/doc_props/tc_app.rb +0 -43
  182. data/test/doc_props/tc_core.rb +0 -42
  183. data/test/drawing/tc_area_chart.rb +0 -39
  184. data/test/drawing/tc_area_series.rb +0 -71
  185. data/test/drawing/tc_axes.rb +0 -8
  186. data/test/drawing/tc_axis.rb +0 -112
  187. data/test/drawing/tc_bar_3D_chart.rb +0 -86
  188. data/test/drawing/tc_bar_chart.rb +0 -86
  189. data/test/drawing/tc_bar_series.rb +0 -46
  190. data/test/drawing/tc_bubble_chart.rb +0 -44
  191. data/test/drawing/tc_bubble_series.rb +0 -21
  192. data/test/drawing/tc_cat_axis.rb +0 -31
  193. data/test/drawing/tc_cat_axis_data.rb +0 -27
  194. data/test/drawing/tc_chart.rb +0 -123
  195. data/test/drawing/tc_d_lbls.rb +0 -57
  196. data/test/drawing/tc_data_source.rb +0 -23
  197. data/test/drawing/tc_drawing.rb +0 -80
  198. data/test/drawing/tc_graphic_frame.rb +0 -27
  199. data/test/drawing/tc_hyperlink.rb +0 -64
  200. data/test/drawing/tc_line_3d_chart.rb +0 -47
  201. data/test/drawing/tc_line_chart.rb +0 -39
  202. data/test/drawing/tc_line_series.rb +0 -71
  203. data/test/drawing/tc_marker.rb +0 -44
  204. data/test/drawing/tc_named_axis_data.rb +0 -27
  205. data/test/drawing/tc_num_data.rb +0 -31
  206. data/test/drawing/tc_num_val.rb +0 -29
  207. data/test/drawing/tc_one_cell_anchor.rb +0 -66
  208. data/test/drawing/tc_pic.rb +0 -103
  209. data/test/drawing/tc_picture_locking.rb +0 -72
  210. data/test/drawing/tc_pie_3D_chart.rb +0 -28
  211. data/test/drawing/tc_pie_series.rb +0 -33
  212. data/test/drawing/tc_scaling.rb +0 -36
  213. data/test/drawing/tc_scatter_chart.rb +0 -48
  214. data/test/drawing/tc_scatter_series.rb +0 -74
  215. data/test/drawing/tc_ser_axis.rb +0 -31
  216. data/test/drawing/tc_series.rb +0 -23
  217. data/test/drawing/tc_series_title.rb +0 -54
  218. data/test/drawing/tc_str_data.rb +0 -18
  219. data/test/drawing/tc_str_val.rb +0 -30
  220. data/test/drawing/tc_title.rb +0 -70
  221. data/test/drawing/tc_two_cell_anchor.rb +0 -36
  222. data/test/drawing/tc_val_axis.rb +0 -24
  223. data/test/drawing/tc_view_3D.rb +0 -54
  224. data/test/drawing/tc_vml_drawing.rb +0 -25
  225. data/test/drawing/tc_vml_shape.rb +0 -106
  226. data/test/fixtures/image1.gif +0 -0
  227. data/test/fixtures/image1.jpeg +0 -0
  228. data/test/fixtures/image1.jpg +0 -0
  229. data/test/fixtures/image1.png +0 -0
  230. data/test/fixtures/image1_fake.jpg +0 -0
  231. data/test/profile.rb +0 -24
  232. data/test/rels/tc_relationship.rb +0 -52
  233. data/test/rels/tc_relationships.rb +0 -37
  234. data/test/stylesheet/tc_border.rb +0 -37
  235. data/test/stylesheet/tc_border_pr.rb +0 -32
  236. data/test/stylesheet/tc_cell_alignment.rb +0 -81
  237. data/test/stylesheet/tc_cell_protection.rb +0 -29
  238. data/test/stylesheet/tc_cell_style.rb +0 -57
  239. data/test/stylesheet/tc_color.rb +0 -43
  240. data/test/stylesheet/tc_dxf.rb +0 -81
  241. data/test/stylesheet/tc_fill.rb +0 -18
  242. data/test/stylesheet/tc_font.rb +0 -133
  243. data/test/stylesheet/tc_gradient_fill.rb +0 -72
  244. data/test/stylesheet/tc_gradient_stop.rb +0 -31
  245. data/test/stylesheet/tc_num_fmt.rb +0 -30
  246. data/test/stylesheet/tc_pattern_fill.rb +0 -43
  247. data/test/stylesheet/tc_styles.rb +0 -309
  248. data/test/stylesheet/tc_table_style.rb +0 -44
  249. data/test/stylesheet/tc_table_style_element.rb +0 -45
  250. data/test/stylesheet/tc_table_styles.rb +0 -29
  251. data/test/stylesheet/tc_xf.rb +0 -120
  252. data/test/tc_axlsx.rb +0 -109
  253. data/test/tc_helper.rb +0 -10
  254. data/test/tc_package.rb +0 -317
  255. data/test/util/tc_mime_type_utils.rb +0 -13
  256. data/test/util/tc_serialized_attributes.rb +0 -19
  257. data/test/util/tc_simple_typed_list.rb +0 -77
  258. data/test/util/tc_validators.rb +0 -210
  259. data/test/workbook/tc_defined_name.rb +0 -49
  260. data/test/workbook/tc_shared_strings_table.rb +0 -59
  261. data/test/workbook/tc_workbook.rb +0 -165
  262. data/test/workbook/tc_workbook_view.rb +0 -50
  263. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
  264. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
  265. data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
  266. data/test/workbook/worksheet/tc_break.rb +0 -49
  267. data/test/workbook/worksheet/tc_cell.rb +0 -465
  268. data/test/workbook/worksheet/tc_cfvo.rb +0 -31
  269. data/test/workbook/worksheet/tc_col.rb +0 -93
  270. data/test/workbook/worksheet/tc_color_scale.rb +0 -58
  271. data/test/workbook/worksheet/tc_comment.rb +0 -72
  272. data/test/workbook/worksheet/tc_comments.rb +0 -57
  273. data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
  274. data/test/workbook/worksheet/tc_data_bar.rb +0 -46
  275. data/test/workbook/worksheet/tc_data_validation.rb +0 -265
  276. data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
  277. data/test/workbook/worksheet/tc_header_footer.rb +0 -151
  278. data/test/workbook/worksheet/tc_icon_set.rb +0 -45
  279. data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
  280. data/test/workbook/worksheet/tc_page_margins.rb +0 -97
  281. data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
  282. data/test/workbook/worksheet/tc_page_setup.rb +0 -143
  283. data/test/workbook/worksheet/tc_pane.rb +0 -54
  284. data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
  285. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
  286. data/test/workbook/worksheet/tc_print_options.rb +0 -72
  287. data/test/workbook/worksheet/tc_protected_range.rb +0 -17
  288. data/test/workbook/worksheet/tc_rich_text.rb +0 -44
  289. data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
  290. data/test/workbook/worksheet/tc_row.rb +0 -160
  291. data/test/workbook/worksheet/tc_selection.rb +0 -55
  292. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
  293. data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
  294. data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
  295. data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
  296. data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
  297. data/test/workbook/worksheet/tc_table.rb +0 -77
  298. data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
  299. data/test/workbook/worksheet/tc_worksheet.rb +0 -632
  300. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
@@ -1,395 +1,425 @@
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
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
+ # An array that holds all cells with styles
191
+ # @return Set
192
+ def styled_cells
193
+ @styled_cells ||= Set.new
194
+ end
195
+
196
+ # Are the styles added with workbook.add_styles applied yet
197
+ # @return Boolean
198
+ attr_accessor :styles_applied
199
+
200
+ # A helper to apply styles that were added using `worksheet.add_style`
201
+ # @return [Boolean]
202
+ def apply_styles
203
+ return false if !styled_cells
204
+
205
+ styled_cells.each do |cell|
206
+ current_style = styles.style_index[cell.style]
207
+
208
+ if current_style
209
+ new_style = Axlsx.hash_deep_merge(current_style, cell.raw_style)
210
+ else
211
+ new_style = cell.raw_style
212
+ end
213
+
214
+ cell.style = styles.add_style(new_style)
215
+ end
216
+
217
+ self.styles_applied = true
218
+ end
219
+
220
+
221
+ # Indicates if the epoc date for serialization should be 1904. If false, 1900 is used.
222
+ @@date1904 = false
223
+
224
+
225
+ # A quick helper to retrive a worksheet by name
226
+ # @param [String] name The name of the sheet you are looking for
227
+ # @return [Worksheet] The sheet found, or nil
228
+ def sheet_by_name(name)
229
+ index = @worksheets.index { |sheet| sheet.name == name }
230
+ @worksheets[index] if index
231
+ end
232
+
233
+ # Creates a new Workbook
234
+ # The recomended way to work with workbooks is via Package#workbook
235
+ # @option options [Boolean] date1904. If this is not specified, date1904 is set to false. Office 2011 for Mac defaults to false.
236
+ def initialize(options={})
237
+ @styles = Styles.new
238
+ @worksheets = SimpleTypedList.new Worksheet
239
+ @drawings = SimpleTypedList.new Drawing
240
+ @charts = SimpleTypedList.new Chart
241
+ @images = SimpleTypedList.new Pic
242
+ # Are these even used????? Check package serialization parts
243
+ @tables = SimpleTypedList.new Table
244
+ @pivot_tables = SimpleTypedList.new PivotTable
245
+ @comments = SimpleTypedList.new Comments
246
+
247
+
248
+ @use_autowidth = true
249
+ @bold_font_multiplier = BOLD_FONT_MULTIPLIER
250
+ @font_scale_divisor = FONT_SCALE_DIVISOR
251
+
252
+ self.date1904= !options[:date1904].nil? && options[:date1904]
253
+ yield self if block_given?
254
+ end
255
+
256
+ # Instance level access to the class variable 1904
257
+ # @return [Boolean]
258
+ def date1904() @@date1904; end
259
+
260
+ # see @date1904
261
+ def date1904=(v) Axlsx::validate_boolean v; @@date1904 = v; end
262
+
263
+ # Sets the date1904 attribute to the provided boolean
264
+ # @return [Boolean]
265
+ def self.date1904=(v) Axlsx::validate_boolean v; @@date1904 = v; end
266
+
267
+ # retrieves the date1904 attribute
268
+ # @return [Boolean]
269
+ def self.date1904() @@date1904; end
270
+
271
+ # Indicates if the workbook should use autowidths or not.
272
+ # @note This gem no longer depends on RMagick for autowidth
273
+ # calculation. Thus the performance benefits of turning this off are
274
+ # marginal unless you are creating a very large sheet.
275
+ # @return [Boolean]
276
+ def use_autowidth() @use_autowidth; end
277
+
278
+ # see @use_autowidth
279
+ def use_autowidth=(v=true) Axlsx::validate_boolean v; @use_autowidth = v; end
280
+
281
+ # Font size of bold fonts is multiplied with this
282
+ # Used for automatic calculation of cell widths with bold text
283
+ # @return [Float]
284
+ attr_reader :bold_font_multiplier
285
+
286
+ def bold_font_multiplier=(v)
287
+ Axlsx::validate_float v
288
+ @bold_font_multiplier = v
289
+ end
290
+
291
+ # Font scale is calculated with this value (font_size / font_scale_divisor)
292
+ # Used for automatic calculation of cell widths
293
+ # @return [Float]
294
+ attr_reader :font_scale_divisor
295
+
296
+ def font_scale_divisor=(v)
297
+ Axlsx::validate_float v
298
+ @font_scale_divisor = v
299
+ end
300
+
301
+ # inserts a worksheet into this workbook at the position specified.
302
+ # It the index specified is out of range, the worksheet will be added to the end of the
303
+ # worksheets collection
304
+ # @return [Worksheet]
305
+ # @param index The zero based position to insert the newly created worksheet
306
+ # @param [Hash] options Options to pass into the worksheed during initialization.
307
+ # @option options [String] name The name of the worksheet
308
+ # @option options [Hash] page_margins The page margins for the worksheet
309
+ def insert_worksheet(index=0, options={})
310
+ worksheet = Worksheet.new(self, options)
311
+ @worksheets.delete_at(@worksheets.size - 1)
312
+ @worksheets.insert(index, worksheet)
313
+ yield worksheet if block_given?
314
+ worksheet
315
+ end
316
+
317
+ #
318
+ # Adds a worksheet to this workbook
319
+ # @return [Worksheet]
320
+ # @option options [String] name The name of the worksheet.
321
+ # @option options [Hash] page_margins The page margins for the worksheet.
322
+ # @see Worksheet#initialize
323
+ def add_worksheet(options={})
324
+ worksheet = Worksheet.new(self, options)
325
+ yield worksheet if block_given?
326
+ worksheet
327
+ end
328
+
329
+ # Adds a new WorkbookView
330
+ # @return WorkbookViews
331
+ # @option options [Hash] options passed into the added WorkbookView
332
+ # @see WorkbookView#initialize
333
+ def add_view(options={})
334
+ views << WorkbookView.new(options)
335
+ end
336
+
337
+ # Adds a defined name to this workbook
338
+ # @return [DefinedName]
339
+ # @param [String] formula @see DefinedName
340
+ # @param [Hash] options @see DefinedName
341
+ def add_defined_name(formula, options)
342
+ defined_names << DefinedName.new(formula, options)
343
+ end
344
+
345
+ # The workbook relationships. This is managed automatically by the workbook
346
+ # @return [Relationships]
347
+ def relationships
348
+ r = Relationships.new
349
+ @worksheets.each do |sheet|
350
+ r << Relationship.new(sheet, WORKSHEET_R, WORKSHEET_PN % (r.size+1))
351
+ end
352
+ pivot_tables.each_with_index do |pivot_table, index|
353
+ r << Relationship.new(pivot_table.cache_definition, PIVOT_TABLE_CACHE_DEFINITION_R, PIVOT_TABLE_CACHE_DEFINITION_PN % (index+1))
354
+ end
355
+ r << Relationship.new(self, STYLES_R, STYLES_PN)
356
+ if use_shared_strings
357
+ r << Relationship.new(self, SHARED_STRINGS_R, SHARED_STRINGS_PN)
358
+ end
359
+ r
360
+ end
361
+
362
+ # generates a shared string object against all cells in all worksheets.
363
+ # @return [SharedStringTable]
364
+ def shared_strings
365
+ SharedStringsTable.new(worksheets.collect { |ws| ws.cells }, xml_space)
366
+ end
367
+
368
+ # The xml:space attribute for the worksheet.
369
+ # This determines how whitespace is handled withing the document.
370
+ # The most relevant part being whitespace in the cell text.
371
+ # allowed values are :preserve and :default. Axlsx uses :preserve unless
372
+ # you explicily set this to :default.
373
+ # @return Symbol
374
+ def xml_space
375
+ @xml_space ||= :preserve
376
+ end
377
+
378
+ # Sets the xml:space attribute for the worksheet
379
+ # @see Worksheet#xml_space
380
+ # @param [Symbol] space must be one of :preserve or :default
381
+ def xml_space=(space)
382
+ Axlsx::RestrictionValidator.validate(:xml_space, [:preserve, :default], space)
383
+ @xml_space = space;
384
+ end
385
+
386
+ # returns a range of cells in a worksheet
387
+ # @param [String] cell_def The excel style reference defining the worksheet and cells. The range must specify the sheet to
388
+ # 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.
389
+ # @return [Cell, Array]
390
+ def [](cell_def)
391
+ sheet_name = cell_def.split('!')[0] if cell_def.match('!')
392
+ worksheet = self.worksheets.select { |s| s.name == sheet_name }.first
393
+ raise ArgumentError, 'Unknown Sheet' unless sheet_name && worksheet.is_a?(Worksheet)
394
+ worksheet[cell_def.gsub(/.+!/,"")]
395
+ end
396
+
397
+ # Serialize the workbook
398
+ # @param [String] str
399
+ # @return [String]
400
+ def to_xml_string(str='')
401
+ add_worksheet(name: 'Sheet1') unless worksheets.size > 0
402
+ str << '<?xml version="1.0" encoding="UTF-8"?>'
403
+ str << ('<workbook xmlns="' << XML_NS << '" xmlns:r="' << XML_NS_R << '">')
404
+ str << ('<workbookPr date1904="' << @@date1904.to_s << '"/>')
405
+ views.to_xml_string(str)
406
+ str << '<sheets>'
407
+ if is_reversed
408
+ worksheets.reverse_each { |sheet| sheet.to_sheet_node_xml_string(str) }
409
+ else
410
+ worksheets.each { |sheet| sheet.to_sheet_node_xml_string(str) }
411
+ end
412
+ str << '</sheets>'
413
+ defined_names.to_xml_string(str)
414
+ unless pivot_tables.empty?
415
+ str << '<pivotCaches>'
416
+ pivot_tables.each do |pivot_table|
417
+ str << ('<pivotCache cacheId="' << pivot_table.cache_definition.cache_id.to_s << '" r:id="' << pivot_table.cache_definition.rId << '"/>')
418
+ end
419
+ str << '</pivotCaches>'
420
+ end
421
+ str << '</workbook>'
422
+ end
423
+
424
+ end
425
+ end