axlsx-alt 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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,80 @@
1
+ # <xsd:complexType name="CT_BookView">
2
+ # <xsd:sequence>
3
+ # <xsd:element name="extLst" type="CT_ExtensionList" minOccurs="0" maxOccurs="1"/>
4
+ # </xsd:sequence>
5
+ # <xsd:attribute name="visibility" type="ST_Visibility" use="optional" default="visible"/>
6
+ # <xsd:attribute name="minimized" type="xsd:boolean" use="optional" default="false"/>
7
+ # <xsd:attribute name="showHorizontalScroll" type="xsd:boolean" use="optional" default="true"/>
8
+ # <xsd:attribute name="showVerticalScroll" type="xsd:boolean" use="optional" default="true"/>
9
+ # <xsd:attribute name="showSheetTabs" type="xsd:boolean" use="optional" default="true"/>
10
+ # <xsd:attribute name="xWindow" type="xsd:int" use="optional"/>
11
+ # <xsd:attribute name="yWindow" type="xsd:int" use="optional"/>
12
+ # <xsd:attribute name="windowWidth" type="xsd:unsignedInt" use="optional"/>
13
+ # <xsd:attribute name="windowHeight" type="xsd:unsignedInt" use="optional"/>
14
+ # <xsd:attribute name="tabRatio" type="xsd:unsignedInt" use="optional" default="600"/>
15
+ # <xsd:attribute name="firstSheet" type="xsd:unsignedInt" use="optional" default="0"/>
16
+ # <xsd:attribute name="activeTab" type="xsd:unsignedInt" use="optional" default="0"/>
17
+ # <xsd:attribute name="autoFilterDateGrouping" type="xsd:boolean" use="optional"
18
+ # default="true"/>
19
+ # </xsd:complexType>
20
+
21
+ module Axlsx
22
+
23
+ # A BookView defines the display properties for a workbook.
24
+ # Units for window widths and other dimensions are expressed in twips.
25
+ # Twip measurements are portable between different display resolutions.
26
+ # The formula is (screen pixels) * (20 * 72) / (logical device dpi),
27
+ # where the logical device dpi can be different for x and y coordinates.
28
+ class WorkbookView
29
+
30
+ include Axlsx::SerializedAttributes
31
+ include Axlsx::OptionsParser
32
+ include Axlsx::Accessors
33
+
34
+
35
+ # Creates a new BookView object
36
+ # @param [Hash] options A hash of key/value pairs that will be mapped to this instances attributes.
37
+ # @option [Symbol] visibility Specifies visible state of the workbook window. The default value for this attribute is :visible.
38
+ # @option [Boolean] minimized Specifies a boolean value that indicates whether the workbook window is minimized.
39
+ # @option [Boolean] show_horizontal_scroll Specifies a boolean value that indicates whether to display the horizontal scroll bar in the user interface.
40
+ # @option [Boolean] show_vertical_scroll Specifies a boolean value that indicates whether to display the vertical scroll bar.
41
+ # @option [Boolean] show_sheet_tabs Specifies a boolean value that indicates whether to display the sheet tabs in the user interface.
42
+ # @option [Integer] tab_ratio Specifies ratio between the workbook tabs bar and the horizontal scroll bar.
43
+ # @option [Integer] first_sheet Specifies the index to the first sheet in this book view.
44
+ # @option [Integer] active_tab Specifies an unsignedInt that contains the index to the active sheet in this book view.
45
+ # @option [Integer] x_window Specifies the X coordinate for the upper left corner of the workbook window. The unit of measurement for this value is twips.
46
+ # @option [Integer] y_window Specifies the Y coordinate for the upper left corner of the workbook window. The unit of measurement for this value is twips.
47
+ # @option [Integer] window_width Specifies the width of the workbook window. The unit of measurement for this value is twips.
48
+ # @option [Integer] window_height Specifies the height of the workbook window. The unit of measurement for this value is twips.
49
+ # @option [Boolean] auto_filter_date_grouping Specifies a boolean value that indicates whether to group dates when presenting the user with filtering options in the user interface.
50
+ def initialize(options={})
51
+ parse_options options
52
+ yield self if block_given?
53
+ end
54
+
55
+
56
+ unsigned_int_attr_accessor :x_window, :y_window, :window_width, :window_height,
57
+ :tab_ratio, :first_sheet, :active_tab
58
+
59
+ validated_attr_accessor [:visibility], :validate_view_visibility
60
+
61
+ serializable_attributes :visibility, :minimized,
62
+ :show_horizontal_scroll, :show_vertical_scroll,
63
+ :show_sheet_tabs, :tab_ratio, :first_sheet, :active_tab,
64
+ :x_window, :y_window, :window_width, :window_height,
65
+ :auto_filter_date_grouping
66
+
67
+ boolean_attr_accessor :minimized, :show_horizontal_scroll, :show_vertical_scroll,
68
+ :show_sheet_tabs, :auto_filter_date_grouping
69
+
70
+
71
+ # Serialize the WorkbookView
72
+ # @param [String] str
73
+ # @return [String]
74
+ def to_xml_string(str = '')
75
+ str << '<workbookView '
76
+ serialized_attributes str
77
+ str << '></workbookView>'
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,22 @@
1
+ module Axlsx
2
+ # a simple types list of BookView objects
3
+ class WorkbookViews < SimpleTypedList
4
+
5
+ # creates the book views object
6
+ def initialize
7
+ super WorkbookView
8
+ end
9
+
10
+ # Serialize to xml
11
+ # @param [String] str
12
+ # @return [String]
13
+ def to_xml_string(str = '')
14
+ return if empty?
15
+ str << "<bookViews>"
16
+ each { |view| view.to_xml_string(str) }
17
+ str << '</bookViews>'
18
+ end
19
+ end
20
+ end
21
+
22
+
@@ -0,0 +1,77 @@
1
+
2
+ require 'axlsx/workbook/worksheet/auto_filter/filter_column.rb'
3
+ require 'axlsx/workbook/worksheet/auto_filter/filters.rb'
4
+
5
+ module Axlsx
6
+
7
+ #This class represents an auto filter range in a worksheet
8
+ class AutoFilter
9
+
10
+ # creates a new Autofilter object
11
+ # @param [Worksheet] worksheet
12
+ def initialize(worksheet)
13
+ raise ArgumentError, 'you must provide a worksheet' unless worksheet.is_a?(Worksheet)
14
+ @worksheet = worksheet
15
+ end
16
+
17
+ attr_reader :worksheet
18
+
19
+ # The range the autofilter should be applied to.
20
+ # This should be a string like 'A1:B8'
21
+ # @return [String]
22
+ attr_accessor :range
23
+
24
+ # the formula for the defined name required for this auto filter
25
+ # This prepends the worksheet name to the absolute cell reference
26
+ # e.g. A1:B2 -> 'Sheet1'!$A$1:$B$2
27
+ # @return [String]
28
+ def defined_name
29
+ return unless range
30
+ Axlsx.cell_range(range.split(':').collect { |name| worksheet.name_to_cell(name)})
31
+ end
32
+
33
+ # A collection of filterColumns for this auto_filter
34
+ # @return [SimpleTypedList]
35
+ def columns
36
+ @columns ||= SimpleTypedList.new FilterColumn
37
+ end
38
+
39
+ # Adds a filter column. This is the recommended way to create and manage filter columns for your autofilter.
40
+ # In addition to the require id and type parameters, options will be passed to the filter column during instantiation.
41
+ # @param [String] col_id Zero-based index indicating the AutoFilter column to which this filter information applies.
42
+ # @param [Symbol] filter_type A symbol representing one of the supported filter types.
43
+ # @param [Hash] options a hash of options to pass into the generated filter
44
+ # @return [FilterColumn]
45
+ def add_column(col_id, filter_type, options = {})
46
+ columns << FilterColumn.new(col_id, filter_type, options)
47
+ columns.last
48
+ end
49
+
50
+ # actually performs the filtering of rows who's cells do not
51
+ # match the filter.
52
+ def apply
53
+ first_cell, last_cell = range.split(':')
54
+ start_point = Axlsx::name_to_indices(first_cell)
55
+ end_point = Axlsx::name_to_indices(last_cell)
56
+ # The +1 is so we skip the header row with the filter drop downs
57
+ rows = worksheet.rows[(start_point.last+1)..end_point.last] || []
58
+
59
+ column_offset = start_point.first
60
+ columns.each do |column|
61
+ rows.each do |row|
62
+ next if row.hidden
63
+ column.apply(row, column_offset)
64
+ end
65
+ end
66
+ end
67
+ # serialize the object
68
+ # @return [String]
69
+ def to_xml_string(str='')
70
+ return unless range
71
+ str << "<autoFilter ref='#{range}'>"
72
+ columns.each { |filter_column| filter_column.to_xml_string(str) }
73
+ str << "</autoFilter>"
74
+ end
75
+
76
+ end
77
+ end
@@ -0,0 +1,94 @@
1
+ module Axlsx
2
+ # The filterColumn collection identifies a particular column in the AutoFilter
3
+ # range and specifies filter information that has been applied to this column.
4
+ # If a column in the AutoFilter range has no criteria specified,
5
+ # then there is no corresponding filterColumn collection expressed for that column.
6
+ class FilterColumn
7
+
8
+ include Axlsx::OptionsParser
9
+ include Axlsx::SerializedAttributes
10
+
11
+ # Creates a new FilterColumn object
12
+ # @note This class yeilds its filter object as that is where the vast majority of processing will be done
13
+ # @param [Integer|Cell] col_id The zero based index for the column to which this filter will be applied
14
+ # @param [Symbol] filter_type The symbolized class name of the filter to apply to this column.
15
+ # @param [Hash] options options for this object and the filter
16
+ # @option [Boolean] hidden_button @see hidden_button
17
+ # @option [Boolean] show_button @see show_button
18
+ def initialize(col_id, filter_type, options = {})
19
+ RestrictionValidator.validate 'FilterColumn.filter', FILTERS, filter_type
20
+ #Axlsx::validate_unsigned_int(col_id)
21
+ self.col_id = col_id
22
+ parse_options options
23
+ @filter = Axlsx.const_get(Axlsx.camel(filter_type)).new(options)
24
+ yield @filter if block_given?
25
+ end
26
+
27
+ serializable_attributes :col_id, :hidden_button, :show_button
28
+
29
+ # Allowed filters
30
+ FILTERS = [:filters] #, :top10, :custom_filters, :dynamic_filters, :color_filters, :icon_filters]
31
+
32
+ # Zero-based index indicating the AutoFilter column to which this filter information applies.
33
+ # @return [Integer]
34
+ attr_reader :col_id
35
+
36
+ # The actual filter being dealt with here
37
+ # This could be any one of the allowed filter types
38
+ attr_reader :filter
39
+
40
+ # Flag indicating whether the filter button is visible.
41
+ # When the cell containing the filter button is merged with another cell,
42
+ # the filter button can be hidden, and not drawn.
43
+ # @return [Boolean]
44
+ def show_button
45
+ @show_button ||= true
46
+ end
47
+
48
+ # Flag indicating whether the AutoFilter button for this column is hidden.
49
+ # @return [Boolean]
50
+ def hidden_button
51
+ @hidden_button ||= false
52
+ end
53
+
54
+ # Sets the col_id attribute for this filter column.
55
+ # @param [Integer | Cell] column_index The zero based index of the column to which this filter applies.
56
+ # When you specify a cell, the column index will be read off the cell
57
+ # @return [Integer]
58
+ def col_id=(column_index)
59
+ column_index = column_index.col if column_index.is_a?(Cell)
60
+ Axlsx.validate_unsigned_int column_index
61
+ @col_id = column_index
62
+ end
63
+
64
+ # Apply the filters for this column
65
+ # @param [Array] row A row from a worksheet that needs to be
66
+ # filtered.
67
+ def apply(row, offset)
68
+ row.hidden = @filter.apply(row.cells[offset+col_id.to_i])
69
+ end
70
+ # @param [Boolean] hidden Flag indicating whether the AutoFilter button for this column is hidden.
71
+ # @return [Boolean]
72
+ def hidden_button=(hidden)
73
+ Axlsx.validate_boolean hidden
74
+ @hidden_button = hidden
75
+ end
76
+
77
+ # Flag indicating whether the AutoFilter button is show. This is
78
+ # undocumented in the spec, but exists in the schema file as an
79
+ # optional attribute.
80
+ # @param [Boolean] show Show or hide the button
81
+ # @return [Boolean]
82
+ def show_button=(show)
83
+ Axlsx.validate_boolean show
84
+ @show_botton = show
85
+ end
86
+
87
+ # Serialize the object to xml
88
+ def to_xml_string(str='')
89
+ str << "<filterColumn #{serialized_attributes}>"
90
+ @filter.to_xml_string(str)
91
+ str << "</filterColumn>"
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,244 @@
1
+ module Axlsx
2
+
3
+ # When multiple values are chosen to filter by, or when a group of date values are chosen to filter by,
4
+ # this object groups those criteria together.
5
+ class Filters
6
+ include Axlsx::OptionsParser
7
+ include Axlsx::SerializedAttributes
8
+
9
+ # Creates a new Filters object
10
+ # @param [Hash] options Options used to set this objects attributes and
11
+ # create filter and/or date group items
12
+ # @option [Boolean] blank @see blank
13
+ # @option [String] calendar_type @see calendar_type
14
+ # @option [Array] filter_items An array of values that will be used to create filter objects.
15
+ # @option [Array] date_group_items An array of hases defining date group item filters to apply.
16
+ # @note The recommended way to interact with filter objects is via AutoFilter#add_column
17
+ # @example
18
+ # ws.auto_filter.add_column(0, :filters, :blank => true, :calendar_type => 'japan', :filter_items => [100, 'a'])
19
+ def initialize(options={})
20
+ parse_options options
21
+ end
22
+
23
+ serializable_attributes :blank, :calendar_type
24
+
25
+ # Allowed calendar types
26
+ CALENDAR_TYPES = %w(gregorian gregorianUs gregorianMeFrench gregorianArabic hijri hebrew taiwan japan thai korea saka gregorianXlitEnglish gregorianXlitFrench none)
27
+
28
+ # Flag indicating whether to filter by blank.
29
+ # @return [Boolean]
30
+ attr_reader :blank
31
+
32
+ # Calendar type for date grouped items.
33
+ # Used to interpret the values in dateGroupItem.
34
+ # This is the calendar type used to evaluate all dates in the filter column,
35
+ # even when those dates are not using the same calendar system / date formatting.
36
+ attr_reader :calendar_type
37
+
38
+ # Tells us if the row of the cell provided should be filterd as it
39
+ # does not meet any of the specified filter_items or
40
+ # date_group_items restrictions.
41
+ # @param [Cell] cell The cell to test against items
42
+ # TODO implement this for date filters as well!
43
+ def apply(cell)
44
+ return false unless cell
45
+ filter_items.each do |filter|
46
+ return false if cell.value == filter.val
47
+ end
48
+ true
49
+ end
50
+
51
+ # The filter values in this filters object
52
+ def filter_items
53
+ @filter_items ||= []
54
+ end
55
+
56
+ # the date group values in this filters object
57
+ def date_group_items
58
+ @date_group_items ||= []
59
+ end
60
+
61
+ # @see calendar_type
62
+ # @param [String] calendar The calendar type to use. This must be one of the types defined in CALENDAR_TYPES
63
+ # @return [String]
64
+ def calendar_type=(calendar)
65
+ RestrictionValidator.validate 'Filters.calendar_type', CALENDAR_TYPES, calendar
66
+ @calendar_type = calendar
67
+ end
68
+
69
+ # Set the value for blank
70
+ # @see blank
71
+ def blank=(use_blank)
72
+ Axlsx.validate_boolean use_blank
73
+ @blank = use_blank
74
+ end
75
+
76
+ # Serialize the object to xml
77
+ def to_xml_string(str = '')
78
+ str << "<filters #{serialized_attributes}>"
79
+ filter_items.each { |filter| filter.to_xml_string(str) }
80
+ date_group_items.each { |date_group_item| date_group_item.to_xml_string(str) }
81
+ str << '</filters>'
82
+ end
83
+
84
+ # not entirely happy with this.
85
+ # filter_items should be a simple typed list that overrides << etc
86
+ # to create Filter objects from the inserted values. However this
87
+ # is most likely so rarely used...(really? do you know that?)
88
+ def filter_items=(values)
89
+ values.each do |value|
90
+ filter_items << Filter.new(value)
91
+ end
92
+ end
93
+
94
+ # Date group items are date group filter items where you specify the
95
+ # date_group and a value for that option as part of the auto_filter
96
+ # @note This can be specified, but will not be applied to the date
97
+ # values in your workbook at this time.
98
+ def date_group_items=(options)
99
+ options.each do |date_group|
100
+ raise ArgumentError, "date_group_items should be an array of hashes specifying the options for each date_group_item" unless date_group.is_a?(Hash)
101
+ date_group_items << DateGroupItem.new(date_group)
102
+ end
103
+ end
104
+
105
+ # This class expresses a filter criteria value.
106
+ class Filter
107
+
108
+ # Creates a new filter value object
109
+ # @param [Any] value The value of the filter. This is not restricted, but
110
+ # will be serialized via to_s so if you are passing an object
111
+ # be careful.
112
+ def initialize(value)
113
+ @val = value
114
+ end
115
+
116
+
117
+ #Filter value used in the criteria.
118
+ attr_accessor :val
119
+
120
+ # Serializes the filter value object
121
+ # @param [String] str The string to concact the serialization information to.
122
+ def to_xml_string(str = '')
123
+ str << "<filter val='#{@val.to_s}' />"
124
+ end
125
+ end
126
+
127
+
128
+ # This collection is used to express a group of dates or times which are
129
+ # used in an AutoFilter criteria. Values are always written in the calendar
130
+ # type of the first date encountered in the filter range, so that all
131
+ # subsequent dates, even when formatted or represented by other calendar
132
+ # types, can be correctly compared for the purposes of filtering.
133
+ class DateGroupItem
134
+ include Axlsx::OptionsParser
135
+ include Axlsx::SerializedAttributes
136
+
137
+ # Creates a new DateGroupItem
138
+ # @param [Hash] options A hash of options to use when
139
+ # instanciating the object
140
+ # @option [String] date_time_grouping the part of the date this
141
+ # filter should apply for grouping
142
+ # @option [Integer|String] year @see year
143
+ # @option [Integer] month @see month
144
+ # @option [Integer] day @see day
145
+ # @option [Integer] hour @see hour
146
+ # @option [Integer] minute @see minute
147
+ # @option [Integer] second @see second
148
+ def initialize(options={})
149
+ raise ArgumentError, "You must specify a year for date time grouping" unless options[:year]
150
+ raise ArgumentError, "You must specify a date_time_grouping when creating a DateGroupItem for auto filter" unless options[:date_time_grouping]
151
+ parse_options options
152
+ end
153
+
154
+ serializable_attributes :date_time_grouping, :year, :month, :day, :hour, :minute, :second
155
+
156
+ # Allowed date time groupings
157
+ DATE_TIME_GROUPING = %w(year month day hour minute second)
158
+
159
+ # Grouping level
160
+ # This must be one of year, month, day, hour, minute or second.
161
+ # @return [String]
162
+ attr_reader :date_time_grouping
163
+
164
+ # Year (4 digits)
165
+ # @return [Integer|String]
166
+ attr_reader :year
167
+
168
+ # Month (1..12)
169
+ # @return [Integer]
170
+ attr_reader :month
171
+
172
+ # Day (1-31)
173
+ # @return [Integer]
174
+ attr_reader :day
175
+
176
+ # Hour (0..23)
177
+ # @return [Integer]
178
+ attr_reader :hour
179
+
180
+ # Minute (0..59(
181
+ # @return [Integer]
182
+ attr_reader :minute
183
+
184
+ # Second (0..59)
185
+ # @return [Integer]
186
+ attr_reader :second
187
+
188
+ # The year value for the date group item
189
+ # This must be a four digit value
190
+ def year=(value)
191
+ RegexValidator.validate "DateGroupItem.year", /\d{4}/, value
192
+ @year = value
193
+ end
194
+
195
+ # The month value for the date group item
196
+ # This must be between 1 and 12
197
+ def month=(value)
198
+ RangeValidator.validate "DateGroupItem.month", 0, 12, value
199
+ @month = value
200
+ end
201
+
202
+ # The day value for the date group item
203
+ # This must be between 1 and 31
204
+ # @note no attempt is made to ensure the date value is valid for any given month
205
+ def day=(value)
206
+ RangeValidator.validate "DateGroupItem.day", 0, 31, value
207
+ @day = value
208
+ end
209
+
210
+ # The hour value for the date group item
211
+ # # this must be between 0 and 23
212
+ def hour=(value)
213
+ RangeValidator.validate "DateGroupItem.hour", 0, 23, value
214
+ @hour = value
215
+ end
216
+
217
+ # The minute value for the date group item
218
+ # This must be between 0 and 59
219
+ def minute=(value)
220
+ RangeValidator.validate "DateGroupItem.minute", 0, 59, value
221
+ @minute = value
222
+ end
223
+
224
+ # The second value for the date group item
225
+ # This must be between 0 and 59
226
+ def second=(value)
227
+ RangeValidator.validate "DateGroupItem.second", 0, 59, value
228
+ @second = value
229
+ end
230
+
231
+ # The date time grouping for this filter.
232
+ def date_time_grouping=(grouping)
233
+ RestrictionValidator.validate 'DateGroupItem.date_time_grouping', DATE_TIME_GROUPING, grouping.to_s
234
+ @date_time_grouping = grouping.to_s
235
+ end
236
+
237
+ # Serialize the object to xml
238
+ # @param [String] str The string object this serialization will be concatenated to.
239
+ def to_xml_string(str = '')
240
+ serialized_tag('dateGroupItem', str)
241
+ end
242
+ end
243
+ end
244
+ end