caxlsx 3.0.4 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +354 -334
  5. data/LICENSE +21 -21
  6. data/README.md +168 -170
  7. data/Rakefile +29 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +32 -32
  10. data/lib/axlsx/content_type/content_type.rb +26 -26
  11. data/lib/axlsx/content_type/default.rb +25 -25
  12. data/lib/axlsx/content_type/override.rb +25 -25
  13. data/lib/axlsx/doc_props/app.rb +235 -235
  14. data/lib/axlsx/doc_props/core.rb +39 -39
  15. data/lib/axlsx/drawing/area_chart.rb +99 -99
  16. data/lib/axlsx/drawing/area_series.rb +110 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +26 -26
  18. data/lib/axlsx/drawing/axes.rb +61 -61
  19. data/lib/axlsx/drawing/axis.rb +190 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +148 -151
  21. data/lib/axlsx/drawing/bar_chart.rb +138 -143
  22. data/lib/axlsx/drawing/bar_series.rb +97 -80
  23. data/lib/axlsx/drawing/bubble_chart.rb +59 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +63 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +85 -85
  26. data/lib/axlsx/drawing/chart.rb +276 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +90 -90
  28. data/lib/axlsx/drawing/drawing.rb +167 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +54 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +100 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +68 -68
  32. data/lib/axlsx/drawing/line_chart.rb +99 -99
  33. data/lib/axlsx/drawing/line_series.rb +110 -110
  34. data/lib/axlsx/drawing/marker.rb +84 -84
  35. data/lib/axlsx/drawing/num_data.rb +52 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +62 -62
  37. data/lib/axlsx/drawing/num_val.rb +34 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +99 -99
  39. data/lib/axlsx/drawing/pic.rb +211 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +42 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +47 -47
  42. data/lib/axlsx/drawing/pie_series.rb +74 -74
  43. data/lib/axlsx/drawing/scaling.rb +60 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +74 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +129 -98
  46. data/lib/axlsx/drawing/ser_axis.rb +45 -45
  47. data/lib/axlsx/drawing/series.rb +69 -69
  48. data/lib/axlsx/drawing/series_title.rb +25 -25
  49. data/lib/axlsx/drawing/str_data.rb +42 -42
  50. data/lib/axlsx/drawing/str_val.rb +34 -34
  51. data/lib/axlsx/drawing/title.rb +97 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +97 -97
  53. data/lib/axlsx/drawing/val_axis.rb +37 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +42 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +66 -66
  57. data/lib/axlsx/package.rb +388 -363
  58. data/lib/axlsx/rels/relationship.rb +130 -130
  59. data/lib/axlsx/rels/relationships.rb +32 -32
  60. data/lib/axlsx/stylesheet/border.rb +73 -71
  61. data/lib/axlsx/stylesheet/border_pr.rb +71 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +132 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +41 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +72 -72
  65. data/lib/axlsx/stylesheet/color.rb +76 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +79 -79
  67. data/lib/axlsx/stylesheet/fill.rb +35 -35
  68. data/lib/axlsx/stylesheet/font.rb +156 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +103 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +37 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +86 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +73 -73
  73. data/lib/axlsx/stylesheet/styles.rb +494 -420
  74. data/lib/axlsx/stylesheet/table_style.rb +54 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +77 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +46 -46
  77. data/lib/axlsx/stylesheet/xf.rb +147 -147
  78. data/lib/axlsx/util/accessors.rb +64 -64
  79. data/lib/axlsx/util/constants.rb +410 -401
  80. data/lib/axlsx/util/mime_type_utils.rb +11 -11
  81. data/lib/axlsx/util/options_parser.rb +16 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +89 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +179 -179
  84. data/lib/axlsx/util/storage.rb +146 -146
  85. data/lib/axlsx/util/validators.rb +312 -312
  86. data/lib/axlsx/util/zip_command.rb +73 -73
  87. data/lib/axlsx/version.rb +5 -5
  88. data/lib/axlsx/workbook/defined_name.rb +128 -128
  89. data/lib/axlsx/workbook/defined_names.rb +21 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +77 -77
  91. data/lib/axlsx/workbook/workbook.rb +395 -370
  92. data/lib/axlsx/workbook/workbook_view.rb +80 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +22 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +77 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +244 -244
  97. data/lib/axlsx/workbook/worksheet/break.rb +35 -35
  98. data/lib/axlsx/workbook/worksheet/cell.rb +506 -505
  99. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  100. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  101. data/lib/axlsx/workbook/worksheet/cfvos.rb +18 -18
  102. data/lib/axlsx/workbook/worksheet/col.rb +145 -145
  103. data/lib/axlsx/workbook/worksheet/col_breaks.rb +35 -35
  104. data/lib/axlsx/workbook/worksheet/color_scale.rb +110 -110
  105. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  106. data/lib/axlsx/workbook/worksheet/comment.rb +91 -91
  107. data/lib/axlsx/workbook/worksheet/comments.rb +82 -82
  108. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +82 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +220 -220
  110. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +25 -25
  111. data/lib/axlsx/workbook/worksheet/data_bar.rb +129 -129
  112. data/lib/axlsx/workbook/worksheet/data_validation.rb +246 -246
  113. data/lib/axlsx/workbook/worksheet/data_validations.rb +28 -28
  114. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +30 -30
  115. data/lib/axlsx/workbook/worksheet/dimension.rb +64 -64
  116. data/lib/axlsx/workbook/worksheet/header_footer.rb +52 -52
  117. data/lib/axlsx/workbook/worksheet/icon_set.rb +81 -81
  118. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  119. data/lib/axlsx/workbook/worksheet/outline_pr.rb +33 -33
  120. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  121. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +44 -44
  122. data/lib/axlsx/workbook/worksheet/page_setup.rb +240 -240
  123. data/lib/axlsx/workbook/worksheet/pane.rb +139 -139
  124. data/lib/axlsx/workbook/worksheet/pivot_table.rb +296 -289
  125. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +66 -66
  126. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +24 -24
  127. data/lib/axlsx/workbook/worksheet/print_options.rb +39 -39
  128. data/lib/axlsx/workbook/worksheet/protected_range.rb +47 -47
  129. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  130. data/lib/axlsx/workbook/worksheet/rich_text.rb +55 -55
  131. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +250 -250
  132. data/lib/axlsx/workbook/worksheet/row.rb +164 -162
  133. data/lib/axlsx/workbook/worksheet/row_breaks.rb +33 -33
  134. data/lib/axlsx/workbook/worksheet/selection.rb +101 -101
  135. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +29 -29
  136. data/lib/axlsx/workbook/worksheet/sheet_data.rb +27 -27
  137. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  138. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +118 -118
  139. data/lib/axlsx/workbook/worksheet/sheet_view.rb +213 -213
  140. data/lib/axlsx/workbook/worksheet/table.rb +102 -102
  141. data/lib/axlsx/workbook/worksheet/table_style_info.rb +49 -49
  142. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  143. data/lib/axlsx/workbook/worksheet/worksheet.rb +786 -764
  144. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  145. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +58 -58
  146. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +74 -74
  147. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  148. data/lib/axlsx.rb +185 -170
  149. data/lib/caxlsx.rb +2 -2
  150. data/lib/schema/dc.xsd +118 -118
  151. data/lib/schema/dcmitype.xsd +51 -51
  152. data/lib/schema/dcterms.xsd +331 -331
  153. data/lib/schema/dml-chartDrawing.xsd +146 -146
  154. data/lib/schema/dml-compatibility.xsd +14 -14
  155. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  156. data/lib/schema/dml-main.xsd +3048 -3048
  157. data/lib/schema/dml-picture.xsd +23 -23
  158. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  159. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  160. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  161. data/lib/schema/shared-bibliography.xsd +144 -144
  162. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  163. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  164. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  165. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  166. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  167. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  168. data/lib/schema/shared-relationshipReference.xsd +25 -25
  169. data/lib/schema/vml-main.xsd +569 -569
  170. data/lib/schema/vml-officeDrawing.xsd +509 -509
  171. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  172. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  173. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  174. data/lib/schema/xml.xsd +116 -116
  175. data/test/benchmark.rb +72 -72
  176. data/test/content_type/tc_content_type.rb +76 -76
  177. data/test/content_type/tc_default.rb +16 -16
  178. data/test/content_type/tc_override.rb +14 -14
  179. data/test/doc_props/tc_app.rb +43 -43
  180. data/test/doc_props/tc_core.rb +42 -42
  181. data/test/drawing/tc_area_chart.rb +39 -39
  182. data/test/drawing/tc_area_series.rb +71 -71
  183. data/test/drawing/tc_axes.rb +7 -7
  184. data/test/drawing/tc_axis.rb +112 -112
  185. data/test/drawing/tc_bar_3D_chart.rb +86 -71
  186. data/test/drawing/tc_bar_chart.rb +86 -71
  187. data/test/drawing/tc_bar_series.rb +46 -37
  188. data/test/drawing/tc_bubble_chart.rb +44 -44
  189. data/test/drawing/tc_bubble_series.rb +21 -21
  190. data/test/drawing/tc_cat_axis.rb +31 -31
  191. data/test/drawing/tc_cat_axis_data.rb +27 -27
  192. data/test/drawing/tc_chart.rb +123 -123
  193. data/test/drawing/tc_d_lbls.rb +57 -57
  194. data/test/drawing/tc_data_source.rb +23 -23
  195. data/test/drawing/tc_drawing.rb +80 -80
  196. data/test/drawing/tc_graphic_frame.rb +27 -27
  197. data/test/drawing/tc_hyperlink.rb +64 -64
  198. data/test/drawing/tc_line_3d_chart.rb +47 -47
  199. data/test/drawing/tc_line_chart.rb +39 -39
  200. data/test/drawing/tc_line_series.rb +71 -71
  201. data/test/drawing/tc_marker.rb +44 -44
  202. data/test/drawing/tc_named_axis_data.rb +27 -27
  203. data/test/drawing/tc_num_data.rb +31 -31
  204. data/test/drawing/tc_num_val.rb +29 -29
  205. data/test/drawing/tc_one_cell_anchor.rb +66 -66
  206. data/test/drawing/tc_pic.rb +103 -103
  207. data/test/drawing/tc_picture_locking.rb +72 -72
  208. data/test/drawing/tc_pie_3D_chart.rb +28 -28
  209. data/test/drawing/tc_pie_series.rb +33 -33
  210. data/test/drawing/tc_scaling.rb +36 -36
  211. data/test/drawing/tc_scatter_chart.rb +48 -48
  212. data/test/drawing/tc_scatter_series.rb +74 -56
  213. data/test/drawing/tc_ser_axis.rb +31 -31
  214. data/test/drawing/tc_series.rb +23 -23
  215. data/test/drawing/tc_series_title.rb +54 -54
  216. data/test/drawing/tc_str_data.rb +18 -18
  217. data/test/drawing/tc_str_val.rb +30 -30
  218. data/test/drawing/tc_title.rb +70 -70
  219. data/test/drawing/tc_two_cell_anchor.rb +36 -36
  220. data/test/drawing/tc_val_axis.rb +24 -24
  221. data/test/drawing/tc_view_3D.rb +54 -54
  222. data/test/drawing/tc_vml_drawing.rb +25 -25
  223. data/test/drawing/tc_vml_shape.rb +106 -106
  224. data/test/profile.rb +24 -24
  225. data/test/rels/tc_relationship.rb +52 -52
  226. data/test/rels/tc_relationships.rb +37 -37
  227. data/test/stylesheet/tc_border.rb +37 -37
  228. data/test/stylesheet/tc_border_pr.rb +32 -32
  229. data/test/stylesheet/tc_cell_alignment.rb +81 -81
  230. data/test/stylesheet/tc_cell_protection.rb +29 -29
  231. data/test/stylesheet/tc_cell_style.rb +57 -57
  232. data/test/stylesheet/tc_color.rb +43 -43
  233. data/test/stylesheet/tc_dxf.rb +81 -81
  234. data/test/stylesheet/tc_fill.rb +18 -18
  235. data/test/stylesheet/tc_font.rb +133 -133
  236. data/test/stylesheet/tc_gradient_fill.rb +72 -72
  237. data/test/stylesheet/tc_gradient_stop.rb +31 -31
  238. data/test/stylesheet/tc_num_fmt.rb +30 -30
  239. data/test/stylesheet/tc_pattern_fill.rb +43 -43
  240. data/test/stylesheet/tc_styles.rb +309 -261
  241. data/test/stylesheet/tc_table_style.rb +44 -44
  242. data/test/stylesheet/tc_table_style_element.rb +45 -45
  243. data/test/stylesheet/tc_table_styles.rb +29 -29
  244. data/test/stylesheet/tc_xf.rb +120 -120
  245. data/test/tc_axlsx.rb +109 -109
  246. data/test/tc_helper.rb +10 -12
  247. data/test/tc_package.rb +317 -264
  248. data/test/util/tc_mime_type_utils.rb +13 -13
  249. data/test/util/tc_serialized_attributes.rb +19 -19
  250. data/test/util/tc_simple_typed_list.rb +77 -77
  251. data/test/util/tc_validators.rb +210 -210
  252. data/test/workbook/tc_defined_name.rb +49 -49
  253. data/test/workbook/tc_shared_strings_table.rb +59 -59
  254. data/test/workbook/tc_workbook.rb +165 -160
  255. data/test/workbook/tc_workbook_view.rb +50 -50
  256. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +38 -38
  257. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +76 -76
  258. data/test/workbook/worksheet/auto_filter/tc_filters.rb +50 -50
  259. data/test/workbook/worksheet/tc_break.rb +49 -49
  260. data/test/workbook/worksheet/tc_cell.rb +465 -453
  261. data/test/workbook/worksheet/tc_cfvo.rb +31 -31
  262. data/test/workbook/worksheet/tc_col.rb +93 -93
  263. data/test/workbook/worksheet/tc_color_scale.rb +58 -58
  264. data/test/workbook/worksheet/tc_comment.rb +72 -72
  265. data/test/workbook/worksheet/tc_comments.rb +57 -57
  266. data/test/workbook/worksheet/tc_conditional_formatting.rb +224 -224
  267. data/test/workbook/worksheet/tc_data_bar.rb +46 -46
  268. data/test/workbook/worksheet/tc_data_validation.rb +265 -265
  269. data/test/workbook/worksheet/tc_date_time_converter.rb +124 -124
  270. data/test/workbook/worksheet/tc_header_footer.rb +151 -151
  271. data/test/workbook/worksheet/tc_icon_set.rb +45 -45
  272. data/test/workbook/worksheet/tc_outline_pr.rb +19 -19
  273. data/test/workbook/worksheet/tc_page_margins.rb +97 -97
  274. data/test/workbook/worksheet/tc_page_set_up_pr.rb +15 -15
  275. data/test/workbook/worksheet/tc_page_setup.rb +143 -143
  276. data/test/workbook/worksheet/tc_pane.rb +54 -54
  277. data/test/workbook/worksheet/tc_pivot_table.rb +180 -135
  278. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +62 -54
  279. data/test/workbook/worksheet/tc_print_options.rb +72 -72
  280. data/test/workbook/worksheet/tc_protected_range.rb +17 -17
  281. data/test/workbook/worksheet/tc_rich_text.rb +44 -44
  282. data/test/workbook/worksheet/tc_rich_text_run.rb +173 -173
  283. data/test/workbook/worksheet/tc_row.rb +160 -139
  284. data/test/workbook/worksheet/tc_selection.rb +55 -55
  285. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +18 -18
  286. data/test/workbook/worksheet/tc_sheet_format_pr.rb +88 -88
  287. data/test/workbook/worksheet/tc_sheet_pr.rb +49 -49
  288. data/test/workbook/worksheet/tc_sheet_protection.rb +117 -117
  289. data/test/workbook/worksheet/tc_sheet_view.rb +214 -214
  290. data/test/workbook/worksheet/tc_table.rb +77 -67
  291. data/test/workbook/worksheet/tc_table_style_info.rb +53 -53
  292. data/test/workbook/worksheet/tc_worksheet.rb +632 -601
  293. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +55 -55
  294. metadata +11 -11
@@ -1,135 +1,180 @@
1
- require 'tc_helper.rb'
2
-
3
-
4
- def shared_test_pivot_table_xml_validity(pivot_table)
5
- schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
6
- doc = Nokogiri::XML(pivot_table.to_xml_string)
7
- errors = []
8
- schema.validate(doc).each do |error|
9
- errors.push error
10
- puts error.message
11
- end
12
- assert(errors.empty?, "error free validation")
13
- end
14
-
15
- class TestPivotTable < Test::Unit::TestCase
16
- def setup
17
- p = Axlsx::Package.new
18
- @ws = p.workbook.add_worksheet
19
-
20
- @ws << ["Year","Month","Region", "Type", "Sales"]
21
- @ws << [2012, "Nov", "East", "Soda", "12345"]
22
- end
23
-
24
- def test_initialization
25
- assert(@ws.workbook.pivot_tables.empty?)
26
- assert(@ws.pivot_tables.empty?)
27
- end
28
-
29
- def test_add_pivot_table
30
- pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5')
31
- assert_equal('G5:G6', pivot_table.ref, 'ref assigned from first parameter')
32
- assert_equal('A1:D5', pivot_table.range, 'range assigned from second parameter')
33
- assert_equal('PivotTable1', pivot_table.name, 'name automatically generated')
34
- assert(pivot_table.is_a?(Axlsx::PivotTable), "must create a pivot table")
35
- assert_equal(@ws.workbook.pivot_tables.last, pivot_table, "must be added to workbook pivot tables collection")
36
- assert_equal(@ws.pivot_tables.last, pivot_table, "must be added to worksheet pivot tables collection")
37
- end
38
-
39
- def test_set_pivot_table_data_sheet
40
- pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5')
41
- data_sheet = @ws.clone
42
- data_sheet.name = "Pivot Table Data Source"
43
-
44
- assert_equal(pivot_table.data_sheet.name, @ws.name, "must default to the same sheet the pivot table is added to")
45
- pivot_table.data_sheet = data_sheet
46
- assert_equal(pivot_table.data_sheet.name, data_sheet.name, "data sheet assigned to pivot table")
47
- end
48
-
49
- def test_add_pivot_table_with_config
50
- pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5') do |pt|
51
- pt.rows = ['Year', 'Month']
52
- pt.columns = ['Type']
53
- pt.data = ['Sales']
54
- pt.pages = ['Region']
55
- end
56
- assert_equal(['Year', 'Month'], pivot_table.rows)
57
- assert_equal(['Type'], pivot_table.columns)
58
- assert_equal([{:ref=>"Sales"}], pivot_table.data)
59
- assert_equal(['Region'], pivot_table.pages)
60
- shared_test_pivot_table_xml_validity(pivot_table)
61
- end
62
-
63
- def test_add_pivot_table_with_options_on_data_field
64
- pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5') do |pt|
65
- pt.data = [{:ref=>"Sales", :subtotal => 'average'}]
66
- end
67
- assert_equal([{:ref=>"Sales", :subtotal => 'average'}], pivot_table.data)
68
- end
69
-
70
- def test_add_pivot_table_with_style_info
71
- style_info_data = { :name=>"PivotStyleMedium9", :showRowHeaders=>"1", :showLastColumn=>"0"}
72
- pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5', {:style_info=>style_info_data}) do |pt|
73
- pt.rows = ['Year', 'Month']
74
- pt.columns = ['Type']
75
- pt.data = ['Sales']
76
- pt.pages = ['Region']
77
- end
78
- assert_equal(style_info_data, pivot_table.style_info)
79
- shared_test_pivot_table_xml_validity(pivot_table)
80
- end
81
-
82
- def test_add_pivot_table_with_row_without_subtotals
83
- pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5', {:no_subtotals_on_headers=>['Year']}) do |pt|
84
- pt.data = ['Sales']
85
- pt.rows = ['Year','Month']
86
- end
87
- assert_equal(['Year'], pivot_table.no_subtotals_on_headers)
88
- end
89
-
90
- def test_header_indices
91
- pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5')
92
- assert_equal(0, pivot_table.header_index_of('Year' ))
93
- assert_equal(1, pivot_table.header_index_of('Month' ))
94
- assert_equal(2, pivot_table.header_index_of('Region' ))
95
- assert_equal(3, pivot_table.header_index_of('Type' ))
96
- assert_equal(4, pivot_table.header_index_of('Sales' ))
97
- assert_equal(nil, pivot_table.header_index_of('Missing'))
98
- assert_equal(%w(A1 B1 C1 D1 E1), pivot_table.header_cell_refs)
99
- end
100
-
101
- def test_pn
102
- @ws.add_pivot_table('G5:G6', 'A1:D5')
103
- assert_equal(@ws.pivot_tables.first.pn, "pivotTables/pivotTable1.xml")
104
- end
105
-
106
- def test_index
107
- @ws.add_pivot_table('G5:G6', 'A1:D5')
108
- assert_equal(@ws.pivot_tables.first.index, @ws.workbook.pivot_tables.index(@ws.pivot_tables.first))
109
- end
110
-
111
- def test_relationships
112
- assert(@ws.relationships.empty?)
113
- @ws.add_pivot_table('G5:G6', 'A1:D5')
114
- assert_equal(@ws.relationships.size, 1, "adding a pivot table adds a relationship")
115
- @ws.add_pivot_table('G10:G11', 'A1:D5')
116
- assert_equal(@ws.relationships.size, 2, "adding a pivot table adds a relationship")
117
- end
118
-
119
- def test_to_xml_string
120
- pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5', {:no_subtotals_on_headers=>['Year']}) do |pt|
121
- pt.rows = ['Year', 'Month']
122
- pt.columns = ['Type']
123
- pt.data = ['Sales']
124
- pt.pages = ['Region']
125
- end
126
- shared_test_pivot_table_xml_validity(pivot_table)
127
- end
128
-
129
- def test_to_xml_string_with_options_on_data_field
130
- pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5') do |pt|
131
- pt.data = [{:ref=>"Sales", :subtotal => 'average'}]
132
- end
133
- shared_test_pivot_table_xml_validity(pivot_table)
134
- end
135
- end
1
+ require 'tc_helper.rb'
2
+
3
+
4
+ def shared_test_pivot_table_xml_validity(pivot_table)
5
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
6
+ doc = Nokogiri::XML(pivot_table.to_xml_string)
7
+ errors = []
8
+ schema.validate(doc).each do |error|
9
+ errors.push error
10
+ puts error.message
11
+ end
12
+ assert(errors.empty?, "error free validation")
13
+ end
14
+
15
+ class TestPivotTable < Test::Unit::TestCase
16
+ def setup
17
+ p = Axlsx::Package.new
18
+ @ws = p.workbook.add_worksheet
19
+
20
+ @ws << ["Year","Month","Region", "Type", "Sales"]
21
+ @ws << [2012, "Nov", "East", "Soda", "12345"]
22
+ end
23
+
24
+ def test_initialization
25
+ assert(@ws.workbook.pivot_tables.empty?)
26
+ assert(@ws.pivot_tables.empty?)
27
+ end
28
+
29
+ def test_add_pivot_table
30
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5')
31
+ assert_equal('G5:G6', pivot_table.ref, 'ref assigned from first parameter')
32
+ assert_equal('A1:D5', pivot_table.range, 'range assigned from second parameter')
33
+ assert_equal('PivotTable1', pivot_table.name, 'name automatically generated')
34
+ assert(pivot_table.is_a?(Axlsx::PivotTable), "must create a pivot table")
35
+ assert_equal(@ws.workbook.pivot_tables.last, pivot_table, "must be added to workbook pivot tables collection")
36
+ assert_equal(@ws.pivot_tables.last, pivot_table, "must be added to worksheet pivot tables collection")
37
+ end
38
+
39
+ def test_set_pivot_table_data_sheet
40
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5')
41
+ data_sheet = @ws.clone
42
+ data_sheet.name = "Pivot Table Data Source"
43
+
44
+ assert_equal(pivot_table.data_sheet.name, @ws.name, "must default to the same sheet the pivot table is added to")
45
+ pivot_table.data_sheet = data_sheet
46
+ assert_equal(pivot_table.data_sheet.name, data_sheet.name, "data sheet assigned to pivot table")
47
+ end
48
+
49
+ def test_add_pivot_table_with_config
50
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5') do |pt|
51
+ pt.rows = ['Year', 'Month']
52
+ pt.columns = ['Type']
53
+ pt.data = ['Sales']
54
+ pt.pages = ['Region']
55
+ end
56
+ assert_equal(['Year', 'Month'], pivot_table.rows)
57
+ assert_equal(['Type'], pivot_table.columns)
58
+ assert_equal([{:ref=>"Sales"}], pivot_table.data)
59
+ assert_equal(['Region'], pivot_table.pages)
60
+ shared_test_pivot_table_xml_validity(pivot_table)
61
+ end
62
+
63
+ def test_add_pivot_table_with_options_on_data_field
64
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5') do |pt|
65
+ pt.data = [{:ref=>"Sales", :subtotal => 'average'}]
66
+ end
67
+ assert_equal([{:ref=>"Sales", :subtotal => 'average'}], pivot_table.data)
68
+ end
69
+
70
+ def test_add_pivot_table_with_style_info
71
+ style_info_data = { :name=>"PivotStyleMedium9", :showRowHeaders=>"1", :showLastColumn=>"0"}
72
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5', {:style_info=>style_info_data}) do |pt|
73
+ pt.rows = ['Year', 'Month']
74
+ pt.columns = ['Type']
75
+ pt.data = ['Sales']
76
+ pt.pages = ['Region']
77
+ end
78
+ assert_equal(style_info_data, pivot_table.style_info)
79
+ shared_test_pivot_table_xml_validity(pivot_table)
80
+ end
81
+
82
+ def test_add_pivot_table_with_row_without_subtotals
83
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5', {:no_subtotals_on_headers=>['Year']}) do |pt|
84
+ pt.data = ['Sales']
85
+ pt.rows = ['Year','Month']
86
+ end
87
+ assert_equal(['Year'], pivot_table.no_subtotals_on_headers)
88
+ end
89
+
90
+ def test_header_indices
91
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5')
92
+ assert_equal(0, pivot_table.header_index_of('Year' ))
93
+ assert_equal(1, pivot_table.header_index_of('Month' ))
94
+ assert_equal(2, pivot_table.header_index_of('Region' ))
95
+ assert_equal(3, pivot_table.header_index_of('Type' ))
96
+ assert_equal(4, pivot_table.header_index_of('Sales' ))
97
+ assert_equal(nil, pivot_table.header_index_of('Missing'))
98
+ assert_equal(%w(A1 B1 C1 D1 E1), pivot_table.header_cell_refs)
99
+ end
100
+
101
+ def test_pn
102
+ @ws.add_pivot_table('G5:G6', 'A1:D5')
103
+ assert_equal(@ws.pivot_tables.first.pn, "pivotTables/pivotTable1.xml")
104
+ end
105
+
106
+ def test_index
107
+ @ws.add_pivot_table('G5:G6', 'A1:D5')
108
+ assert_equal(@ws.pivot_tables.first.index, @ws.workbook.pivot_tables.index(@ws.pivot_tables.first))
109
+ end
110
+
111
+ def test_relationships
112
+ assert(@ws.relationships.empty?)
113
+ @ws.add_pivot_table('G5:G6', 'A1:D5')
114
+ assert_equal(@ws.relationships.size, 1, "adding a pivot table adds a relationship")
115
+ @ws.add_pivot_table('G10:G11', 'A1:D5')
116
+ assert_equal(@ws.relationships.size, 2, "adding a pivot table adds a relationship")
117
+ end
118
+
119
+ def test_to_xml_string
120
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5', {:no_subtotals_on_headers=>['Year']}) do |pt|
121
+ pt.rows = ['Year', 'Month']
122
+ pt.columns = ['Type']
123
+ pt.data = ['Sales']
124
+ pt.pages = ['Region']
125
+ end
126
+ shared_test_pivot_table_xml_validity(pivot_table)
127
+ end
128
+
129
+ def test_to_xml_string_with_options_on_data_field
130
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5') do |pt|
131
+ pt.data = [{:ref=>"Sales", :subtotal => 'average'}]
132
+ end
133
+ shared_test_pivot_table_xml_validity(pivot_table)
134
+ end
135
+
136
+ def test_add_pivot_table_with_format_options_on_data_field
137
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5') do |pt|
138
+ pt.data = [{:ref=>"Sales", :subtotal => 'sum', num_fmt: 4}]
139
+ end
140
+ doc = Nokogiri::XML(pivot_table.to_xml_string)
141
+ assert_equal('4', doc.at_css('dataFields dataField')['numFmtId'], 'adding format options to pivot_table')
142
+ end
143
+
144
+ def test_pivot_table_with_more_than_one_data_row
145
+ ### https://github.com/caxlsx/caxlsx/issues/110
146
+
147
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5') do |pt|
148
+ pt.rows = ["Date", "Name"]
149
+ pt.data = [
150
+ {ref: "Gross amount", num_fmt: 2},
151
+ {ref: "Net amount", num_fmt: 2},
152
+ ]
153
+ end
154
+
155
+ xml = pivot_table.to_xml_string
156
+
157
+ assert(xml.include?('colFields'))
158
+
159
+ assert(!xml.include?('dataOnRows'))
160
+ assert(!xml.include?('colItems'))
161
+ end
162
+
163
+ def test_pivot_table_with_only_one_data_row
164
+ ### https://github.com/caxlsx/caxlsx/issues/110
165
+
166
+ pivot_table = @ws.add_pivot_table('G5:G6', 'A1:E5') do |pt|
167
+ pt.rows = ["Date", "Name"]
168
+ pt.data = [
169
+ {ref: "Gross amount", num_fmt: 2},
170
+ ]
171
+ end
172
+
173
+ xml = pivot_table.to_xml_string
174
+
175
+ assert(xml.include?('dataOnRows'))
176
+ assert(xml.include?('colItems'))
177
+
178
+ assert(!xml.include?('colFields'))
179
+ end
180
+ end
@@ -1,54 +1,62 @@
1
- require 'tc_helper.rb'
2
-
3
- class TestPivotTableCacheDefinition < Test::Unit::TestCase
4
- def setup
5
- p = Axlsx::Package.new
6
- @ws = p.workbook.add_worksheet
7
- 5.times do
8
- @ws << ["aa","aa","aa","aa"]
9
- end
10
- @pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5')
11
- @cache_definition = @pivot_table.cache_definition
12
- end
13
-
14
- def test_initialization
15
- assert(@cache_definition.is_a?(Axlsx::PivotTableCacheDefinition), "must create a pivot table cache definition")
16
- assert_equal(@pivot_table, @cache_definition.pivot_table, 'refers back to its pivot table')
17
- end
18
-
19
- def test_pn
20
- assert_equal('pivotCache/pivotCacheDefinition1.xml', @cache_definition.pn)
21
- end
22
-
23
- def test_rId
24
- assert_equal @pivot_table.relationships.for(@cache_definition).Id, @cache_definition.rId
25
- end
26
-
27
- def test_index
28
- assert_equal(0, @cache_definition.index)
29
- end
30
-
31
- def test_cache_id
32
- assert_equal(1, @cache_definition.cache_id)
33
- end
34
-
35
- def test_data_sheet
36
- data_sheet = @ws.clone
37
- data_sheet.name = "Pivot Table Data Source"
38
- @pivot_table.data_sheet = data_sheet
39
-
40
- assert(@cache_definition.to_xml_string.include?(data_sheet.name), "must set the data source correctly")
41
- end
42
-
43
- def test_to_xml_string
44
- schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
45
- doc = Nokogiri::XML(@cache_definition.to_xml_string)
46
- errors = []
47
- schema.validate(doc).each do |error|
48
- errors.push error
49
- puts error.message
50
- end
51
- assert(errors.empty?, "error free validation")
52
- end
53
-
54
- end
1
+ require 'tc_helper.rb'
2
+
3
+ class TestPivotTableCacheDefinition < Test::Unit::TestCase
4
+ def setup
5
+ p = Axlsx::Package.new
6
+ @ws = p.workbook.add_worksheet
7
+ 5.times do
8
+ @ws << ["aa","aa","aa","aa"]
9
+ end
10
+ @pivot_table = @ws.add_pivot_table('G5:G6', 'A1:D5')
11
+ @cache_definition = @pivot_table.cache_definition
12
+ end
13
+
14
+ def test_initialization
15
+ assert(@cache_definition.is_a?(Axlsx::PivotTableCacheDefinition), "must create a pivot table cache definition")
16
+ assert_equal(@pivot_table, @cache_definition.pivot_table, 'refers back to its pivot table')
17
+ end
18
+
19
+ def test_pn
20
+ assert_equal('pivotCache/pivotCacheDefinition1.xml', @cache_definition.pn)
21
+ end
22
+
23
+ def test_rId
24
+ assert_equal @pivot_table.relationships.for(@cache_definition).Id, @cache_definition.rId
25
+ end
26
+
27
+ def test_index
28
+ assert_equal(0, @cache_definition.index)
29
+ end
30
+
31
+ def test_cache_id
32
+ assert_equal(1, @cache_definition.cache_id)
33
+ end
34
+
35
+ def test_data_sheet
36
+ data_sheet = @ws.clone
37
+ data_sheet.name = "Pivot Table Data Source"
38
+ @pivot_table.data_sheet = data_sheet
39
+
40
+ assert(@cache_definition.to_xml_string.include?(data_sheet.name), "must set the data source correctly")
41
+ end
42
+
43
+ def test_to_xml_string
44
+ schema = Nokogiri::XML::Schema(File.open(Axlsx::SML_XSD))
45
+ doc = Nokogiri::XML(@cache_definition.to_xml_string)
46
+ errors = []
47
+ schema.validate(doc).each do |error|
48
+ errors.push error
49
+ puts error.message
50
+ end
51
+ assert(errors.empty?, "error free validation")
52
+ end
53
+
54
+ def test_to_xml_string_for_special_characters
55
+ cell = @ws.rows.first.cells.first
56
+ cell.value = "&><'\""
57
+
58
+ doc = Nokogiri::XML(@cache_definition.to_xml_string)
59
+ errors = doc.errors
60
+ assert(errors.empty?, "invalid xml: #{errors.map(&:to_s).join(', ')}")
61
+ end
62
+ end
@@ -1,72 +1,72 @@
1
- require 'tc_helper.rb'
2
-
3
- class TestPrintOptions < Test::Unit::TestCase
4
-
5
- def setup
6
- p = Axlsx::Package.new
7
- ws = p.workbook.add_worksheet :name => "hmmm"
8
- @po = ws.print_options
9
- end
10
-
11
- def test_initialize
12
- assert_equal(false, @po.grid_lines)
13
- assert_equal(false, @po.headings)
14
- assert_equal(false, @po.horizontal_centered)
15
- assert_equal(false, @po.vertical_centered)
16
- end
17
-
18
- def test_initialize_with_options
19
- optioned = Axlsx::PrintOptions.new(:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true)
20
- assert_equal(true, optioned.grid_lines)
21
- assert_equal(true, optioned.headings)
22
- assert_equal(true, optioned.horizontal_centered)
23
- assert_equal(true, optioned.vertical_centered)
24
- end
25
-
26
- def test_set_all_values
27
- @po.set(:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true)
28
- assert_equal(true, @po.grid_lines)
29
- assert_equal(true, @po.headings)
30
- assert_equal(true, @po.horizontal_centered)
31
- assert_equal(true, @po.vertical_centered)
32
- end
33
-
34
- def test_set_some_values
35
- @po.set(:grid_lines => true, :headings => true)
36
- assert_equal(true, @po.grid_lines)
37
- assert_equal(true, @po.headings)
38
- assert_equal(false, @po.horizontal_centered)
39
- assert_equal(false, @po.vertical_centered)
40
- end
41
-
42
- def test_to_xml
43
- @po.set(:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true)
44
- doc = Nokogiri::XML.parse(@po.to_xml_string)
45
- assert_equal(1, doc.xpath(".//printOptions[@gridLines=1][@headings=1][@horizontalCentered=1][@verticalCentered=1]").size)
46
- end
47
-
48
- def test_grid_lines
49
- assert_raise(ArgumentError) { @po.grid_lines = 99 }
50
- assert_nothing_raised { @po.grid_lines = true }
51
- assert_equal(@po.grid_lines, true)
52
- end
53
-
54
- def test_headings
55
- assert_raise(ArgumentError) { @po.headings = 99 }
56
- assert_nothing_raised { @po.headings = true }
57
- assert_equal(@po.headings, true)
58
- end
59
-
60
- def test_horizontal_centered
61
- assert_raise(ArgumentError) { @po.horizontal_centered = 99 }
62
- assert_nothing_raised { @po.horizontal_centered = true }
63
- assert_equal(@po.horizontal_centered, true)
64
- end
65
-
66
- def test_vertical_centered
67
- assert_raise(ArgumentError) { @po.vertical_centered = 99 }
68
- assert_nothing_raised { @po.vertical_centered = true }
69
- assert_equal(@po.vertical_centered, true)
70
- end
71
-
72
- end
1
+ require 'tc_helper.rb'
2
+
3
+ class TestPrintOptions < Test::Unit::TestCase
4
+
5
+ def setup
6
+ p = Axlsx::Package.new
7
+ ws = p.workbook.add_worksheet :name => "hmmm"
8
+ @po = ws.print_options
9
+ end
10
+
11
+ def test_initialize
12
+ assert_equal(false, @po.grid_lines)
13
+ assert_equal(false, @po.headings)
14
+ assert_equal(false, @po.horizontal_centered)
15
+ assert_equal(false, @po.vertical_centered)
16
+ end
17
+
18
+ def test_initialize_with_options
19
+ optioned = Axlsx::PrintOptions.new(:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true)
20
+ assert_equal(true, optioned.grid_lines)
21
+ assert_equal(true, optioned.headings)
22
+ assert_equal(true, optioned.horizontal_centered)
23
+ assert_equal(true, optioned.vertical_centered)
24
+ end
25
+
26
+ def test_set_all_values
27
+ @po.set(:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true)
28
+ assert_equal(true, @po.grid_lines)
29
+ assert_equal(true, @po.headings)
30
+ assert_equal(true, @po.horizontal_centered)
31
+ assert_equal(true, @po.vertical_centered)
32
+ end
33
+
34
+ def test_set_some_values
35
+ @po.set(:grid_lines => true, :headings => true)
36
+ assert_equal(true, @po.grid_lines)
37
+ assert_equal(true, @po.headings)
38
+ assert_equal(false, @po.horizontal_centered)
39
+ assert_equal(false, @po.vertical_centered)
40
+ end
41
+
42
+ def test_to_xml
43
+ @po.set(:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true)
44
+ doc = Nokogiri::XML.parse(@po.to_xml_string)
45
+ assert_equal(1, doc.xpath(".//printOptions[@gridLines=1][@headings=1][@horizontalCentered=1][@verticalCentered=1]").size)
46
+ end
47
+
48
+ def test_grid_lines
49
+ assert_raise(ArgumentError) { @po.grid_lines = 99 }
50
+ assert_nothing_raised { @po.grid_lines = true }
51
+ assert_equal(@po.grid_lines, true)
52
+ end
53
+
54
+ def test_headings
55
+ assert_raise(ArgumentError) { @po.headings = 99 }
56
+ assert_nothing_raised { @po.headings = true }
57
+ assert_equal(@po.headings, true)
58
+ end
59
+
60
+ def test_horizontal_centered
61
+ assert_raise(ArgumentError) { @po.horizontal_centered = 99 }
62
+ assert_nothing_raised { @po.horizontal_centered = true }
63
+ assert_equal(@po.horizontal_centered, true)
64
+ end
65
+
66
+ def test_vertical_centered
67
+ assert_raise(ArgumentError) { @po.vertical_centered = 99 }
68
+ assert_nothing_raised { @po.vertical_centered = true }
69
+ assert_equal(@po.vertical_centered, true)
70
+ end
71
+
72
+ end
@@ -1,17 +1,17 @@
1
- # encoding: UTF-8
2
- require 'tc_helper.rb'
3
- class TestProtectedRange < Test::Unit::TestCase
4
- def setup
5
- @p = Axlsx::Package.new
6
- @ws = @p.workbook.add_worksheet { |sheet| sheet.add_row [1,2,3,4,5,6,7,8,9] }
7
- end
8
-
9
- def test_initialize_options
10
- assert_nothing_raised {Axlsx::ProtectedRange.new(:sqref => 'A1:B1', :name => "only bob")}
11
- end
12
-
13
- def test_range
14
- r = @ws.protect_range('A1:B1')
15
- assert_equal('A1:B1', r.sqref)
16
- end
17
- end
1
+ # encoding: UTF-8
2
+ require 'tc_helper.rb'
3
+ class TestProtectedRange < Test::Unit::TestCase
4
+ def setup
5
+ @p = Axlsx::Package.new
6
+ @ws = @p.workbook.add_worksheet { |sheet| sheet.add_row [1,2,3,4,5,6,7,8,9] }
7
+ end
8
+
9
+ def test_initialize_options
10
+ assert_nothing_raised {Axlsx::ProtectedRange.new(:sqref => 'A1:B1', :name => "only bob")}
11
+ end
12
+
13
+ def test_range
14
+ r = @ws.protect_range('A1:B1')
15
+ assert_equal('A1:B1', r.sqref)
16
+ end
17
+ end