l_axlsx 2.0.1

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 (321) hide show
  1. data/.yardopts +9 -0
  2. data/.yardopts_guide +19 -0
  3. data/CHANGELOG.md +239 -0
  4. data/LICENSE +22 -0
  5. data/README.md +259 -0
  6. data/Rakefile +30 -0
  7. data/examples/2010_comments.rb +17 -0
  8. data/examples/IMAGE1UP.JPEG +0 -0
  9. data/examples/anchor_swapping.rb +28 -0
  10. data/examples/auto_filter.rb +16 -0
  11. data/examples/basic_charts.rb +58 -0
  12. data/examples/chart_colors.rb +88 -0
  13. data/examples/colored_links.rb +59 -0
  14. data/examples/conditional_formatting/example_conditional_formatting.rb +74 -0
  15. data/examples/conditional_formatting/getting_barred.rb +37 -0
  16. data/examples/conditional_formatting/hitting_the_high_notes.rb +37 -0
  17. data/examples/conditional_formatting/scaled_colors.rb +39 -0
  18. data/examples/conditional_formatting/stop_and_go.rb +37 -0
  19. data/examples/data_validation.rb +50 -0
  20. data/examples/example.rb +828 -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 +166 -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/ax_data_source.rb +26 -0
  43. data/lib/axlsx/drawing/axes.rb +61 -0
  44. data/lib/axlsx/drawing/axis.rb +190 -0
  45. data/lib/axlsx/drawing/bar_3D_chart.rb +151 -0
  46. data/lib/axlsx/drawing/bar_series.rb +82 -0
  47. data/lib/axlsx/drawing/bubble_chart.rb +59 -0
  48. data/lib/axlsx/drawing/bubble_series.rb +63 -0
  49. data/lib/axlsx/drawing/cat_axis.rb +85 -0
  50. data/lib/axlsx/drawing/chart.rb +232 -0
  51. data/lib/axlsx/drawing/d_lbls.rb +90 -0
  52. data/lib/axlsx/drawing/drawing.rb +164 -0
  53. data/lib/axlsx/drawing/graphic_frame.rb +54 -0
  54. data/lib/axlsx/drawing/hyperlink.rb +100 -0
  55. data/lib/axlsx/drawing/line_3D_chart.rb +68 -0
  56. data/lib/axlsx/drawing/line_chart.rb +99 -0
  57. data/lib/axlsx/drawing/line_series.rb +93 -0
  58. data/lib/axlsx/drawing/marker.rb +84 -0
  59. data/lib/axlsx/drawing/num_data.rb +52 -0
  60. data/lib/axlsx/drawing/num_data_source.rb +62 -0
  61. data/lib/axlsx/drawing/num_val.rb +32 -0
  62. data/lib/axlsx/drawing/one_cell_anchor.rb +98 -0
  63. data/lib/axlsx/drawing/pic.rb +204 -0
  64. data/lib/axlsx/drawing/picture_locking.rb +42 -0
  65. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -0
  66. data/lib/axlsx/drawing/pie_series.rb +74 -0
  67. data/lib/axlsx/drawing/scaling.rb +60 -0
  68. data/lib/axlsx/drawing/scatter_chart.rb +74 -0
  69. data/lib/axlsx/drawing/scatter_series.rb +65 -0
  70. data/lib/axlsx/drawing/ser_axis.rb +45 -0
  71. data/lib/axlsx/drawing/series.rb +69 -0
  72. data/lib/axlsx/drawing/series_title.rb +23 -0
  73. data/lib/axlsx/drawing/str_data.rb +42 -0
  74. data/lib/axlsx/drawing/str_val.rb +32 -0
  75. data/lib/axlsx/drawing/title.rb +78 -0
  76. data/lib/axlsx/drawing/two_cell_anchor.rb +92 -0
  77. data/lib/axlsx/drawing/val_axis.rb +37 -0
  78. data/lib/axlsx/drawing/view_3D.rb +115 -0
  79. data/lib/axlsx/drawing/vml_drawing.rb +42 -0
  80. data/lib/axlsx/drawing/vml_shape.rb +66 -0
  81. data/lib/axlsx/package.rb +363 -0
  82. data/lib/axlsx/rels/relationship.rb +129 -0
  83. data/lib/axlsx/rels/relationships.rb +29 -0
  84. data/lib/axlsx/stylesheet/border.rb +71 -0
  85. data/lib/axlsx/stylesheet/border_pr.rb +71 -0
  86. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -0
  87. data/lib/axlsx/stylesheet/cell_protection.rb +41 -0
  88. data/lib/axlsx/stylesheet/cell_style.rb +72 -0
  89. data/lib/axlsx/stylesheet/color.rb +76 -0
  90. data/lib/axlsx/stylesheet/dxf.rb +79 -0
  91. data/lib/axlsx/stylesheet/fill.rb +35 -0
  92. data/lib/axlsx/stylesheet/font.rb +148 -0
  93. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -0
  94. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -0
  95. data/lib/axlsx/stylesheet/num_fmt.rb +77 -0
  96. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -0
  97. data/lib/axlsx/stylesheet/styles.rb +420 -0
  98. data/lib/axlsx/stylesheet/table_style.rb +54 -0
  99. data/lib/axlsx/stylesheet/table_style_element.rb +77 -0
  100. data/lib/axlsx/stylesheet/table_styles.rb +46 -0
  101. data/lib/axlsx/stylesheet/xf.rb +147 -0
  102. data/lib/axlsx/util/accessors.rb +64 -0
  103. data/lib/axlsx/util/constants.rb +397 -0
  104. data/lib/axlsx/util/options_parser.rb +16 -0
  105. data/lib/axlsx/util/parser.rb +44 -0
  106. data/lib/axlsx/util/serialized_attributes.rb +89 -0
  107. data/lib/axlsx/util/simple_typed_list.rb +179 -0
  108. data/lib/axlsx/util/storage.rb +146 -0
  109. data/lib/axlsx/util/string.rb +7 -0
  110. data/lib/axlsx/util/validators.rb +307 -0
  111. data/lib/axlsx/version.rb +5 -0
  112. data/lib/axlsx/workbook/defined_name.rb +128 -0
  113. data/lib/axlsx/workbook/defined_names.rb +21 -0
  114. data/lib/axlsx/workbook/shared_strings_table.rb +77 -0
  115. data/lib/axlsx/workbook/workbook.rb +361 -0
  116. data/lib/axlsx/workbook/workbook_view.rb +78 -0
  117. data/lib/axlsx/workbook/workbook_views.rb +22 -0
  118. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -0
  119. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -0
  120. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -0
  121. data/lib/axlsx/workbook/worksheet/break.rb +35 -0
  122. data/lib/axlsx/workbook/worksheet/cell.rb +471 -0
  123. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +154 -0
  124. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -0
  125. data/lib/axlsx/workbook/worksheet/cfvos.rb +15 -0
  126. data/lib/axlsx/workbook/worksheet/col.rb +141 -0
  127. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -0
  128. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -0
  129. data/lib/axlsx/workbook/worksheet/cols.rb +20 -0
  130. data/lib/axlsx/workbook/worksheet/comment.rb +91 -0
  131. data/lib/axlsx/workbook/worksheet/comments.rb +82 -0
  132. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -0
  133. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -0
  134. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -0
  135. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -0
  136. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -0
  137. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -0
  138. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -0
  139. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -0
  140. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -0
  141. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -0
  142. data/lib/axlsx/workbook/worksheet/merged_cells.rb +35 -0
  143. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -0
  144. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -0
  145. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -0
  146. data/lib/axlsx/workbook/worksheet/pane.rb +139 -0
  147. data/lib/axlsx/workbook/worksheet/pivot_table.rb +266 -0
  148. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -0
  149. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -0
  150. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -0
  151. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -0
  152. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +34 -0
  153. data/lib/axlsx/workbook/worksheet/rich_text.rb +35 -0
  154. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +254 -0
  155. data/lib/axlsx/workbook/worksheet/row.rb +154 -0
  156. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -0
  157. data/lib/axlsx/workbook/worksheet/selection.rb +101 -0
  158. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -0
  159. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -0
  160. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +60 -0
  161. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +69 -0
  162. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -0
  163. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -0
  164. data/lib/axlsx/workbook/worksheet/table.rb +102 -0
  165. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -0
  166. data/lib/axlsx/workbook/worksheet/tables.rb +31 -0
  167. data/lib/axlsx/workbook/worksheet/worksheet.rb +798 -0
  168. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -0
  169. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -0
  170. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -0
  171. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -0
  172. data/lib/schema/dc.xsd +118 -0
  173. data/lib/schema/dcmitype.xsd +52 -0
  174. data/lib/schema/dcterms.xsd +331 -0
  175. data/lib/schema/dml-chart.xsd +1499 -0
  176. data/lib/schema/dml-chartDrawing.xsd +146 -0
  177. data/lib/schema/dml-compatibility.xsd +14 -0
  178. data/lib/schema/dml-diagram.xsd +1091 -0
  179. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  180. data/lib/schema/dml-main.xsd +3048 -0
  181. data/lib/schema/dml-picture.xsd +23 -0
  182. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  183. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  184. data/lib/schema/opc-contentTypes.xsd +42 -0
  185. data/lib/schema/opc-coreProperties.xsd +54 -0
  186. data/lib/schema/opc-digSig.xsd +49 -0
  187. data/lib/schema/opc-relationships.xsd +33 -0
  188. data/lib/schema/pml.xsd +1676 -0
  189. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  190. data/lib/schema/shared-bibliography.xsd +144 -0
  191. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  192. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  193. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  194. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  195. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  196. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  197. data/lib/schema/shared-math.xsd +582 -0
  198. data/lib/schema/shared-relationshipReference.xsd +25 -0
  199. data/lib/schema/sml.xsd +4434 -0
  200. data/lib/schema/vml-main.xsd +569 -0
  201. data/lib/schema/vml-officeDrawing.xsd +509 -0
  202. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  203. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  204. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  205. data/lib/schema/wml.xsd +3644 -0
  206. data/lib/schema/xml.xsd +116 -0
  207. data/test/benchmark.rb +72 -0
  208. data/test/content_type/tc_content_type.rb +76 -0
  209. data/test/content_type/tc_default.rb +16 -0
  210. data/test/content_type/tc_override.rb +14 -0
  211. data/test/doc_props/tc_app.rb +43 -0
  212. data/test/doc_props/tc_core.rb +42 -0
  213. data/test/drawing/tc_axes.rb +8 -0
  214. data/test/drawing/tc_axis.rb +112 -0
  215. data/test/drawing/tc_bar_3D_chart.rb +71 -0
  216. data/test/drawing/tc_bar_series.rb +37 -0
  217. data/test/drawing/tc_bubble_chart.rb +44 -0
  218. data/test/drawing/tc_bubble_series.rb +21 -0
  219. data/test/drawing/tc_cat_axis.rb +31 -0
  220. data/test/drawing/tc_cat_axis_data.rb +27 -0
  221. data/test/drawing/tc_chart.rb +110 -0
  222. data/test/drawing/tc_d_lbls.rb +57 -0
  223. data/test/drawing/tc_data_source.rb +23 -0
  224. data/test/drawing/tc_drawing.rb +80 -0
  225. data/test/drawing/tc_graphic_frame.rb +27 -0
  226. data/test/drawing/tc_hyperlink.rb +64 -0
  227. data/test/drawing/tc_line_3d_chart.rb +47 -0
  228. data/test/drawing/tc_line_chart.rb +39 -0
  229. data/test/drawing/tc_line_series.rb +38 -0
  230. data/test/drawing/tc_marker.rb +44 -0
  231. data/test/drawing/tc_named_axis_data.rb +27 -0
  232. data/test/drawing/tc_num_data.rb +31 -0
  233. data/test/drawing/tc_num_val.rb +29 -0
  234. data/test/drawing/tc_one_cell_anchor.rb +66 -0
  235. data/test/drawing/tc_pic.rb +107 -0
  236. data/test/drawing/tc_picture_locking.rb +72 -0
  237. data/test/drawing/tc_pie_3D_chart.rb +28 -0
  238. data/test/drawing/tc_pie_series.rb +32 -0
  239. data/test/drawing/tc_scaling.rb +36 -0
  240. data/test/drawing/tc_scatter_chart.rb +48 -0
  241. data/test/drawing/tc_scatter_series.rb +21 -0
  242. data/test/drawing/tc_ser_axis.rb +31 -0
  243. data/test/drawing/tc_series.rb +23 -0
  244. data/test/drawing/tc_series_title.rb +33 -0
  245. data/test/drawing/tc_str_data.rb +18 -0
  246. data/test/drawing/tc_str_val.rb +21 -0
  247. data/test/drawing/tc_title.rb +49 -0
  248. data/test/drawing/tc_two_cell_anchor.rb +36 -0
  249. data/test/drawing/tc_val_axis.rb +24 -0
  250. data/test/drawing/tc_view_3D.rb +54 -0
  251. data/test/drawing/tc_vml_drawing.rb +25 -0
  252. data/test/drawing/tc_vml_shape.rb +106 -0
  253. data/test/profile.rb +24 -0
  254. data/test/rels/tc_relationship.rb +44 -0
  255. data/test/rels/tc_relationships.rb +37 -0
  256. data/test/stylesheet/tc_border.rb +37 -0
  257. data/test/stylesheet/tc_border_pr.rb +32 -0
  258. data/test/stylesheet/tc_cell_alignment.rb +81 -0
  259. data/test/stylesheet/tc_cell_protection.rb +29 -0
  260. data/test/stylesheet/tc_cell_style.rb +57 -0
  261. data/test/stylesheet/tc_color.rb +43 -0
  262. data/test/stylesheet/tc_dxf.rb +81 -0
  263. data/test/stylesheet/tc_fill.rb +18 -0
  264. data/test/stylesheet/tc_font.rb +121 -0
  265. data/test/stylesheet/tc_gradient_fill.rb +72 -0
  266. data/test/stylesheet/tc_gradient_stop.rb +31 -0
  267. data/test/stylesheet/tc_num_fmt.rb +30 -0
  268. data/test/stylesheet/tc_pattern_fill.rb +43 -0
  269. data/test/stylesheet/tc_styles.rb +235 -0
  270. data/test/stylesheet/tc_table_style.rb +44 -0
  271. data/test/stylesheet/tc_table_style_element.rb +45 -0
  272. data/test/stylesheet/tc_table_styles.rb +29 -0
  273. data/test/stylesheet/tc_xf.rb +120 -0
  274. data/test/tc_axlsx.rb +72 -0
  275. data/test/tc_helper.rb +10 -0
  276. data/test/tc_package.rb +233 -0
  277. data/test/util/tc_serialized_attributes.rb +19 -0
  278. data/test/util/tc_simple_typed_list.rb +77 -0
  279. data/test/util/tc_validators.rb +186 -0
  280. data/test/workbook/tc_defined_name.rb +49 -0
  281. data/test/workbook/tc_shared_strings_table.rb +44 -0
  282. data/test/workbook/tc_workbook.rb +139 -0
  283. data/test/workbook/tc_workbook_view.rb +50 -0
  284. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -0
  285. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -0
  286. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -0
  287. data/test/workbook/worksheet/tc_break.rb +49 -0
  288. data/test/workbook/worksheet/tc_cell.rb +345 -0
  289. data/test/workbook/worksheet/tc_cfvo.rb +31 -0
  290. data/test/workbook/worksheet/tc_col.rb +78 -0
  291. data/test/workbook/worksheet/tc_color_scale.rb +58 -0
  292. data/test/workbook/worksheet/tc_comment.rb +72 -0
  293. data/test/workbook/worksheet/tc_comments.rb +57 -0
  294. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -0
  295. data/test/workbook/worksheet/tc_data_bar.rb +46 -0
  296. data/test/workbook/worksheet/tc_data_validation.rb +265 -0
  297. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -0
  298. data/test/workbook/worksheet/tc_header_footer.rb +151 -0
  299. data/test/workbook/worksheet/tc_icon_set.rb +45 -0
  300. data/test/workbook/worksheet/tc_page_margins.rb +97 -0
  301. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -0
  302. data/test/workbook/worksheet/tc_page_setup.rb +143 -0
  303. data/test/workbook/worksheet/tc_pane.rb +54 -0
  304. data/test/workbook/worksheet/tc_pivot_table.rb +120 -0
  305. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +54 -0
  306. data/test/workbook/worksheet/tc_print_options.rb +72 -0
  307. data/test/workbook/worksheet/tc_protected_range.rb +17 -0
  308. data/test/workbook/worksheet/tc_rich_text.rb +44 -0
  309. data/test/workbook/worksheet/tc_rich_text_run.rb +172 -0
  310. data/test/workbook/worksheet/tc_row.rb +117 -0
  311. data/test/workbook/worksheet/tc_selection.rb +55 -0
  312. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -0
  313. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -0
  314. data/test/workbook/worksheet/tc_sheet_pr.rb +27 -0
  315. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -0
  316. data/test/workbook/worksheet/tc_sheet_view.rb +214 -0
  317. data/test/workbook/worksheet/tc_table.rb +68 -0
  318. data/test/workbook/worksheet/tc_table_style_info.rb +53 -0
  319. data/test/workbook/worksheet/tc_worksheet.rb +563 -0
  320. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -0
  321. metadata +583 -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,34 @@
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
+ def to_xml_string(str = '')
28
+ return if empty?
29
+ str << '<protectedRanges>'
30
+ each { |range| range.to_xml_string(str) }
31
+ str << '</protectedRanges>'
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,35 @@
1
+ module Axlsx
2
+ class RichText < SimpleTypedList
3
+ def initialize(text = nil, options={})
4
+ super(RichTextRun)
5
+ add_run(text, options) unless text.nil?
6
+ yield self if block_given?
7
+ end
8
+
9
+ attr_reader :cell
10
+
11
+ def cell=(cell)
12
+ @cell = cell
13
+ each { |run| run.cell = cell }
14
+ end
15
+
16
+ def autowidth
17
+ widtharray = [0] # Are arrays the best way of solving this problem?
18
+ each { |run| run.autowidth(widtharray) }
19
+ widtharray.max
20
+ end
21
+
22
+ def add_run(text, options={})
23
+ self << RichTextRun.new(text, options)
24
+ end
25
+
26
+ def runs
27
+ self
28
+ end
29
+
30
+ def to_xml_string(str='')
31
+ each{ |run| run.to_xml_string(str) }
32
+ str
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,254 @@
1
+ module Axlsx
2
+ class RichTextRun
3
+
4
+ include Axlsx::OptionsParser
5
+
6
+ attr_reader :value
7
+
8
+ INLINE_STYLES = [:font_name, :charset,
9
+ :family, :b, :i, :strike, :outline,
10
+ :shadow, :condense, :extend, :u,
11
+ :vertAlign, :sz, :color, :scheme].freeze
12
+
13
+ def initialize(value, options={})
14
+ self.value = value
15
+ parse_options(options)
16
+ end
17
+
18
+ def value=(value)
19
+ @value = value
20
+ end
21
+
22
+ attr_accessor :cell
23
+
24
+ # The inline font_name property for the cell
25
+ # @return [String]
26
+ attr_reader :font_name
27
+ # @see font_name
28
+ def font_name=(v) set_run_style :validate_string, :font_name, v; end
29
+
30
+ # The inline charset property for the cell
31
+ # As far as I can tell, this is pretty much ignored. However, based on the spec it should be one of the following:
32
+ # 0  ANSI_CHARSET
33
+ # 1 DEFAULT_CHARSET
34
+ # 2 SYMBOL_CHARSET
35
+ # 77 MAC_CHARSET
36
+ # 128 SHIFTJIS_CHARSET
37
+ # 129  HANGUL_CHARSET
38
+ # 130  JOHAB_CHARSET
39
+ # 134  GB2312_CHARSET
40
+ # 136  CHINESEBIG5_CHARSET
41
+ # 161  GREEK_CHARSET
42
+ # 162  TURKISH_CHARSET
43
+ # 163  VIETNAMESE_CHARSET
44
+ # 177  HEBREW_CHARSET
45
+ # 178  ARABIC_CHARSET
46
+ # 186  BALTIC_CHARSET
47
+ # 204  RUSSIAN_CHARSET
48
+ # 222  THAI_CHARSET
49
+ # 238  EASTEUROPE_CHARSET
50
+ # 255  OEM_CHARSET
51
+ # @return [String]
52
+ attr_reader :charset
53
+ # @see charset
54
+ def charset=(v) set_run_style :validate_unsigned_int, :charset, v; end
55
+
56
+ # The inline family property for the cell
57
+ # @return [Integer]
58
+ # 1 Roman
59
+ # 2 Swiss
60
+ # 3 Modern
61
+ # 4 Script
62
+ # 5 Decorative
63
+ attr_reader :family
64
+ # @see family
65
+ def family=(v)
66
+ set_run_style :validate_family, :family, v.to_i
67
+ end
68
+
69
+ # The inline bold property for the cell
70
+ # @return [Boolean]
71
+ attr_reader :b
72
+ # @see b
73
+ def b=(v) set_run_style :validate_boolean, :b, v; end
74
+
75
+ # The inline italic property for the cell
76
+ # @return [Boolean]
77
+ attr_reader :i
78
+ # @see i
79
+ def i=(v) set_run_style :validate_boolean, :i, v; end
80
+
81
+ # The inline strike property for the cell
82
+ # @return [Boolean]
83
+ attr_reader :strike
84
+ # @see strike
85
+ def strike=(v) set_run_style :validate_boolean, :strike, v; end
86
+
87
+ # The inline outline property for the cell
88
+ # @return [Boolean]
89
+ attr_reader :outline
90
+ # @see outline
91
+ def outline=(v) set_run_style :validate_boolean, :outline, v; end
92
+
93
+ # The inline shadow property for the cell
94
+ # @return [Boolean]
95
+ attr_reader :shadow
96
+ # @see shadow
97
+ def shadow=(v) set_run_style :validate_boolean, :shadow, v; end
98
+
99
+ # The inline condense property for the cell
100
+ # @return [Boolean]
101
+ attr_reader :condense
102
+ # @see condense
103
+ def condense=(v) set_run_style :validate_boolean, :condense, v; end
104
+
105
+ # The inline extend property for the cell
106
+ # @return [Boolean]
107
+ attr_reader :extend
108
+ # @see extend
109
+ def extend=(v) set_run_style :validate_boolean, :extend, v; end
110
+
111
+ # The inline underline property for the cell.
112
+ # It must be one of :none, :single, :double, :singleAccounting, :doubleAccounting, true
113
+ # @return [Boolean]
114
+ # @return [String]
115
+ # @note true is for backwards compatability and is reassigned to :single
116
+ attr_reader :u
117
+ # @see u
118
+ def u=(v)
119
+ v = :single if (v == true || v == 1 || v == :true || v == 'true')
120
+ set_run_style :validate_cell_u, :u, v
121
+ end
122
+
123
+ # The inline color property for the cell
124
+ # @return [Color]
125
+ attr_reader :color
126
+ # @param [String] v The 8 character representation for an rgb color #FFFFFFFF"
127
+ def color=(v)
128
+ @color = v.is_a?(Color) ? v : Color.new(:rgb=>v)
129
+ end
130
+
131
+ # The inline sz property for the cell
132
+ # @return [Inteter]
133
+ attr_reader :sz
134
+ # @see sz
135
+ def sz=(v) set_run_style :validate_unsigned_int, :sz, v; end
136
+
137
+ # The inline vertical alignment property for the cell
138
+ # this must be one of [:baseline, :subscript, :superscript]
139
+ # @return [Symbol]
140
+ attr_reader :vertAlign
141
+ # @see vertAlign
142
+ def vertAlign=(v)
143
+ RestrictionValidator.validate :cell_vertAlign, [:baseline, :subscript, :superscript], v
144
+ set_run_style nil, :vertAlign, v
145
+ end
146
+
147
+ # The inline scheme property for the cell
148
+ # this must be one of [:none, major, minor]
149
+ # @return [Symbol]
150
+ attr_reader :scheme
151
+ # @see scheme
152
+ def scheme=(v)
153
+ RestrictionValidator.validate :cell_scheme, [:none, :major, :minor], v
154
+ set_run_style nil, :scheme, v
155
+ end
156
+
157
+ # The Shared Strings Table index for this cell
158
+ # @return [Integer]
159
+ attr_reader :ssti
160
+
161
+ # @return [Integer] The cellXfs item index applied to this cell.
162
+ # @raise [ArgumentError] Invalid cellXfs id if the value provided is not within cellXfs items range.
163
+ def style=(v)
164
+ Axlsx::validate_unsigned_int(v)
165
+ count = styles.cellXfs.size
166
+ raise ArgumentError, "Invalid cellXfs id" unless v < count
167
+ @style = v
168
+ end
169
+
170
+ def autowidth(widtharray)
171
+ return if value.nil?
172
+ if styles.cellXfs[style].alignment && styles.cellXfs[style].alignment.wrap_text
173
+ first = true
174
+ value.to_s.split(/\r?\n/, -1).each do |line|
175
+ if first
176
+ first = false
177
+ else
178
+ widtharray << 0
179
+ end
180
+ widtharray[-1] += string_width(line, font_size)
181
+ end
182
+ else
183
+ widtharray[-1] += string_width(value.to_s, font_size)
184
+ end
185
+ widtharray
186
+ end
187
+
188
+ # Utility method for setting inline style attributes
189
+ def set_run_style(validator, attr, value)
190
+ return unless INLINE_STYLES.include?(attr.to_sym)
191
+ Axlsx.send(validator, value) unless validator.nil?
192
+ self.instance_variable_set :"@#{attr.to_s}", value
193
+ end
194
+
195
+ def to_xml_string(str = '')
196
+ valid = RichTextRun::INLINE_STYLES
197
+ data = Hash[self.instance_values.map{ |k, v| [k.to_sym, v] }]
198
+ data = data.select { |key, value| valid.include?(key) && !value.nil? }
199
+
200
+ str << '<r><rPr>'
201
+ data.keys.each do |key|
202
+ case key
203
+ when :font_name
204
+ str << ('<rFont val="' << font_name << '"/>')
205
+ when :color
206
+ str << data[key].to_xml_string
207
+ else
208
+ str << ('<' << key.to_s << ' val="' << xml_value(data[key]) << '"/>')
209
+ end
210
+ end
211
+ clean_value = Axlsx::trust_input ? @value.to_s : ::CGI.escapeHTML(Axlsx::sanitize(@value.to_s))
212
+ str << ('</rPr><t>' << clean_value << '</t></r>')
213
+ end
214
+
215
+ private
216
+
217
+ # Returns the width of a string according to the current style
218
+ # This is still not perfect...
219
+ # - scaling is not linear as font sizes increase
220
+ def string_width(string, font_size)
221
+ font_scale = font_size / 10.0
222
+ string.count(Worksheet::THIN_CHARS) * font_scale
223
+ end
224
+
225
+ # we scale the font size if bold style is applied to either the style font or
226
+ # the cell itself. Yes, it is a bit of a hack, but it is much better than using
227
+ # imagemagick and loading metrics for every character.
228
+ def font_size
229
+ return sz if sz
230
+ font = styles.fonts[styles.cellXfs[style].fontId] || styles.fonts[0]
231
+ (font.b || (defined?(@b) && @b)) ? (font.sz * 1.5) : font.sz
232
+ end
233
+
234
+ def style
235
+ cell.style
236
+ end
237
+
238
+ def styles
239
+ cell.row.worksheet.styles
240
+ end
241
+
242
+ # Converts the value to the correct XML representation (fixes issues with
243
+ # Numbers)
244
+ def xml_value value
245
+ if value == true
246
+ 1
247
+ elsif value == false
248
+ 0
249
+ else
250
+ value
251
+ end.to_s
252
+ end
253
+ end
254
+ end
@@ -0,0 +1,154 @@
1
+ # encoding: UTF-8
2
+ module Axlsx
3
+ # A Row is a single row in a worksheet.
4
+ # @note The recommended way to manage rows and cells is to use Worksheet#add_row
5
+ # @see Worksheet#add_row
6
+ class Row < SimpleTypedList
7
+ include SerializedAttributes
8
+ include Accessors
9
+
10
+ # No support is provided for the following attributes
11
+ # spans
12
+ # thickTop
13
+ # thickBottom
14
+
15
+ # Creates a new row. New Cell objects are created based on the values, types and style options.
16
+ # A new cell is created for each item in the values array. style and types options are applied as follows:
17
+ # If the types option is defined and is a symbol it is applied to all the cells created.
18
+ # If the types option is an array, cell types are applied by index for each cell
19
+ # If the types option is not set, the cell will automatically determine its type.
20
+ # If the style option is defined and is an Integer, it is applied to all cells created.
21
+ # If the style option is an array, style is applied by index for each cell.
22
+ # If the style option is not defined, the default style (0) is applied to each cell.
23
+ # @param [Worksheet] worksheet
24
+ # @option options [Array] values
25
+ # @option options [Array, Symbol] types
26
+ # @option options [Array, Integer] style
27
+ # @option options [Float] height the row's height (in points)
28
+ # @see Row#array_to_cells
29
+ # @see Cell
30
+ def initialize(worksheet, values=[], options={})
31
+ self.worksheet = worksheet
32
+ super(Cell, nil, values.size)
33
+ self.height = options.delete(:height)
34
+ worksheet.rows << self
35
+ array_to_cells(values, options)
36
+ end
37
+
38
+ # A list of serializable attributes.
39
+ serializable_attributes :hidden, :outline_level, :collapsed, :custom_format, :s, :ph, :custom_height, :ht
40
+
41
+ # Boolean row attribute accessors
42
+ boolean_attr_accessor :hidden, :collapsed, :custom_format, :ph, :custom_height
43
+
44
+ # The worksheet this row belongs to
45
+ # @return [Worksheet]
46
+ attr_reader :worksheet
47
+
48
+ # Row height measured in point size. There is no margin padding on row height.
49
+ # @return [Float]
50
+ def height
51
+ defined?(@ht) ? @ht : nil
52
+ end
53
+
54
+ # Outlining level of the row, when outlining is on
55
+ # @return [Integer]
56
+ attr_reader :outline_level
57
+ alias :outlineLevel :outline_level
58
+
59
+ # The style applied ot the row. This affects the entire row.
60
+ # @return [Integer]
61
+ attr_reader :s
62
+
63
+ # @see Row#s
64
+ def s=(v)
65
+ Axlsx.validate_unsigned_numeric(v)
66
+ @custom_format = true
67
+ @s = v
68
+ end
69
+
70
+ # @see Row#outline
71
+ def outline_level=(v)
72
+ Axlsx.validate_unsigned_numeric(v)
73
+ @outline_level = v
74
+ end
75
+
76
+ alias :outlineLevel= :outline_level=
77
+
78
+ # The index of this row in the worksheet
79
+ # @return [Integer]
80
+ def row_index
81
+ worksheet.rows.index(self)
82
+ end
83
+
84
+ # Serializes the row
85
+ # @param [Integer] r_index The row index, 0 based.
86
+ # @param [String] str The string this rows xml will be appended to.
87
+ # @return [String]
88
+ def to_xml_string(r_index, str = '')
89
+ serialized_tag('row', str, :r => r_index + 1) do
90
+ tmp = '' # time / memory tradeoff, lots of calls to rubyzip costs more
91
+ # time..
92
+ each_with_index { |cell, c_index| cell.to_xml_string(r_index, c_index, tmp) }
93
+ str << tmp
94
+ end
95
+ end
96
+
97
+ # Adds a single sell to the row based on the data provided and updates the worksheet's autofit data.
98
+ # @return [Cell]
99
+ def add_cell(value = '', options = {})
100
+ c = Cell.new(self, value, options)
101
+ self << c
102
+ worksheet.send(:update_column_info, self, [])
103
+ c
104
+ end
105
+
106
+ # sets the style for every cell in this row
107
+ def style=(style)
108
+ each_with_index do | cell, index |
109
+ cell.style = style.is_a?(Array) ? style[index] : style
110
+ end
111
+ end
112
+
113
+ # @see height
114
+ def height=(v)
115
+ unless v.nil?
116
+ Axlsx::validate_unsigned_numeric(v)
117
+ @custom_height = true
118
+ @ht = v
119
+ end
120
+ end
121
+
122
+ # return cells
123
+ def cells
124
+ self
125
+ end
126
+
127
+ private
128
+
129
+ # assigns the owning worksheet for this row
130
+ def worksheet=(v) DataTypeValidator.validate :row_worksheet, Worksheet, v; @worksheet=v; end
131
+
132
+ # Converts values, types, and style options into cells and associates them with this row.
133
+ # A new cell is created for each item in the values array.
134
+ # If value option is defined and is a symbol it is applied to all the cells created.
135
+ # If the value option is an array, cell types are applied by index for each cell
136
+ # If the style option is defined and is an Integer, it is applied to all cells created.
137
+ # If the style option is an array, style is applied by index for each cell.
138
+ # @option options [Array] values
139
+ # @option options [Array, Symbol] types
140
+ # @option options [Array, Integer] style
141
+ def array_to_cells(values, options={})
142
+ DataTypeValidator.validate :array_to_cells, Array, values
143
+ types, style, formula_values = options.delete(:types), options.delete(:style), options.delete(:formula_values)
144
+ values.each_with_index do |value, index|
145
+ options[:style] = style.is_a?(Array) ? style[index] : style if style
146
+ options[:type] = types.is_a?(Array) ? types[index] : types if types
147
+ options[:formula_value] = formula_values[index] if formula_values.is_a?(Array)
148
+
149
+ self[index] = Cell.new(self, value, options)
150
+ end
151
+ end
152
+ end
153
+
154
+ end