caxlsx 3.2.0 → 3.4.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 (301) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +9 -9
  3. data/.yardopts_guide +18 -18
  4. data/CHANGELOG.md +394 -354
  5. data/LICENSE +21 -21
  6. data/README.md +184 -168
  7. data/Rakefile +28 -29
  8. data/examples/generate.rb +15 -15
  9. data/lib/axlsx/content_type/abstract_content_type.rb +29 -32
  10. data/lib/axlsx/content_type/content_type.rb +22 -26
  11. data/lib/axlsx/content_type/default.rb +21 -25
  12. data/lib/axlsx/content_type/override.rb +21 -25
  13. data/lib/axlsx/doc_props/app.rb +230 -235
  14. data/lib/axlsx/doc_props/core.rb +34 -39
  15. data/lib/axlsx/drawing/area_chart.rb +96 -99
  16. data/lib/axlsx/drawing/area_series.rb +107 -110
  17. data/lib/axlsx/drawing/ax_data_source.rb +21 -26
  18. data/lib/axlsx/drawing/axes.rb +60 -61
  19. data/lib/axlsx/drawing/axis.rb +185 -190
  20. data/lib/axlsx/drawing/bar_3D_chart.rb +145 -148
  21. data/lib/axlsx/drawing/bar_chart.rb +135 -138
  22. data/lib/axlsx/drawing/bar_series.rb +91 -97
  23. data/lib/axlsx/drawing/bubble_chart.rb +56 -59
  24. data/lib/axlsx/drawing/bubble_series.rb +60 -63
  25. data/lib/axlsx/drawing/cat_axis.rb +80 -85
  26. data/lib/axlsx/drawing/chart.rb +294 -276
  27. data/lib/axlsx/drawing/d_lbls.rb +92 -90
  28. data/lib/axlsx/drawing/drawing.rb +163 -167
  29. data/lib/axlsx/drawing/graphic_frame.rb +51 -54
  30. data/lib/axlsx/drawing/hyperlink.rb +97 -100
  31. data/lib/axlsx/drawing/line_3D_chart.rb +64 -68
  32. data/lib/axlsx/drawing/line_chart.rb +96 -99
  33. data/lib/axlsx/drawing/line_series.rb +107 -110
  34. data/lib/axlsx/drawing/marker.rb +80 -84
  35. data/lib/axlsx/drawing/num_data.rb +47 -52
  36. data/lib/axlsx/drawing/num_data_source.rb +58 -62
  37. data/lib/axlsx/drawing/num_val.rb +31 -34
  38. data/lib/axlsx/drawing/one_cell_anchor.rb +97 -99
  39. data/lib/axlsx/drawing/pic.rb +244 -211
  40. data/lib/axlsx/drawing/picture_locking.rb +39 -42
  41. data/lib/axlsx/drawing/pie_3D_chart.rb +42 -47
  42. data/lib/axlsx/drawing/pie_series.rb +69 -74
  43. data/lib/axlsx/drawing/scaling.rb +57 -60
  44. data/lib/axlsx/drawing/scatter_chart.rb +71 -74
  45. data/lib/axlsx/drawing/scatter_series.rb +126 -129
  46. data/lib/axlsx/drawing/ser_axis.rb +41 -45
  47. data/lib/axlsx/drawing/series.rb +67 -69
  48. data/lib/axlsx/drawing/series_title.rb +23 -25
  49. data/lib/axlsx/drawing/str_data.rb +37 -42
  50. data/lib/axlsx/drawing/str_val.rb +31 -34
  51. data/lib/axlsx/drawing/title.rb +104 -97
  52. data/lib/axlsx/drawing/two_cell_anchor.rb +95 -97
  53. data/lib/axlsx/drawing/val_axis.rb +34 -37
  54. data/lib/axlsx/drawing/view_3D.rb +115 -115
  55. data/lib/axlsx/drawing/vml_drawing.rb +39 -42
  56. data/lib/axlsx/drawing/vml_shape.rb +63 -66
  57. data/lib/axlsx/package.rb +397 -388
  58. data/lib/axlsx/rels/relationship.rb +127 -130
  59. data/lib/axlsx/rels/relationships.rb +29 -32
  60. data/lib/axlsx/stylesheet/border.rb +70 -73
  61. data/lib/axlsx/stylesheet/border_pr.rb +69 -71
  62. data/lib/axlsx/stylesheet/cell_alignment.rb +124 -132
  63. data/lib/axlsx/stylesheet/cell_protection.rb +38 -41
  64. data/lib/axlsx/stylesheet/cell_style.rb +68 -72
  65. data/lib/axlsx/stylesheet/color.rb +77 -76
  66. data/lib/axlsx/stylesheet/dxf.rb +75 -79
  67. data/lib/axlsx/stylesheet/fill.rb +31 -35
  68. data/lib/axlsx/stylesheet/font.rb +157 -156
  69. data/lib/axlsx/stylesheet/gradient_fill.rb +101 -103
  70. data/lib/axlsx/stylesheet/gradient_stop.rb +36 -37
  71. data/lib/axlsx/stylesheet/num_fmt.rb +83 -86
  72. data/lib/axlsx/stylesheet/pattern_fill.rb +71 -73
  73. data/lib/axlsx/stylesheet/styles.rb +543 -494
  74. data/lib/axlsx/stylesheet/table_style.rb +51 -54
  75. data/lib/axlsx/stylesheet/table_style_element.rb +74 -77
  76. data/lib/axlsx/stylesheet/table_styles.rb +42 -46
  77. data/lib/axlsx/stylesheet/xf.rb +144 -147
  78. data/lib/axlsx/util/accessors.rb +62 -64
  79. data/lib/axlsx/util/constants.rb +414 -410
  80. data/lib/axlsx/util/mime_type_utils.rb +24 -11
  81. data/lib/axlsx/util/options_parser.rb +15 -16
  82. data/lib/axlsx/util/serialized_attributes.rb +88 -89
  83. data/lib/axlsx/util/simple_typed_list.rb +180 -179
  84. data/lib/axlsx/util/storage.rb +142 -146
  85. data/lib/axlsx/util/validators.rb +315 -312
  86. data/lib/axlsx/util/zip_command.rb +71 -73
  87. data/lib/axlsx/version.rb +4 -5
  88. data/lib/axlsx/workbook/defined_name.rb +129 -128
  89. data/lib/axlsx/workbook/defined_names.rb +20 -21
  90. data/lib/axlsx/workbook/shared_strings_table.rb +74 -77
  91. data/lib/axlsx/workbook/workbook.rb +430 -395
  92. data/lib/axlsx/workbook/workbook_view.rb +75 -80
  93. data/lib/axlsx/workbook/workbook_views.rb +20 -22
  94. data/lib/axlsx/workbook/worksheet/auto_filter/auto_filter.rb +78 -77
  95. data/lib/axlsx/workbook/worksheet/auto_filter/filter_column.rb +94 -94
  96. data/lib/axlsx/workbook/worksheet/auto_filter/filters.rb +243 -244
  97. data/lib/axlsx/workbook/worksheet/border_creator.rb +79 -0
  98. data/lib/axlsx/workbook/worksheet/break.rb +32 -35
  99. data/lib/axlsx/workbook/worksheet/cell.rb +552 -506
  100. data/lib/axlsx/workbook/worksheet/cell_serializer.rb +164 -164
  101. data/lib/axlsx/workbook/worksheet/cfvo.rb +60 -60
  102. data/lib/axlsx/workbook/worksheet/cfvos.rb +16 -18
  103. data/lib/axlsx/workbook/worksheet/col.rb +142 -145
  104. data/lib/axlsx/workbook/worksheet/col_breaks.rb +34 -35
  105. data/lib/axlsx/workbook/worksheet/color_scale.rb +108 -110
  106. data/lib/axlsx/workbook/worksheet/cols.rb +23 -23
  107. data/lib/axlsx/workbook/worksheet/comment.rb +90 -91
  108. data/lib/axlsx/workbook/worksheet/comments.rb +78 -82
  109. data/lib/axlsx/workbook/worksheet/conditional_formatting.rb +81 -82
  110. data/lib/axlsx/workbook/worksheet/conditional_formatting_rule.rb +216 -220
  111. data/lib/axlsx/workbook/worksheet/conditional_formattings.rb +23 -25
  112. data/lib/axlsx/workbook/worksheet/data_bar.rb +127 -129
  113. data/lib/axlsx/workbook/worksheet/data_validation.rb +266 -246
  114. data/lib/axlsx/workbook/worksheet/data_validations.rb +25 -28
  115. data/lib/axlsx/workbook/worksheet/date_time_converter.rb +28 -30
  116. data/lib/axlsx/workbook/worksheet/dimension.rb +65 -64
  117. data/lib/axlsx/workbook/worksheet/header_footer.rb +51 -52
  118. data/lib/axlsx/workbook/worksheet/icon_set.rb +80 -81
  119. data/lib/axlsx/workbook/worksheet/merged_cells.rb +37 -37
  120. data/lib/axlsx/workbook/worksheet/outline_pr.rb +32 -33
  121. data/lib/axlsx/workbook/worksheet/page_margins.rb +97 -97
  122. data/lib/axlsx/workbook/worksheet/page_set_up_pr.rb +42 -44
  123. data/lib/axlsx/workbook/worksheet/page_setup.rb +237 -240
  124. data/lib/axlsx/workbook/worksheet/pane.rb +138 -139
  125. data/lib/axlsx/workbook/worksheet/pivot_table.rb +332 -296
  126. data/lib/axlsx/workbook/worksheet/pivot_table_cache_definition.rb +63 -66
  127. data/lib/axlsx/workbook/worksheet/pivot_tables.rb +23 -24
  128. data/lib/axlsx/workbook/worksheet/print_options.rb +38 -39
  129. data/lib/axlsx/workbook/worksheet/protected_range.rb +46 -47
  130. data/lib/axlsx/workbook/worksheet/protected_ranges.rb +37 -37
  131. data/lib/axlsx/workbook/worksheet/rich_text.rb +53 -55
  132. data/lib/axlsx/workbook/worksheet/rich_text_run.rb +266 -250
  133. data/lib/axlsx/workbook/worksheet/row.rb +173 -164
  134. data/lib/axlsx/workbook/worksheet/row_breaks.rb +32 -33
  135. data/lib/axlsx/workbook/worksheet/selection.rb +99 -101
  136. data/lib/axlsx/workbook/worksheet/sheet_calc_pr.rb +28 -29
  137. data/lib/axlsx/workbook/worksheet/sheet_data.rb +25 -27
  138. data/lib/axlsx/workbook/worksheet/sheet_format_pr.rb +18 -18
  139. data/lib/axlsx/workbook/worksheet/sheet_pr.rb +87 -87
  140. data/lib/axlsx/workbook/worksheet/sheet_protection.rb +117 -118
  141. data/lib/axlsx/workbook/worksheet/sheet_view.rb +206 -213
  142. data/lib/axlsx/workbook/worksheet/table.rb +100 -102
  143. data/lib/axlsx/workbook/worksheet/table_style_info.rb +48 -49
  144. data/lib/axlsx/workbook/worksheet/tables.rb +34 -34
  145. data/lib/axlsx/workbook/worksheet/worksheet.rb +857 -786
  146. data/lib/axlsx/workbook/worksheet/worksheet_comments.rb +58 -58
  147. data/lib/axlsx/workbook/worksheet/worksheet_drawing.rb +59 -58
  148. data/lib/axlsx/workbook/worksheet/worksheet_hyperlink.rb +73 -74
  149. data/lib/axlsx/workbook/worksheet/worksheet_hyperlinks.rb +38 -38
  150. data/lib/axlsx.rb +218 -185
  151. data/lib/caxlsx.rb +1 -2
  152. data/lib/schema/dc.xsd +118 -118
  153. data/lib/schema/dcmitype.xsd +51 -51
  154. data/lib/schema/dcterms.xsd +331 -331
  155. data/lib/schema/dml-chartDrawing.xsd +146 -146
  156. data/lib/schema/dml-compatibility.xsd +14 -14
  157. data/lib/schema/dml-lockedCanvas.xsd +11 -11
  158. data/lib/schema/dml-main.xsd +3048 -3048
  159. data/lib/schema/dml-picture.xsd +23 -23
  160. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -185
  161. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -185
  162. data/lib/schema/shared-additionalCharacteristics.xsd +28 -28
  163. data/lib/schema/shared-bibliography.xsd +144 -144
  164. data/lib/schema/shared-commonSimpleTypes.xsd +166 -166
  165. data/lib/schema/shared-customXmlDataProperties.xsd +25 -25
  166. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -18
  167. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -59
  168. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -56
  169. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -195
  170. data/lib/schema/shared-relationshipReference.xsd +25 -25
  171. data/lib/schema/vml-main.xsd +569 -569
  172. data/lib/schema/vml-officeDrawing.xsd +509 -509
  173. data/lib/schema/vml-presentationDrawing.xsd +12 -12
  174. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -108
  175. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -96
  176. data/lib/schema/xml.xsd +116 -116
  177. metadata +5 -252
  178. data/test/benchmark.rb +0 -72
  179. data/test/content_type/tc_content_type.rb +0 -76
  180. data/test/content_type/tc_default.rb +0 -16
  181. data/test/content_type/tc_override.rb +0 -14
  182. data/test/doc_props/tc_app.rb +0 -43
  183. data/test/doc_props/tc_core.rb +0 -42
  184. data/test/drawing/tc_area_chart.rb +0 -39
  185. data/test/drawing/tc_area_series.rb +0 -71
  186. data/test/drawing/tc_axes.rb +0 -8
  187. data/test/drawing/tc_axis.rb +0 -112
  188. data/test/drawing/tc_bar_3D_chart.rb +0 -86
  189. data/test/drawing/tc_bar_chart.rb +0 -86
  190. data/test/drawing/tc_bar_series.rb +0 -46
  191. data/test/drawing/tc_bubble_chart.rb +0 -44
  192. data/test/drawing/tc_bubble_series.rb +0 -21
  193. data/test/drawing/tc_cat_axis.rb +0 -31
  194. data/test/drawing/tc_cat_axis_data.rb +0 -27
  195. data/test/drawing/tc_chart.rb +0 -123
  196. data/test/drawing/tc_d_lbls.rb +0 -57
  197. data/test/drawing/tc_data_source.rb +0 -23
  198. data/test/drawing/tc_drawing.rb +0 -80
  199. data/test/drawing/tc_graphic_frame.rb +0 -27
  200. data/test/drawing/tc_hyperlink.rb +0 -64
  201. data/test/drawing/tc_line_3d_chart.rb +0 -47
  202. data/test/drawing/tc_line_chart.rb +0 -39
  203. data/test/drawing/tc_line_series.rb +0 -71
  204. data/test/drawing/tc_marker.rb +0 -44
  205. data/test/drawing/tc_named_axis_data.rb +0 -27
  206. data/test/drawing/tc_num_data.rb +0 -31
  207. data/test/drawing/tc_num_val.rb +0 -29
  208. data/test/drawing/tc_one_cell_anchor.rb +0 -66
  209. data/test/drawing/tc_pic.rb +0 -103
  210. data/test/drawing/tc_picture_locking.rb +0 -72
  211. data/test/drawing/tc_pie_3D_chart.rb +0 -28
  212. data/test/drawing/tc_pie_series.rb +0 -33
  213. data/test/drawing/tc_scaling.rb +0 -36
  214. data/test/drawing/tc_scatter_chart.rb +0 -48
  215. data/test/drawing/tc_scatter_series.rb +0 -74
  216. data/test/drawing/tc_ser_axis.rb +0 -31
  217. data/test/drawing/tc_series.rb +0 -23
  218. data/test/drawing/tc_series_title.rb +0 -54
  219. data/test/drawing/tc_str_data.rb +0 -18
  220. data/test/drawing/tc_str_val.rb +0 -30
  221. data/test/drawing/tc_title.rb +0 -70
  222. data/test/drawing/tc_two_cell_anchor.rb +0 -36
  223. data/test/drawing/tc_val_axis.rb +0 -24
  224. data/test/drawing/tc_view_3D.rb +0 -54
  225. data/test/drawing/tc_vml_drawing.rb +0 -25
  226. data/test/drawing/tc_vml_shape.rb +0 -106
  227. data/test/fixtures/image1.gif +0 -0
  228. data/test/fixtures/image1.jpeg +0 -0
  229. data/test/fixtures/image1.jpg +0 -0
  230. data/test/fixtures/image1.png +0 -0
  231. data/test/fixtures/image1_fake.jpg +0 -0
  232. data/test/profile.rb +0 -24
  233. data/test/rels/tc_relationship.rb +0 -52
  234. data/test/rels/tc_relationships.rb +0 -37
  235. data/test/stylesheet/tc_border.rb +0 -37
  236. data/test/stylesheet/tc_border_pr.rb +0 -32
  237. data/test/stylesheet/tc_cell_alignment.rb +0 -81
  238. data/test/stylesheet/tc_cell_protection.rb +0 -29
  239. data/test/stylesheet/tc_cell_style.rb +0 -57
  240. data/test/stylesheet/tc_color.rb +0 -43
  241. data/test/stylesheet/tc_dxf.rb +0 -81
  242. data/test/stylesheet/tc_fill.rb +0 -18
  243. data/test/stylesheet/tc_font.rb +0 -133
  244. data/test/stylesheet/tc_gradient_fill.rb +0 -72
  245. data/test/stylesheet/tc_gradient_stop.rb +0 -31
  246. data/test/stylesheet/tc_num_fmt.rb +0 -30
  247. data/test/stylesheet/tc_pattern_fill.rb +0 -43
  248. data/test/stylesheet/tc_styles.rb +0 -309
  249. data/test/stylesheet/tc_table_style.rb +0 -44
  250. data/test/stylesheet/tc_table_style_element.rb +0 -45
  251. data/test/stylesheet/tc_table_styles.rb +0 -29
  252. data/test/stylesheet/tc_xf.rb +0 -120
  253. data/test/tc_axlsx.rb +0 -109
  254. data/test/tc_helper.rb +0 -10
  255. data/test/tc_package.rb +0 -317
  256. data/test/util/tc_mime_type_utils.rb +0 -13
  257. data/test/util/tc_serialized_attributes.rb +0 -19
  258. data/test/util/tc_simple_typed_list.rb +0 -77
  259. data/test/util/tc_validators.rb +0 -210
  260. data/test/workbook/tc_defined_name.rb +0 -49
  261. data/test/workbook/tc_shared_strings_table.rb +0 -59
  262. data/test/workbook/tc_workbook.rb +0 -165
  263. data/test/workbook/tc_workbook_view.rb +0 -50
  264. data/test/workbook/worksheet/auto_filter/tc_auto_filter.rb +0 -38
  265. data/test/workbook/worksheet/auto_filter/tc_filter_column.rb +0 -76
  266. data/test/workbook/worksheet/auto_filter/tc_filters.rb +0 -50
  267. data/test/workbook/worksheet/tc_break.rb +0 -49
  268. data/test/workbook/worksheet/tc_cell.rb +0 -465
  269. data/test/workbook/worksheet/tc_cfvo.rb +0 -31
  270. data/test/workbook/worksheet/tc_col.rb +0 -93
  271. data/test/workbook/worksheet/tc_color_scale.rb +0 -58
  272. data/test/workbook/worksheet/tc_comment.rb +0 -72
  273. data/test/workbook/worksheet/tc_comments.rb +0 -57
  274. data/test/workbook/worksheet/tc_conditional_formatting.rb +0 -224
  275. data/test/workbook/worksheet/tc_data_bar.rb +0 -46
  276. data/test/workbook/worksheet/tc_data_validation.rb +0 -265
  277. data/test/workbook/worksheet/tc_date_time_converter.rb +0 -124
  278. data/test/workbook/worksheet/tc_header_footer.rb +0 -151
  279. data/test/workbook/worksheet/tc_icon_set.rb +0 -45
  280. data/test/workbook/worksheet/tc_outline_pr.rb +0 -19
  281. data/test/workbook/worksheet/tc_page_margins.rb +0 -97
  282. data/test/workbook/worksheet/tc_page_set_up_pr.rb +0 -15
  283. data/test/workbook/worksheet/tc_page_setup.rb +0 -143
  284. data/test/workbook/worksheet/tc_pane.rb +0 -54
  285. data/test/workbook/worksheet/tc_pivot_table.rb +0 -180
  286. data/test/workbook/worksheet/tc_pivot_table_cache_definition.rb +0 -62
  287. data/test/workbook/worksheet/tc_print_options.rb +0 -72
  288. data/test/workbook/worksheet/tc_protected_range.rb +0 -17
  289. data/test/workbook/worksheet/tc_rich_text.rb +0 -44
  290. data/test/workbook/worksheet/tc_rich_text_run.rb +0 -173
  291. data/test/workbook/worksheet/tc_row.rb +0 -160
  292. data/test/workbook/worksheet/tc_selection.rb +0 -55
  293. data/test/workbook/worksheet/tc_sheet_calc_pr.rb +0 -18
  294. data/test/workbook/worksheet/tc_sheet_format_pr.rb +0 -88
  295. data/test/workbook/worksheet/tc_sheet_pr.rb +0 -49
  296. data/test/workbook/worksheet/tc_sheet_protection.rb +0 -117
  297. data/test/workbook/worksheet/tc_sheet_view.rb +0 -214
  298. data/test/workbook/worksheet/tc_table.rb +0 -77
  299. data/test/workbook/worksheet/tc_table_style_info.rb +0 -53
  300. data/test/workbook/worksheet/tc_worksheet.rb +0 -632
  301. data/test/workbook/worksheet/tc_worksheet_hyperlink.rb +0 -55
@@ -1,211 +1,244 @@
1
- # encoding: UTF-8
2
- module Axlsx
3
- # a Pic object represents an image in your worksheet
4
- # Worksheet#add_image is the recommended way to manage images in your sheets
5
- # @see Worksheet#add_image
6
- class Pic
7
-
8
- include Axlsx::OptionsParser
9
-
10
- # Creates a new Pic(ture) object
11
- # @param [Anchor] anchor the anchor that holds this image
12
- # @option options [String] :name
13
- # @option options [String] :descr
14
- # @option options [String] :image_src
15
- # @option options [Array] :start_at
16
- # @option options [Integer] :width
17
- # @option options [Integer] :height
18
- # @option options [Float] :opacity - set the picture opacity, accepts a value between 0.0 and 1.0
19
- def initialize(anchor, options={})
20
- @anchor = anchor
21
- @hyperlink = nil
22
- @anchor.drawing.worksheet.workbook.images << self
23
- parse_options options
24
- start_at(*options[:start_at]) if options[:start_at]
25
- yield self if block_given?
26
- @picture_locking = PictureLocking.new(options)
27
- @opacity = (options[:opacity] * 100000).round if options[:opacity]
28
- end
29
-
30
- # allowed mime types
31
- ALLOWED_MIME_TYPES = %w(image/jpeg image/png image/gif)
32
-
33
- # The name to use for this picture
34
- # @return [String]
35
- attr_reader :name
36
-
37
- # A description of the picture
38
- # @return [String]
39
- attr_reader :descr
40
-
41
- # The path to the image you want to include
42
- # Only local images are supported at this time.
43
- # @return [String]
44
- attr_reader :image_src
45
-
46
- # The anchor for this image
47
- # @return [OneCellAnchor]
48
- attr_reader :anchor
49
-
50
- # The picture locking attributes for this picture
51
- attr_reader :picture_locking
52
-
53
- attr_reader :hyperlink
54
-
55
- # Picture opacity
56
- # @return [Integer]
57
- attr_reader :opacity
58
-
59
- # sets or updates a hyperlink for this image.
60
- # @param [String] v The href value for the hyper link
61
- # @option options @see Hyperlink#initialize All options available to the Hyperlink class apply - however href will be overridden with the v parameter value.
62
- def hyperlink=(v, options={})
63
- options[:href] = v
64
- if hyperlink.is_a?(Hyperlink)
65
- options.each do |o|
66
- hyperlink.send("#{o[0]}=", o[1]) if hyperlink.respond_to? "#{o[0]}="
67
- end
68
- else
69
- @hyperlink = Hyperlink.new(self, options)
70
- end
71
- hyperlink
72
- end
73
-
74
- def image_src=(v)
75
- Axlsx::validate_string(v)
76
- RestrictionValidator.validate 'Pic.image_src', ALLOWED_MIME_TYPES, MimeTypeUtils.get_mime_type(v)
77
- raise ArgumentError, "File does not exist" unless File.exist?(v)
78
- @image_src = v
79
- end
80
-
81
- # @see name
82
- def name=(v) Axlsx::validate_string(v); @name = v; end
83
-
84
- # @see descr
85
- def descr=(v) Axlsx::validate_string(v); @descr = v; end
86
-
87
- # The file name of image_src without any path information
88
- # @return [String]
89
- def file_name
90
- File.basename(image_src) unless image_src.nil?
91
- end
92
-
93
- # returns the extension of image_src without the preceeding '.'
94
- # @return [String]
95
- def extname
96
- File.extname(image_src).delete('.') unless image_src.nil?
97
- end
98
-
99
- # The index of this image in the workbooks images collections
100
- # @return [Index]
101
- def index
102
- @anchor.drawing.worksheet.workbook.images.index(self)
103
- end
104
-
105
- # The part name for this image used in serialization and relationship building
106
- # @return [String]
107
- def pn
108
- "#{IMAGE_PN % [(index+1), extname]}"
109
- end
110
-
111
- # The relationship object for this pic.
112
- # @return [Relationship]
113
- def relationship
114
- Relationship.new(self, IMAGE_R, "../#{pn}")
115
- end
116
-
117
- # providing access to the anchor's width attribute
118
- # @see OneCellAnchor.width
119
- def width
120
- return unless @anchor.is_a?(OneCellAnchor)
121
- @anchor.width
122
- end
123
-
124
- # @see width
125
- def width=(v)
126
- use_one_cell_anchor unless @anchor.is_a?(OneCellAnchor)
127
- @anchor.width = v
128
- end
129
-
130
- # providing access to update the anchor's height attribute
131
- # @see OneCellAnchor.width
132
- # @note this is a noop if you are using a TwoCellAnchor
133
- def height
134
- @anchor.height
135
- end
136
-
137
- # @see height
138
- # @note This is a noop if you are using a TwoCellAnchor
139
- def height=(v)
140
- use_one_cell_anchor unless @anchor.is_a?(OneCellAnchor)
141
- @anchor.height = v
142
- end
143
-
144
- # This is a short cut method to set the start anchor position
145
- # If you need finer granularity in positioning use
146
- # graphic_frame.anchor.from.colOff / rowOff
147
- # @param [Integer] x The column
148
- # @param [Integer] y The row
149
- # @return [Marker]
150
- def start_at(x, y=nil)
151
- @anchor.start_at x, y
152
- @anchor.from
153
- end
154
-
155
- # noop if not using a two cell anchor
156
- # @param [Integer] x The column
157
- # @param [Integer] y The row
158
- # @return [Marker]
159
- def end_at(x, y=nil)
160
- use_two_cell_anchor unless @anchor.is_a?(TwoCellAnchor)
161
- @anchor.end_at x, y
162
- @anchor.to
163
- end
164
-
165
- # Serializes the object
166
- # @param [String] str
167
- # @return [String]
168
- def to_xml_string(str = '')
169
- str << '<xdr:pic>'
170
- str << '<xdr:nvPicPr>'
171
- str << ('<xdr:cNvPr id="2" name="' << name.to_s << '" descr="' << descr.to_s << '">')
172
- hyperlink.to_xml_string(str) if hyperlink.is_a?(Hyperlink)
173
- str << '</xdr:cNvPr><xdr:cNvPicPr>'
174
- picture_locking.to_xml_string(str)
175
- str << '</xdr:cNvPicPr></xdr:nvPicPr>'
176
- str << '<xdr:blipFill>'
177
- str << ('<a:blip xmlns:r ="' << XML_NS_R << '" r:embed="' << relationship.Id << '">')
178
- if opacity
179
- str << "<a:alphaModFix amt=\"#{opacity}\"/>"
180
- end
181
- str << '</a:blip>'
182
- str << '<a:stretch><a:fillRect/></a:stretch></xdr:blipFill><xdr:spPr>'
183
- str << '<a:xfrm><a:off x="0" y="0"/><a:ext cx="2336800" cy="2161540"/></a:xfrm>'
184
- str << '<a:prstGeom prst="rect"><a:avLst/></a:prstGeom></xdr:spPr></xdr:pic>'
185
- end
186
-
187
- private
188
-
189
- # Changes the anchor to a one cell anchor.
190
- def use_one_cell_anchor
191
- return if @anchor.is_a?(OneCellAnchor)
192
- new_anchor = OneCellAnchor.new(@anchor.drawing, :start_at => [@anchor.from.col, @anchor.from.row])
193
- swap_anchor(new_anchor)
194
- end
195
-
196
- #changes the anchor type to a two cell anchor
197
- def use_two_cell_anchor
198
- return if @anchor.is_a?(TwoCellAnchor)
199
- new_anchor = TwoCellAnchor.new(@anchor.drawing, :start_at => [@anchor.from.col, @anchor.from.row])
200
- swap_anchor(new_anchor)
201
- end
202
-
203
- # refactoring of swapping code, law of demeter be damned!
204
- def swap_anchor(new_anchor)
205
- new_anchor.drawing.anchors.delete(new_anchor)
206
- @anchor.drawing.anchors[@anchor.drawing.anchors.index(@anchor)] = new_anchor
207
- new_anchor.instance_variable_set "@object", @anchor.object
208
- @anchor = new_anchor
209
- end
210
- end
211
- end
1
+ module Axlsx
2
+ # a Pic object represents an image in your worksheet
3
+ # Worksheet#add_image is the recommended way to manage images in your sheets
4
+ # @see Worksheet#add_image
5
+ class Pic
6
+ include Axlsx::OptionsParser
7
+
8
+ # Creates a new Pic(ture) object
9
+ # @param [Anchor] anchor the anchor that holds this image
10
+ # @option options [Boolean] :remote indicates if image_src is a remote URI
11
+ # @option options [String] :name
12
+ # @option options [String] :descr
13
+ # @option options [String] :image_src
14
+ # @option options [Array] :start_at
15
+ # @option options [Integer] :width
16
+ # @option options [Integer] :height
17
+ # @option options [Float] :opacity - set the picture opacity, accepts a value between 0.0 and 1.0
18
+ def initialize(anchor, options = {})
19
+ @anchor = anchor
20
+ @hyperlink = nil
21
+ @anchor.drawing.worksheet.workbook.images << self
22
+ @remote = options[:remote]
23
+ parse_options options
24
+ start_at(*options[:start_at]) if options[:start_at]
25
+ yield self if block_given?
26
+ @picture_locking = PictureLocking.new(options)
27
+ @opacity = (options[:opacity] * 100000).round if options[:opacity]
28
+ end
29
+
30
+ # allowed mime types
31
+ ALLOWED_MIME_TYPES = %w(image/jpeg image/png image/gif)
32
+
33
+ # The name to use for this picture
34
+ # @return [String]
35
+ attr_reader :name
36
+
37
+ # A description of the picture
38
+ # @return [String]
39
+ attr_reader :descr
40
+
41
+ # The path to the image you want to include
42
+ # Only local images are supported at this time.
43
+ # @return [String]
44
+ attr_reader :image_src
45
+
46
+ # The anchor for this image
47
+ # @return [OneCellAnchor]
48
+ attr_reader :anchor
49
+
50
+ # The picture locking attributes for this picture
51
+ attr_reader :picture_locking
52
+
53
+ attr_reader :hyperlink
54
+
55
+ # Picture opacity
56
+ # @return [Integer]
57
+ attr_reader :opacity
58
+
59
+ # Flag for remote picture (from URI)
60
+ # @return [Boolean]
61
+ attr_reader :remote
62
+
63
+ # sets or updates a hyperlink for this image.
64
+ # @param [String] v The href value for the hyper link
65
+ # @option options @see Hyperlink#initialize All options available to the Hyperlink class apply - however href will be overridden with the v parameter value.
66
+ def hyperlink=(v, options = {})
67
+ options[:href] = v
68
+ if hyperlink.is_a?(Hyperlink)
69
+ options.each do |o|
70
+ hyperlink.send("#{o[0]}=", o[1]) if hyperlink.respond_to? "#{o[0]}="
71
+ end
72
+ else
73
+ @hyperlink = Hyperlink.new(self, options)
74
+ end
75
+ hyperlink
76
+ end
77
+
78
+ def image_src=(v)
79
+ Axlsx::validate_string(v)
80
+ if remote?
81
+ RegexValidator.validate('Pic.image_src', /\A#{URI::DEFAULT_PARSER.make_regexp}\z/, v)
82
+ RestrictionValidator.validate 'Pic.image_src', ALLOWED_MIME_TYPES, MimeTypeUtils.get_mime_type_from_uri(v)
83
+ else
84
+ RestrictionValidator.validate 'Pic.image_src', ALLOWED_MIME_TYPES, MimeTypeUtils.get_mime_type(v)
85
+ raise ArgumentError, "File does not exist" unless File.exist?(v)
86
+ end
87
+
88
+ @image_src = v
89
+ end
90
+
91
+ # @see name
92
+ def name=(v) Axlsx::validate_string(v); @name = v; end
93
+
94
+ # @see descr
95
+ def descr=(v) Axlsx::validate_string(v); @descr = v; end
96
+
97
+ # @see remote
98
+ def remote=(v) Axlsx::validate_boolean(v); @remote = v; end
99
+
100
+ def remote?
101
+ remote == 1 || remote.to_s == 'true'
102
+ end
103
+
104
+ # The file name of image_src without any path information
105
+ # @return [String]
106
+ def file_name
107
+ File.basename(image_src) unless remote? || image_src.nil?
108
+ end
109
+
110
+ # returns the extension of image_src without the preceeding '.'
111
+ # @return [String]
112
+ def extname
113
+ File.extname(image_src).delete('.') unless image_src.nil?
114
+ end
115
+
116
+ # The index of this image in the workbooks images collections
117
+ # @return [Index]
118
+ def index
119
+ @anchor.drawing.worksheet.workbook.images.index(self)
120
+ end
121
+
122
+ # The part name for this image used in serialization and relationship building
123
+ # @return [String]
124
+ def pn
125
+ "#{IMAGE_PN % [(index + 1), extname]}"
126
+ end
127
+
128
+ # The relationship object for this pic.
129
+ # @return [Relationship]
130
+ def relationship
131
+ if remote?
132
+ Relationship.new(self, IMAGE_R, "#{image_src}", target_mode: :External)
133
+ else
134
+ Relationship.new(self, IMAGE_R, "../#{pn}")
135
+ end
136
+ end
137
+
138
+ # providing access to the anchor's width attribute
139
+ # @see OneCellAnchor.width
140
+ def width
141
+ return unless @anchor.is_a?(OneCellAnchor)
142
+
143
+ @anchor.width
144
+ end
145
+
146
+ # @see width
147
+ def width=(v)
148
+ use_one_cell_anchor unless @anchor.is_a?(OneCellAnchor)
149
+ @anchor.width = v
150
+ end
151
+
152
+ # providing access to update the anchor's height attribute
153
+ # @see OneCellAnchor.width
154
+ # @note this is a noop if you are using a TwoCellAnchor
155
+ def height
156
+ @anchor.height
157
+ end
158
+
159
+ # @see height
160
+ # @note This is a noop if you are using a TwoCellAnchor
161
+ def height=(v)
162
+ use_one_cell_anchor unless @anchor.is_a?(OneCellAnchor)
163
+ @anchor.height = v
164
+ end
165
+
166
+ # This is a short cut method to set the start anchor position
167
+ # If you need finer granularity in positioning use
168
+ # graphic_frame.anchor.from.colOff / rowOff
169
+ # @param [Integer] x The column
170
+ # @param [Integer] y The row
171
+ # @return [Marker]
172
+ def start_at(x, y = nil)
173
+ @anchor.start_at x, y
174
+ @anchor.from
175
+ end
176
+
177
+ # noop if not using a two cell anchor
178
+ # @param [Integer] x The column
179
+ # @param [Integer] y The row
180
+ # @return [Marker]
181
+ def end_at(x, y = nil)
182
+ use_two_cell_anchor unless @anchor.is_a?(TwoCellAnchor)
183
+ @anchor.end_at x, y
184
+ @anchor.to
185
+ end
186
+
187
+ # Serializes the object
188
+ # @param [String] str
189
+ # @return [String]
190
+ def to_xml_string(str = '')
191
+ str << '<xdr:pic>'
192
+ str << '<xdr:nvPicPr>'
193
+ str << ('<xdr:cNvPr id="2" name="' << name.to_s << '" descr="' << descr.to_s << '">')
194
+ hyperlink.to_xml_string(str) if hyperlink.is_a?(Hyperlink)
195
+ str << '</xdr:cNvPr><xdr:cNvPicPr>'
196
+ picture_locking.to_xml_string(str)
197
+ str << '</xdr:cNvPicPr></xdr:nvPicPr>'
198
+ str << '<xdr:blipFill>'
199
+ str << relationship_xml_portion
200
+ if opacity
201
+ str << "<a:alphaModFix amt=\"#{opacity}\"/>"
202
+ end
203
+ str << '</a:blip>'
204
+ str << '<a:stretch><a:fillRect/></a:stretch></xdr:blipFill><xdr:spPr>'
205
+ str << '<a:xfrm><a:off x="0" y="0"/><a:ext cx="2336800" cy="2161540"/></a:xfrm>'
206
+ str << '<a:prstGeom prst="rect"><a:avLst/></a:prstGeom></xdr:spPr></xdr:pic>'
207
+ end
208
+
209
+ private
210
+
211
+ # Return correct xml relationship string portion
212
+ def relationship_xml_portion
213
+ if remote?
214
+ ('<a:blip xmlns:r ="' << XML_NS_R << '" r:link="' << relationship.Id << '">')
215
+ else
216
+ ('<a:blip xmlns:r ="' << XML_NS_R << '" r:embed="' << relationship.Id << '">')
217
+ end
218
+ end
219
+
220
+ # Changes the anchor to a one cell anchor.
221
+ def use_one_cell_anchor
222
+ return if @anchor.is_a?(OneCellAnchor)
223
+
224
+ new_anchor = OneCellAnchor.new(@anchor.drawing, :start_at => [@anchor.from.col, @anchor.from.row])
225
+ swap_anchor(new_anchor)
226
+ end
227
+
228
+ # changes the anchor type to a two cell anchor
229
+ def use_two_cell_anchor
230
+ return if @anchor.is_a?(TwoCellAnchor)
231
+
232
+ new_anchor = TwoCellAnchor.new(@anchor.drawing, :start_at => [@anchor.from.col, @anchor.from.row])
233
+ swap_anchor(new_anchor)
234
+ end
235
+
236
+ # refactoring of swapping code, law of demeter be damned!
237
+ def swap_anchor(new_anchor)
238
+ new_anchor.drawing.anchors.delete(new_anchor)
239
+ @anchor.drawing.anchors[@anchor.drawing.anchors.index(@anchor)] = new_anchor
240
+ new_anchor.instance_variable_set "@object", @anchor.object
241
+ @anchor = new_anchor
242
+ end
243
+ end
244
+ end
@@ -1,42 +1,39 @@
1
- # encoding: UTF-8
2
- module Axlsx
3
- # The picture locking class defines the locking properties for pictures in your workbook.
4
- class PictureLocking
5
-
6
- include Axlsx::OptionsParser
7
- include Axlsx::SerializedAttributes
8
- include Axlsx::Accessors
9
-
10
- boolean_attr_accessor :noGrp, :noSelect, :noRot, :noChangeAspect,
11
- :noMove, :noResize, :noEditPoints, :noAdjustHandles,
12
- :noChangeArrowheads, :noChangeShapeType
13
-
14
- serializable_attributes :noGrp, :noSelect, :noRot, :noChangeAspect,
15
- :noMove, :noResize, :noEditPoints, :noAdjustHandles,
16
- :noChangeArrowheads, :noChangeShapeType
17
-
18
- # Creates a new PictureLocking object
19
- # @option options [Boolean] noGrp
20
- # @option options [Boolean] noSelect
21
- # @option options [Boolean] noRot
22
- # @option options [Boolean] noChangeAspect
23
- # @option options [Boolean] noMove
24
- # @option options [Boolean] noResize
25
- # @option options [Boolean] noEditPoints
26
- # @option options [Boolean] noAdjustHandles
27
- # @option options [Boolean] noChangeArrowheads
28
- # @option options [Boolean] noChangeShapeType
29
- def initialize(options={})
30
- @noChangeAspect = true
31
- parse_options options
32
- end
33
-
34
- # Serializes the object
35
- # @param [String] str
36
- # @return [String]
37
- def to_xml_string(str = '')
38
- serialized_tag('a:picLocks', str)
39
- end
40
-
41
- end
42
- end
1
+ module Axlsx
2
+ # The picture locking class defines the locking properties for pictures in your workbook.
3
+ class PictureLocking
4
+ include Axlsx::OptionsParser
5
+ include Axlsx::SerializedAttributes
6
+ include Axlsx::Accessors
7
+
8
+ boolean_attr_accessor :noGrp, :noSelect, :noRot, :noChangeAspect,
9
+ :noMove, :noResize, :noEditPoints, :noAdjustHandles,
10
+ :noChangeArrowheads, :noChangeShapeType
11
+
12
+ serializable_attributes :noGrp, :noSelect, :noRot, :noChangeAspect,
13
+ :noMove, :noResize, :noEditPoints, :noAdjustHandles,
14
+ :noChangeArrowheads, :noChangeShapeType
15
+
16
+ # Creates a new PictureLocking object
17
+ # @option options [Boolean] noGrp
18
+ # @option options [Boolean] noSelect
19
+ # @option options [Boolean] noRot
20
+ # @option options [Boolean] noChangeAspect
21
+ # @option options [Boolean] noMove
22
+ # @option options [Boolean] noResize
23
+ # @option options [Boolean] noEditPoints
24
+ # @option options [Boolean] noAdjustHandles
25
+ # @option options [Boolean] noChangeArrowheads
26
+ # @option options [Boolean] noChangeShapeType
27
+ def initialize(options = {})
28
+ @noChangeAspect = true
29
+ parse_options options
30
+ end
31
+
32
+ # Serializes the object
33
+ # @param [String] str
34
+ # @return [String]
35
+ def to_xml_string(str = '')
36
+ serialized_tag('a:picLocks', str)
37
+ end
38
+ end
39
+ end
@@ -1,47 +1,42 @@
1
- # encoding: UTF-8
2
- module Axlsx
3
-
4
-
5
- # The Pie3DChart is a three dimentional piechart (who would have guessed?) that you can add to your worksheet.
6
- # @see Worksheet#add_chart
7
- # @see Chart#add_series
8
- # @see README for an example
9
- class Pie3DChart < Chart
10
-
11
- # Creates a new pie chart object
12
- # @param [GraphicFrame] frame The workbook that owns this chart.
13
- # @option options [Cell, String] title
14
- # @option options [Boolean] show_legend
15
- # @option options [Symbol] grouping
16
- # @option options [String] gap_depth
17
- # @option options [Integer] rot_x
18
- # @option options [String] h_percent
19
- # @option options [Integer] rot_y
20
- # @option options [String] depth_percent
21
- # @option options [Boolean] r_ang_ax
22
- # @option options [Integer] perspective
23
- # @see Chart
24
- # @see View3D
25
- def initialize(frame, options={})
26
- @vary_colors = true
27
- super(frame, options)
28
- @series_type = PieSeries
29
- @view_3D = View3D.new({:rot_x =>30, :perspective=>30}.merge(options))
30
- @d_lbls = nil
31
- end
32
-
33
- # Serializes the object
34
- # @param [String] str
35
- # @return [String]
36
- def to_xml_string(str = '')
37
- super(str) do
38
- str << '<c:pie3DChart>'
39
- str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
40
- @series.each { |ser| ser.to_xml_string(str) }
41
- d_lbls.to_xml_string(str) if @d_lbls
42
- str << '</c:pie3DChart>'
43
- end
44
- end
45
-
46
- end
47
- end
1
+ module Axlsx
2
+ # The Pie3DChart is a three dimentional piechart (who would have guessed?) that you can add to your worksheet.
3
+ # @see Worksheet#add_chart
4
+ # @see Chart#add_series
5
+ # @see README for an example
6
+ class Pie3DChart < Chart
7
+ # Creates a new pie chart object
8
+ # @param [GraphicFrame] frame The workbook that owns this chart.
9
+ # @option options [Cell, String] title
10
+ # @option options [Boolean] show_legend
11
+ # @option options [Symbol] grouping
12
+ # @option options [String] gap_depth
13
+ # @option options [Integer] rot_x
14
+ # @option options [String] h_percent
15
+ # @option options [Integer] rot_y
16
+ # @option options [String] depth_percent
17
+ # @option options [Boolean] r_ang_ax
18
+ # @option options [Integer] perspective
19
+ # @see Chart
20
+ # @see View3D
21
+ def initialize(frame, options = {})
22
+ @vary_colors = true
23
+ super(frame, options)
24
+ @series_type = PieSeries
25
+ @view_3D = View3D.new({ :rot_x => 30, :perspective => 30 }.merge(options))
26
+ @d_lbls = nil
27
+ end
28
+
29
+ # Serializes the object
30
+ # @param [String] str
31
+ # @return [String]
32
+ def to_xml_string(str = '')
33
+ super(str) do
34
+ str << '<c:pie3DChart>'
35
+ str << ('<c:varyColors val="' << vary_colors.to_s << '"/>')
36
+ @series.each { |ser| ser.to_xml_string(str) }
37
+ d_lbls.to_xml_string(str) if @d_lbls
38
+ str << '</c:pie3DChart>'
39
+ end
40
+ end
41
+ end
42
+ end