axlsx-alt 3.0.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 (330) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +9 -0
  3. data/.yardopts_guide +19 -0
  4. data/CHANGELOG.md +244 -0
  5. data/LICENSE +22 -0
  6. data/README.md +180 -0
  7. data/Rakefile +29 -0
  8. data/examples/2010_comments.rb +17 -0
  9. data/examples/anchor_swapping.rb +28 -0
  10. data/examples/auto_filter.rb +25 -0
  11. data/examples/basic_charts.rb +58 -0
  12. data/examples/chart_colors.rb +88 -0
  13. data/examples/colored_links.rb +59 -0
  14. data/examples/conditional_formatting/example_conditional_formatting.rb +89 -0
  15. data/examples/conditional_formatting/getting_barred.rb +37 -0
  16. data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
  17. data/examples/conditional_formatting/scaled_colors.rb +39 -0
  18. data/examples/conditional_formatting/stop_and_go.rb +37 -0
  19. data/examples/data_validation.rb +67 -0
  20. data/examples/example.rb +885 -0
  21. data/examples/extractive.rb +45 -0
  22. data/examples/image1.jpeg +0 -0
  23. data/examples/ios_preview.rb +14 -0
  24. data/examples/merge_cells.rb +17 -0
  25. data/examples/no_grid_with_borders.rb +18 -0
  26. data/examples/page_setup.rb +11 -0
  27. data/examples/pivot_table.rb +39 -0
  28. data/examples/pivot_test.rb +63 -0
  29. data/examples/sheet_protection.rb +10 -0
  30. data/examples/skydrive/real_example.rb +63 -0
  31. data/examples/split.rb +16 -0
  32. data/examples/styles.rb +66 -0
  33. data/examples/underline.rb +13 -0
  34. data/examples/wrap_text.rb +21 -0
  35. data/lib/axlsx.rb +171 -0
  36. data/lib/axlsx/content_type/abstract_content_type.rb +32 -0
  37. data/lib/axlsx/content_type/content_type.rb +26 -0
  38. data/lib/axlsx/content_type/default.rb +25 -0
  39. data/lib/axlsx/content_type/override.rb +25 -0
  40. data/lib/axlsx/doc_props/app.rb +235 -0
  41. data/lib/axlsx/doc_props/core.rb +39 -0
  42. data/lib/axlsx/drawing/area_chart.rb +99 -0
  43. data/lib/axlsx/drawing/area_series.rb +110 -0
  44. data/lib/axlsx/drawing/ax_data_source.rb +26 -0
  45. data/lib/axlsx/drawing/axes.rb +61 -0
  46. data/lib/axlsx/drawing/axis.rb +190 -0
  47. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  48. data/lib/axlsx/drawing/bar_chart.rb +143 -0
  49. data/lib/axlsx/drawing/bar_series.rb +82 -0
  50. data/lib/axlsx/drawing/bubble_chart.rb +59 -0
  51. data/lib/axlsx/drawing/bubble_series.rb +63 -0
  52. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  53. data/lib/axlsx/drawing/chart.rb +276 -0
  54. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  55. data/lib/axlsx/drawing/drawing.rb +167 -0
  56. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  57. data/lib/axlsx/drawing/hyperlink.rb +100 -0
  58. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  59. data/lib/axlsx/drawing/line_chart.rb +99 -0
  60. data/lib/axlsx/drawing/line_series.rb +110 -0
  61. data/lib/axlsx/drawing/marker.rb +84 -0
  62. data/lib/axlsx/drawing/num_data.rb +52 -0
  63. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  64. data/lib/axlsx/drawing/num_val.rb +34 -0
  65. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -0
  66. data/lib/axlsx/drawing/pic.rb +211 -0
  67. data/lib/axlsx/drawing/picture_locking.rb +42 -0
  68. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -0
  69. data/lib/axlsx/drawing/pie_series.rb +74 -0
  70. data/lib/axlsx/drawing/scaling.rb +60 -0
  71. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  72. data/lib/axlsx/drawing/scatter_series.rb +98 -0
  73. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  74. data/lib/axlsx/drawing/series.rb +69 -0
  75. data/lib/axlsx/drawing/series_title.rb +23 -0
  76. data/lib/axlsx/drawing/str_data.rb +42 -0
  77. data/lib/axlsx/drawing/str_val.rb +34 -0
  78. data/lib/axlsx/drawing/title.rb +96 -0
  79. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -0
  80. data/lib/axlsx/drawing/val_axis.rb +37 -0
  81. data/lib/axlsx/drawing/view_3D.rb +115 -0
  82. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  83. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  84. data/lib/axlsx/package.rb +358 -0
  85. data/lib/axlsx/rels/relationship.rb +137 -0
  86. data/lib/axlsx/rels/relationships.rb +32 -0
  87. data/lib/axlsx/stylesheet/border.rb +71 -0
  88. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  89. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -0
  90. data/lib/axlsx/stylesheet/cell_protection.rb +41 -0
  91. data/lib/axlsx/stylesheet/cell_style.rb +72 -0
  92. data/lib/axlsx/stylesheet/color.rb +76 -0
  93. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  94. data/lib/axlsx/stylesheet/fill.rb +35 -0
  95. data/lib/axlsx/stylesheet/font.rb +148 -0
  96. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  97. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  98. data/lib/axlsx/stylesheet/num_fmt.rb +86 -0
  99. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  100. data/lib/axlsx/stylesheet/styles.rb +420 -0
  101. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  102. data/lib/axlsx/stylesheet/table_style_element.rb +77 -0
  103. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  104. data/lib/axlsx/stylesheet/xf.rb +147 -0
  105. data/lib/axlsx/util/accessors.rb +64 -0
  106. data/lib/axlsx/util/constants.rb +400 -0
  107. data/lib/axlsx/util/mime_type_utils.rb +11 -0
  108. data/lib/axlsx/util/options_parser.rb +16 -0
  109. data/lib/axlsx/util/parser.rb +44 -0
  110. data/lib/axlsx/util/serialized_attributes.rb +89 -0
  111. data/lib/axlsx/util/simple_typed_list.rb +179 -0
  112. data/lib/axlsx/util/storage.rb +146 -0
  113. data/lib/axlsx/util/validators.rb +312 -0
  114. data/lib/axlsx/version.rb +3 -0
  115. data/lib/axlsx/workbook/defined_name.rb +128 -0
  116. data/lib/axlsx/workbook/defined_names.rb +21 -0
  117. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  118. data/lib/axlsx/workbook/workbook.rb +379 -0
  119. data/lib/axlsx/workbook/workbook_view.rb +80 -0
  120. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  121. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  122. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  123. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -0
  124. data/lib/axlsx/workbook/worksheet/break.rb +35 -0
  125. data/lib/axlsx/workbook/worksheet/cell.rb +478 -0
  126. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -0
  127. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -0
  128. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -0
  129. data/lib/axlsx/workbook/worksheet/col.rb +141 -0
  130. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  131. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  132. data/lib/axlsx/workbook/worksheet/cols.rb +23 -0
  133. data/lib/axlsx/workbook/worksheet/comment.rb +90 -0
  134. data/lib/axlsx/workbook/worksheet/comments.rb +97 -0
  135. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  136. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  137. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  138. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -0
  139. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -0
  140. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  141. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  142. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  143. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -0
  144. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -0
  145. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -0
  146. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -0
  147. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  148. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  149. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -0
  150. data/lib/axlsx/workbook/worksheet/pane.rb +139 -0
  151. data/lib/axlsx/workbook/worksheet/pivot_table.rb +289 -0
  152. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  153. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  154. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -0
  155. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -0
  156. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -0
  157. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -0
  158. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -0
  159. data/lib/axlsx/workbook/worksheet/row.rb +161 -0
  160. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  161. data/lib/axlsx/workbook/worksheet/selection.rb +101 -0
  162. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  163. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -0
  164. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  165. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -0
  166. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -0
  167. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  168. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  169. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -0
  170. data/lib/axlsx/workbook/worksheet/tables.rb +34 -0
  171. data/lib/axlsx/workbook/worksheet/worksheet.rb +756 -0
  172. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  173. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  174. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  175. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  176. data/lib/schema/dc.xsd +118 -0
  177. data/lib/schema/dcmitype.xsd +52 -0
  178. data/lib/schema/dcterms.xsd +331 -0
  179. data/lib/schema/dml-chart.xsd +1499 -0
  180. data/lib/schema/dml-chartDrawing.xsd +146 -0
  181. data/lib/schema/dml-compatibility.xsd +14 -0
  182. data/lib/schema/dml-diagram.xsd +1091 -0
  183. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  184. data/lib/schema/dml-main.xsd +3048 -0
  185. data/lib/schema/dml-picture.xsd +23 -0
  186. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  187. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  188. data/lib/schema/opc-contentTypes.xsd +42 -0
  189. data/lib/schema/opc-coreProperties.xsd +54 -0
  190. data/lib/schema/opc-digSig.xsd +49 -0
  191. data/lib/schema/opc-relationships.xsd +33 -0
  192. data/lib/schema/pml.xsd +1676 -0
  193. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  194. data/lib/schema/shared-bibliography.xsd +144 -0
  195. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  196. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  197. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  198. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  199. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  200. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  201. data/lib/schema/shared-math.xsd +582 -0
  202. data/lib/schema/shared-relationshipReference.xsd +25 -0
  203. data/lib/schema/sml.xsd +4434 -0
  204. data/lib/schema/vml-main.xsd +569 -0
  205. data/lib/schema/vml-officeDrawing.xsd +509 -0
  206. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  207. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  208. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  209. data/lib/schema/wml.xsd +3644 -0
  210. data/lib/schema/xml.xsd +116 -0
  211. data/test/benchmark.rb +72 -0
  212. data/test/content_type/tc_content_type.rb +76 -0
  213. data/test/content_type/tc_default.rb +16 -0
  214. data/test/content_type/tc_override.rb +14 -0
  215. data/test/doc_props/tc_app.rb +43 -0
  216. data/test/doc_props/tc_core.rb +42 -0
  217. data/test/drawing/tc_area_chart.rb +39 -0
  218. data/test/drawing/tc_area_series.rb +71 -0
  219. data/test/drawing/tc_axes.rb +8 -0
  220. data/test/drawing/tc_axis.rb +112 -0
  221. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  222. data/test/drawing/tc_bar_chart.rb +71 -0
  223. data/test/drawing/tc_bar_series.rb +37 -0
  224. data/test/drawing/tc_bubble_chart.rb +44 -0
  225. data/test/drawing/tc_bubble_series.rb +21 -0
  226. data/test/drawing/tc_cat_axis.rb +31 -0
  227. data/test/drawing/tc_cat_axis_data.rb +27 -0
  228. data/test/drawing/tc_chart.rb +123 -0
  229. data/test/drawing/tc_d_lbls.rb +57 -0
  230. data/test/drawing/tc_data_source.rb +23 -0
  231. data/test/drawing/tc_drawing.rb +80 -0
  232. data/test/drawing/tc_graphic_frame.rb +27 -0
  233. data/test/drawing/tc_hyperlink.rb +64 -0
  234. data/test/drawing/tc_line_3d_chart.rb +47 -0
  235. data/test/drawing/tc_line_chart.rb +39 -0
  236. data/test/drawing/tc_line_series.rb +71 -0
  237. data/test/drawing/tc_marker.rb +44 -0
  238. data/test/drawing/tc_named_axis_data.rb +27 -0
  239. data/test/drawing/tc_num_data.rb +31 -0
  240. data/test/drawing/tc_num_val.rb +29 -0
  241. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  242. data/test/drawing/tc_pic.rb +103 -0
  243. data/test/drawing/tc_picture_locking.rb +72 -0
  244. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  245. data/test/drawing/tc_pie_series.rb +32 -0
  246. data/test/drawing/tc_scaling.rb +36 -0
  247. data/test/drawing/tc_scatter_chart.rb +48 -0
  248. data/test/drawing/tc_scatter_series.rb +56 -0
  249. data/test/drawing/tc_ser_axis.rb +31 -0
  250. data/test/drawing/tc_series.rb +23 -0
  251. data/test/drawing/tc_series_title.rb +33 -0
  252. data/test/drawing/tc_str_data.rb +18 -0
  253. data/test/drawing/tc_str_val.rb +30 -0
  254. data/test/drawing/tc_title.rb +54 -0
  255. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  256. data/test/drawing/tc_val_axis.rb +24 -0
  257. data/test/drawing/tc_view_3D.rb +54 -0
  258. data/test/drawing/tc_vml_drawing.rb +25 -0
  259. data/test/drawing/tc_vml_shape.rb +106 -0
  260. data/test/profile.rb +24 -0
  261. data/test/rels/tc_relationship.rb +44 -0
  262. data/test/rels/tc_relationships.rb +37 -0
  263. data/test/stylesheet/tc_border.rb +37 -0
  264. data/test/stylesheet/tc_border_pr.rb +32 -0
  265. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  266. data/test/stylesheet/tc_cell_protection.rb +29 -0
  267. data/test/stylesheet/tc_cell_style.rb +57 -0
  268. data/test/stylesheet/tc_color.rb +43 -0
  269. data/test/stylesheet/tc_dxf.rb +81 -0
  270. data/test/stylesheet/tc_fill.rb +18 -0
  271. data/test/stylesheet/tc_font.rb +121 -0
  272. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  273. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  274. data/test/stylesheet/tc_num_fmt.rb +30 -0
  275. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  276. data/test/stylesheet/tc_styles.rb +235 -0
  277. data/test/stylesheet/tc_table_style.rb +44 -0
  278. data/test/stylesheet/tc_table_style_element.rb +45 -0
  279. data/test/stylesheet/tc_table_styles.rb +29 -0
  280. data/test/stylesheet/tc_xf.rb +120 -0
  281. data/test/tc_axlsx.rb +103 -0
  282. data/test/tc_helper.rb +12 -0
  283. data/test/tc_package.rb +245 -0
  284. data/test/util/tc_mime_type_utils.rb +13 -0
  285. data/test/util/tc_serialized_attributes.rb +19 -0
  286. data/test/util/tc_simple_typed_list.rb +77 -0
  287. data/test/util/tc_validators.rb +210 -0
  288. data/test/workbook/tc_defined_name.rb +49 -0
  289. data/test/workbook/tc_shared_strings_table.rb +59 -0
  290. data/test/workbook/tc_workbook.rb +160 -0
  291. data/test/workbook/tc_workbook_view.rb +50 -0
  292. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  293. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  294. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  295. data/test/workbook/worksheet/tc_break.rb +49 -0
  296. data/test/workbook/worksheet/tc_cell.rb +387 -0
  297. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  298. data/test/workbook/worksheet/tc_col.rb +78 -0
  299. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  300. data/test/workbook/worksheet/tc_comment.rb +72 -0
  301. data/test/workbook/worksheet/tc_comments.rb +57 -0
  302. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  303. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  304. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  305. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  306. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  307. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  308. data/test/workbook/worksheet/tc_outline_pr.rb +19 -0
  309. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  310. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  311. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  312. data/test/workbook/worksheet/tc_pane.rb +54 -0
  313. data/test/workbook/worksheet/tc_pivot_table.rb +135 -0
  314. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  315. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  316. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  317. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  318. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  319. data/test/workbook/worksheet/tc_row.rb +122 -0
  320. data/test/workbook/worksheet/tc_selection.rb +55 -0
  321. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  322. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  323. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -0
  324. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  325. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  326. data/test/workbook/worksheet/tc_table.rb +67 -0
  327. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  328. data/test/workbook/worksheet/tc_worksheet.rb +597 -0
  329. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  330. metadata +601 -0
@@ -0,0 +1,24 @@
1
+ module Axlsx
2
+
3
+ # A simple, self serializing class for storing pivot tables
4
+ class PivotTables < SimpleTypedList
5
+
6
+ # creates a new Tables object
7
+ def initialize(worksheet)
8
+ raise ArgumentError, "you must provide a worksheet" unless worksheet.is_a?(Worksheet)
9
+ super PivotTable
10
+ @worksheet = worksheet
11
+ end
12
+
13
+ # The worksheet that owns this collection of pivot tables
14
+ # @return [Worksheet]
15
+ attr_reader :worksheet
16
+
17
+ # returns the relationships required by this collection
18
+ def relationships
19
+ return [] if empty?
20
+ map{ |pivot_table| Relationship.new(pivot_table, PIVOT_TABLE_R, "../#{pivot_table.pn}") }
21
+ end
22
+ end
23
+
24
+ end
@@ -0,0 +1,39 @@
1
+ module Axlsx
2
+ # Options for printing a worksheet. All options are boolean and false by default.
3
+ #
4
+ # @note The recommended way to manage print options is via Worksheet#print_options
5
+ # @see Worksheet#print_options
6
+ # @see Worksheet#initialize
7
+ class PrintOptions
8
+
9
+ include Axlsx::OptionsParser
10
+ include Axlsx::SerializedAttributes
11
+ include Axlsx::Accessors
12
+ # Creates a new PrintOptions object
13
+ # @option options [Boolean] grid_lines Whether grid lines should be printed
14
+ # @option options [Boolean] headings Whether row and column headings should be printed
15
+ # @option options [Boolean] horizontal_centered Whether the content should be centered horizontally
16
+ # @option options [Boolean] vertical_centered Whether the content should be centered vertically
17
+ def initialize(options = {})
18
+ @grid_lines = @headings = @horizontal_centered = @vertical_centered = false
19
+ set(options)
20
+ end
21
+
22
+ serializable_attributes :grid_lines, :headings, :horizontal_centered, :vertical_centered
23
+ boolean_attr_accessor :grid_lines, :headings, :horizontal_centered, :vertical_centered
24
+
25
+ # Set some or all options at once.
26
+ # @param [Hash] options The options to set (possible keys are :grid_lines, :headings, :horizontal_centered, and :vertical_centered).
27
+ def set(options)
28
+ parse_options options
29
+ end
30
+
31
+ # Serializes the page options element.
32
+ # @note As all attributes default to "false" according to the xml schema definition, the generated xml includes only those attributes that are set to true.
33
+ # @param [String] str
34
+ # @return [String]
35
+ def to_xml_string(str = '')
36
+ serialized_tag 'printOptions', str
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,47 @@
1
+ module Axlsx
2
+ # The Protected Range class represents a set of cells in the worksheet
3
+ # @note the recommended way to manage protected ranges with via Worksheet#protect_range
4
+ # @see Worksheet#protect_range
5
+ class ProtectedRange
6
+
7
+ include Axlsx::OptionsParser
8
+ include Axlsx::SerializedAttributes
9
+
10
+ # Initializes a new protected range object
11
+ # @option [String] sqref The cell range reference to protect. This can be an absolute or a relateve range however, it only applies to the current sheet.
12
+ # @option [String] name An optional name for the protected name.
13
+ def initialize(options={})
14
+ parse_options options
15
+ yield self if block_given?
16
+ end
17
+
18
+ serializable_attributes :sqref, :name
19
+ # The reference for the protected range
20
+ # @return [String]
21
+ attr_reader :sqref
22
+
23
+ # The name of the protected range
24
+ # @return [String]
25
+ attr_reader :name
26
+
27
+ # @see sqref
28
+ def sqref=(v)
29
+ Axlsx.validate_string(v)
30
+ @sqref = v
31
+ end
32
+
33
+ # @see name
34
+ def name=(v)
35
+ Axlsx.validate_string(v)
36
+ @name = v
37
+ end
38
+
39
+ # serializes the proteted range
40
+ # @param [String] str if this string object is provided we append
41
+ # our output to that object. Use this - it helps limit the number of
42
+ # objects created during serialization
43
+ def to_xml_string(str="")
44
+ serialized_tag 'protectedRange', str
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,37 @@
1
+ module Axlsx
2
+
3
+ # A self serializing collection of ranges that should be protected in
4
+ # the worksheet
5
+ class ProtectedRanges < SimpleTypedList
6
+
7
+ attr_reader :worksheet
8
+
9
+ def initialize(worksheet)
10
+ raise ArgumentError, 'You must provide a worksheet' unless worksheet.is_a?(Worksheet)
11
+ super ProtectedRange
12
+ @worksheet = worksheet
13
+ end
14
+
15
+ # Adds a protected range
16
+ # @param [Array|String] cells A string range reference or array of cells that will be protected
17
+ def add_range(cells)
18
+ sqref = if cells.is_a?(String)
19
+ cells
20
+ elsif cells.is_a?(SimpleTypedList) || cells.is_a?(Array)
21
+ Axlsx::cell_range(cells, false)
22
+ end
23
+ self << ProtectedRange.new(:sqref => sqref, :name => "Range#{size}")
24
+ last
25
+ end
26
+
27
+ # Serializes the protected ranges
28
+ # @param [String] str
29
+ # @return [String]
30
+ def to_xml_string(str = '')
31
+ return if empty?
32
+ str << '<protectedRanges>'
33
+ each { |range| range.to_xml_string(str) }
34
+ str << '</protectedRanges>'
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,55 @@
1
+ module Axlsx
2
+
3
+ # A simple, self serializing class for storing TextRuns
4
+ class RichText < SimpleTypedList
5
+
6
+ # creates a new RichText collection
7
+ # @param [String] text -optional The text to use in creating the first RichTextRun
8
+ # @param [Object] options -optional The options to use in creating the first RichTextRun
9
+ # @yield [RichText] self
10
+ def initialize(text = nil, options={})
11
+ super(RichTextRun)
12
+ add_run(text, options) unless text.nil?
13
+ yield self if block_given?
14
+ end
15
+
16
+ # The cell that owns this RichText collection
17
+ attr_reader :cell
18
+
19
+ # Assign the cell for this RichText collection
20
+ # @param [Cell] cell The cell which all RichTextRuns in the collection will belong to
21
+ def cell=(cell)
22
+ @cell = cell
23
+ each { |run| run.cell = cell }
24
+ end
25
+
26
+ # Calculates the longest autowidth of the RichTextRuns in this collection
27
+ # @return [Number]
28
+ def autowidth
29
+ widtharray = [0] # Are arrays the best way of solving this problem?
30
+ each { |run| run.autowidth(widtharray) }
31
+ widtharray.max
32
+ end
33
+
34
+ # Creates and adds a RichTextRun to this collectino
35
+ # @param [String] text The text to use in creating a new RichTextRun
36
+ # @param [Object] options The options to use in creating the new RichTextRun
37
+ def add_run(text, options={})
38
+ self << RichTextRun.new(text, options)
39
+ end
40
+
41
+ # The RichTextRuns we own
42
+ # @return [RichText]
43
+ def runs
44
+ self
45
+ end
46
+
47
+ # renders the RichTextRuns in this collection
48
+ # @param [String] str
49
+ # @return [String]
50
+ def to_xml_string(str='')
51
+ each{ |run| run.to_xml_string(str) }
52
+ str
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,250 @@
1
+ module Axlsx
2
+
3
+ # The RichTextRun class creates and self serializing text run.
4
+ class RichTextRun
5
+
6
+ include Axlsx::OptionsParser
7
+
8
+ attr_reader :value
9
+
10
+ # A list of allowed inline style attributes used for validation
11
+ INLINE_STYLES = [:font_name, :charset,
12
+ :family, :b, :i, :strike, :outline,
13
+ :shadow, :condense, :extend, :u,
14
+ :vertAlign, :sz, :color, :scheme].freeze
15
+
16
+ def initialize(value, options={})
17
+ self.value = value
18
+ parse_options(options)
19
+ end
20
+
21
+ def value=(value)
22
+ @value = value
23
+ end
24
+
25
+ attr_accessor :cell
26
+
27
+ # The inline font_name property for the cell
28
+ # @return [String]
29
+ attr_reader :font_name
30
+ # @see font_name
31
+ def font_name=(v) set_run_style :validate_string, :font_name, v; end
32
+
33
+ # The inline charset property for the cell
34
+ # As far as I can tell, this is pretty much ignored. However, based on the spec it should be one of the following:
35
+ # 0  ANSI_CHARSET
36
+ # 1 DEFAULT_CHARSET
37
+ # 2 SYMBOL_CHARSET
38
+ # 77 MAC_CHARSET
39
+ # 128 SHIFTJIS_CHARSET
40
+ # 129  HANGUL_CHARSET
41
+ # 130  JOHAB_CHARSET
42
+ # 134  GB2312_CHARSET
43
+ # 136  CHINESEBIG5_CHARSET
44
+ # 161  GREEK_CHARSET
45
+ # 162  TURKISH_CHARSET
46
+ # 163  VIETNAMESE_CHARSET
47
+ # 177  HEBREW_CHARSET
48
+ # 178  ARABIC_CHARSET
49
+ # 186  BALTIC_CHARSET
50
+ # 204  RUSSIAN_CHARSET
51
+ # 222  THAI_CHARSET
52
+ # 238  EASTEUROPE_CHARSET
53
+ # 255  OEM_CHARSET
54
+ # @return [String]
55
+ attr_reader :charset
56
+ # @see charset
57
+ def charset=(v) set_run_style :validate_unsigned_int, :charset, v; end
58
+
59
+ # The inline family property for the cell
60
+ # @return [Integer]
61
+ # 1 Roman
62
+ # 2 Swiss
63
+ # 3 Modern
64
+ # 4 Script
65
+ # 5 Decorative
66
+ attr_reader :family
67
+ # @see family
68
+ def family=(v)
69
+ set_run_style :validate_family, :family, v.to_i
70
+ end
71
+
72
+ # The inline bold property for the cell
73
+ # @return [Boolean]
74
+ attr_reader :b
75
+ # @see b
76
+ def b=(v) set_run_style :validate_boolean, :b, v; end
77
+
78
+ # The inline italic property for the cell
79
+ # @return [Boolean]
80
+ attr_reader :i
81
+ # @see i
82
+ def i=(v) set_run_style :validate_boolean, :i, v; end
83
+
84
+ # The inline strike property for the cell
85
+ # @return [Boolean]
86
+ attr_reader :strike
87
+ # @see strike
88
+ def strike=(v) set_run_style :validate_boolean, :strike, v; end
89
+
90
+ # The inline outline property for the cell
91
+ # @return [Boolean]
92
+ attr_reader :outline
93
+ # @see outline
94
+ def outline=(v) set_run_style :validate_boolean, :outline, v; end
95
+
96
+ # The inline shadow property for the cell
97
+ # @return [Boolean]
98
+ attr_reader :shadow
99
+ # @see shadow
100
+ def shadow=(v) set_run_style :validate_boolean, :shadow, v; end
101
+
102
+ # The inline condense property for the cell
103
+ # @return [Boolean]
104
+ attr_reader :condense
105
+ # @see condense
106
+ def condense=(v) set_run_style :validate_boolean, :condense, v; end
107
+
108
+ # The inline extend property for the cell
109
+ # @return [Boolean]
110
+ attr_reader :extend
111
+ # @see extend
112
+ def extend=(v) set_run_style :validate_boolean, :extend, v; end
113
+
114
+ # The inline underline property for the cell.
115
+ # It must be one of :none, :single, :double, :singleAccounting, :doubleAccounting, true
116
+ # @return [Boolean]
117
+ # @return [String]
118
+ # @note true is for backwards compatability and is reassigned to :single
119
+ attr_reader :u
120
+ # @see u
121
+ def u=(v)
122
+ v = :single if (v == true || v == 1 || v == :true || v == 'true')
123
+ set_run_style :validate_cell_u, :u, v
124
+ end
125
+
126
+ # The inline color property for the cell
127
+ # @return [Color]
128
+ attr_reader :color
129
+ # @param [String] v The 8 character representation for an rgb color #FFFFFFFF"
130
+ def color=(v)
131
+ @color = v.is_a?(Color) ? v : Color.new(:rgb=>v)
132
+ end
133
+
134
+ # The inline sz property for the cell
135
+ # @return [Inteter]
136
+ attr_reader :sz
137
+ # @see sz
138
+ def sz=(v) set_run_style :validate_unsigned_int, :sz, v; end
139
+
140
+ # The inline vertical alignment property for the cell
141
+ # this must be one of [:baseline, :subscript, :superscript]
142
+ # @return [Symbol]
143
+ attr_reader :vertAlign
144
+ # @see vertAlign
145
+ def vertAlign=(v)
146
+ RestrictionValidator.validate :cell_vertAlign, [:baseline, :subscript, :superscript], v
147
+ set_run_style nil, :vertAlign, v
148
+ end
149
+
150
+ # The inline scheme property for the cell
151
+ # this must be one of [:none, major, minor]
152
+ # @return [Symbol]
153
+ attr_reader :scheme
154
+ # @see scheme
155
+ def scheme=(v)
156
+ RestrictionValidator.validate :cell_scheme, [:none, :major, :minor], v
157
+ set_run_style nil, :scheme, v
158
+ end
159
+
160
+ # Tries to work out the width of the longest line in the run
161
+ # @param [Array] widtharray this array is populated with the widths of each line in the run.
162
+ # @return [Array]
163
+ def autowidth(widtharray)
164
+ return if value.nil?
165
+ if styles.cellXfs[style].alignment && styles.cellXfs[style].alignment.wrap_text
166
+ first = true
167
+ value.to_s.split(/\r?\n/, -1).each do |line|
168
+ if first
169
+ first = false
170
+ else
171
+ widtharray << 0
172
+ end
173
+ widtharray[-1] += string_width(line, font_size)
174
+ end
175
+ else
176
+ widtharray[-1] += string_width(value.to_s, font_size)
177
+ end
178
+ widtharray
179
+ end
180
+
181
+ # Utility method for setting inline style attributes
182
+ def set_run_style(validator, attr, value)
183
+ return unless INLINE_STYLES.include?(attr.to_sym)
184
+ Axlsx.send(validator, value) unless validator.nil?
185
+ self.instance_variable_set :"@#{attr.to_s}", value
186
+ end
187
+
188
+ # Serializes the RichTextRun
189
+ # @param [String] str
190
+ # @return [String]
191
+ def to_xml_string(str = '')
192
+ valid = RichTextRun::INLINE_STYLES
193
+ data = Hash[self.instance_values.map{ |k, v| [k.to_sym, v] }]
194
+ data = data.select { |key, value| valid.include?(key) && !value.nil? }
195
+
196
+ str << '<r><rPr>'
197
+ data.keys.each do |key|
198
+ case key
199
+ when :font_name
200
+ str << ('<rFont val="' << font_name << '"/>')
201
+ when :color
202
+ str << data[key].to_xml_string
203
+ else
204
+ str << ('<' << key.to_s << ' val="' << xml_value(data[key]) << '"/>')
205
+ end
206
+ end
207
+ clean_value = Axlsx::trust_input ? @value.to_s : ::CGI.escapeHTML(Axlsx::sanitize(@value.to_s))
208
+ str << ('</rPr><t>' << clean_value << '</t></r>')
209
+ end
210
+
211
+ private
212
+
213
+ # Returns the width of a string according to the current style
214
+ # This is still not perfect...
215
+ # - scaling is not linear as font sizes increase
216
+ def string_width(string, font_size)
217
+ font_scale = font_size / 10.0
218
+ string.count(Worksheet::THIN_CHARS) * font_scale
219
+ end
220
+
221
+ # we scale the font size if bold style is applied to either the style font or
222
+ # the cell itself. Yes, it is a bit of a hack, but it is much better than using
223
+ # imagemagick and loading metrics for every character.
224
+ def font_size
225
+ return sz if sz
226
+ font = styles.fonts[styles.cellXfs[style].fontId] || styles.fonts[0]
227
+ (font.b || (defined?(@b) && @b)) ? (font.sz * 1.5) : font.sz
228
+ end
229
+
230
+ def style
231
+ cell.style
232
+ end
233
+
234
+ def styles
235
+ cell.row.worksheet.styles
236
+ end
237
+
238
+ # Converts the value to the correct XML representation (fixes issues with
239
+ # Numbers)
240
+ def xml_value value
241
+ if value == true
242
+ 1
243
+ elsif value == false
244
+ 0
245
+ else
246
+ value
247
+ end.to_s
248
+ end
249
+ end
250
+ end