write_xlsx 1.12.3 → 1.15.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 (118) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +22 -0
  3. data/Changes +23 -0
  4. data/README.md +1 -1
  5. data/lib/write_xlsx/chart/area.rb +2 -2
  6. data/lib/write_xlsx/chart/axis.rb +55 -32
  7. data/lib/write_xlsx/chart/axis_writer.rb +528 -0
  8. data/lib/write_xlsx/chart/bar.rb +2 -2
  9. data/lib/write_xlsx/chart/caption.rb +16 -9
  10. data/lib/write_xlsx/chart/chart_area.rb +121 -0
  11. data/lib/write_xlsx/chart/column.rb +2 -2
  12. data/lib/write_xlsx/chart/d_pt_point_writer.rb +14 -0
  13. data/lib/write_xlsx/chart/doughnut.rb +0 -3
  14. data/lib/write_xlsx/chart/formatting_writer.rb +652 -0
  15. data/lib/write_xlsx/chart/initialization.rb +100 -0
  16. data/lib/write_xlsx/chart/line.rb +4 -3
  17. data/lib/write_xlsx/chart/pie.rb +6 -2
  18. data/lib/write_xlsx/chart/radar.rb +2 -2
  19. data/lib/write_xlsx/chart/scatter.rb +4 -3
  20. data/lib/write_xlsx/chart/series.rb +35 -15
  21. data/lib/write_xlsx/chart/series_data.rb +132 -0
  22. data/lib/write_xlsx/chart/series_writer.rb +318 -0
  23. data/lib/write_xlsx/chart/settings.rb +226 -0
  24. data/lib/write_xlsx/chart/stock.rb +2 -2
  25. data/lib/write_xlsx/chart/table.rb +50 -0
  26. data/lib/write_xlsx/chart/xml_writer.rb +305 -0
  27. data/lib/write_xlsx/chart.rb +286 -2477
  28. data/lib/write_xlsx/chartsheet.rb +35 -83
  29. data/lib/write_xlsx/constants.rb +11 -0
  30. data/lib/write_xlsx/drawing.rb +5 -3
  31. data/lib/write_xlsx/format/alignment_state.rb +39 -0
  32. data/lib/write_xlsx/format/alignment_style.rb +92 -0
  33. data/lib/write_xlsx/format/border_state.rb +47 -0
  34. data/lib/write_xlsx/format/border_style.rb +116 -0
  35. data/lib/write_xlsx/format/fill_state.rb +26 -0
  36. data/lib/write_xlsx/format/fill_style.rb +52 -0
  37. data/lib/write_xlsx/format/font_state.rb +74 -0
  38. data/lib/write_xlsx/format/font_style.rb +172 -0
  39. data/lib/write_xlsx/format/format_state.rb +65 -0
  40. data/lib/write_xlsx/format/number_format_state.rb +20 -0
  41. data/lib/write_xlsx/format/number_format_style.rb +28 -0
  42. data/lib/write_xlsx/format/protection_state.rb +20 -0
  43. data/lib/write_xlsx/format/protection_style.rb +28 -0
  44. data/lib/write_xlsx/format.rb +1093 -426
  45. data/lib/write_xlsx/formats.rb +0 -2
  46. data/lib/write_xlsx/image_property.rb +4 -1
  47. data/lib/write_xlsx/inserted_chart.rb +1 -1
  48. data/lib/write_xlsx/object_positioning.rb +203 -0
  49. data/lib/write_xlsx/package/app.rb +3 -3
  50. data/lib/write_xlsx/package/button.rb +6 -2
  51. data/lib/write_xlsx/package/comments.rb +11 -3
  52. data/lib/write_xlsx/package/conditional_format.rb +7 -3
  53. data/lib/write_xlsx/package/content_types.rb +2 -2
  54. data/lib/write_xlsx/package/core.rb +2 -2
  55. data/lib/write_xlsx/package/custom.rb +3 -2
  56. data/lib/write_xlsx/package/metadata.rb +2 -2
  57. data/lib/write_xlsx/package/packager.rb +0 -3
  58. data/lib/write_xlsx/package/relationships.rb +2 -2
  59. data/lib/write_xlsx/package/rich_value.rb +4 -2
  60. data/lib/write_xlsx/package/rich_value_rel.rb +2 -2
  61. data/lib/write_xlsx/package/rich_value_structure.rb +2 -2
  62. data/lib/write_xlsx/package/rich_value_types.rb +3 -3
  63. data/lib/write_xlsx/package/shared_strings.rb +2 -2
  64. data/lib/write_xlsx/package/styles.rb +13 -9
  65. data/lib/write_xlsx/package/table.rb +8 -2
  66. data/lib/write_xlsx/package/theme.rb +0 -3
  67. data/lib/write_xlsx/package/vml.rb +2 -2
  68. data/lib/write_xlsx/page_setup.rb +192 -0
  69. data/lib/write_xlsx/shape.rb +97 -100
  70. data/lib/write_xlsx/sheets.rb +9 -4
  71. data/lib/write_xlsx/sparkline.rb +2 -2
  72. data/lib/write_xlsx/utility/cell_reference.rb +124 -0
  73. data/lib/write_xlsx/utility/chart_formatting.rb +262 -0
  74. data/lib/write_xlsx/utility/common.rb +44 -0
  75. data/lib/write_xlsx/utility/date_time.rb +113 -0
  76. data/lib/write_xlsx/utility/dimensions.rb +40 -0
  77. data/lib/write_xlsx/utility/drawing.rb +136 -0
  78. data/lib/write_xlsx/utility/rich_text.rb +184 -0
  79. data/lib/write_xlsx/utility/sheetname_quoting.rb +73 -0
  80. data/lib/write_xlsx/utility/string_width.rb +45 -0
  81. data/lib/write_xlsx/utility/url.rb +27 -0
  82. data/lib/write_xlsx/utility/xml_primitives.rb +32 -0
  83. data/lib/write_xlsx/version.rb +1 -1
  84. data/lib/write_xlsx/workbook/chart_data.rb +188 -0
  85. data/lib/write_xlsx/workbook/format_preparation.rb +199 -0
  86. data/lib/write_xlsx/workbook/initialization.rb +223 -0
  87. data/lib/write_xlsx/workbook/package_preparation.rb +231 -0
  88. data/lib/write_xlsx/workbook/workbook_writer.rb +164 -0
  89. data/lib/write_xlsx/workbook.rb +143 -981
  90. data/lib/write_xlsx/worksheet/asset_manager.rb +60 -0
  91. data/lib/write_xlsx/worksheet/autofilter.rb +390 -0
  92. data/lib/write_xlsx/worksheet/cell_data.rb +13 -6
  93. data/lib/write_xlsx/worksheet/cell_data_manager.rb +47 -0
  94. data/lib/write_xlsx/worksheet/cell_data_store.rb +61 -0
  95. data/lib/write_xlsx/worksheet/columns.rb +204 -0
  96. data/lib/write_xlsx/worksheet/comments_support.rb +61 -0
  97. data/lib/write_xlsx/worksheet/conditional_formats.rb +30 -0
  98. data/lib/write_xlsx/worksheet/data_validation.rb +9 -1
  99. data/lib/write_xlsx/worksheet/data_writing.rb +1017 -0
  100. data/lib/write_xlsx/worksheet/drawing_methods.rb +308 -0
  101. data/lib/write_xlsx/worksheet/drawing_preparation.rb +290 -0
  102. data/lib/write_xlsx/worksheet/drawing_relations.rb +76 -0
  103. data/lib/write_xlsx/worksheet/drawing_xml_writer.rb +50 -0
  104. data/lib/write_xlsx/worksheet/formatting.rb +418 -0
  105. data/lib/write_xlsx/worksheet/hyperlink.rb +9 -1
  106. data/lib/write_xlsx/worksheet/initialization.rb +146 -0
  107. data/lib/write_xlsx/worksheet/panes.rb +64 -0
  108. data/lib/write_xlsx/worksheet/print_options.rb +72 -0
  109. data/lib/write_xlsx/worksheet/protection.rb +65 -0
  110. data/lib/write_xlsx/worksheet/rich_text_helpers.rb +78 -0
  111. data/lib/write_xlsx/worksheet/row_col_sizing.rb +69 -0
  112. data/lib/write_xlsx/worksheet/rows.rb +84 -0
  113. data/lib/write_xlsx/worksheet/selection.rb +41 -0
  114. data/lib/write_xlsx/worksheet/xml_writer.rb +1246 -0
  115. data/lib/write_xlsx/worksheet.rb +376 -4530
  116. metadata +66 -4
  117. data/lib/write_xlsx/utility.rb +0 -986
  118. data/lib/write_xlsx/worksheet/page_setup.rb +0 -192
@@ -0,0 +1,164 @@
1
+ # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+
4
+ module Writexlsx
5
+ class Workbook
6
+ module Initialization
7
+ #
8
+ # user must not use. it is internal method.
9
+ #
10
+ def assemble_xml_file # :nodoc:
11
+ return unless @writer
12
+
13
+ # Prepare format object for passing to Style.rb.
14
+ prepare_format_properties
15
+
16
+ write_xml_declaration do
17
+ # Write the root workbook element.
18
+ write_workbook do
19
+ # Write the XLSX file version.
20
+ write_file_version
21
+
22
+ # Write the fileSharing element.
23
+ write_file_sharing
24
+
25
+ # Write the workbook properties.
26
+ write_workbook_pr
27
+
28
+ # Write the workbook view properties.
29
+ write_book_views
30
+
31
+ # Write the worksheet names and ids.
32
+ @worksheets.write_sheets(@writer)
33
+
34
+ # Write the workbook defined names.
35
+ write_defined_names
36
+
37
+ # Write the workbook calculation properties.
38
+ write_calc_pr
39
+
40
+ # Write the workbook extension storage.
41
+ # write_ext_lst
42
+ end
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def write_workbook(&block) # :nodoc:
49
+ schema = 'http://schemas.openxmlformats.org'
50
+ attributes = [
51
+ ['xmlns',
52
+ schema + '/spreadsheetml/2006/main'],
53
+ ['xmlns:r',
54
+ schema + '/officeDocument/2006/relationships']
55
+ ]
56
+ @writer.tag_elements('workbook', attributes, &block)
57
+ end
58
+
59
+ def write_file_version # :nodoc:
60
+ attributes = [
61
+ %w[appName xl],
62
+ ['lastEdited', 4],
63
+ ['lowestEdited', 4],
64
+ ['rupBuild', 4505]
65
+ ]
66
+
67
+ attributes << [:codeName, '{37E998C4-C9E5-D4B9-71C8-EB1FF731991C}'] if @vba_project
68
+
69
+ @writer.empty_tag('fileVersion', attributes)
70
+ end
71
+
72
+ #
73
+ # Write the <fileSharing> element.
74
+ #
75
+ def write_file_sharing
76
+ return unless ptrue?(@read_only)
77
+
78
+ attributes = []
79
+ attributes << ['readOnlyRecommended', 1]
80
+ @writer.empty_tag('fileSharing', attributes)
81
+ end
82
+
83
+ def write_workbook_pr # :nodoc:
84
+ attributes = []
85
+ attributes << ['codeName', @vba_codename] if ptrue?(@vba_codename)
86
+ attributes << ['date1904', 1] if date_1904?
87
+ attributes << ['defaultThemeVersion', 124226]
88
+ @writer.empty_tag('workbookPr', attributes)
89
+ end
90
+
91
+ def write_book_views # :nodoc:
92
+ @writer.tag_elements('bookViews') { write_workbook_view }
93
+ end
94
+
95
+ def write_workbook_view # :nodoc:
96
+ attributes = [
97
+ ['xWindow', @x_window],
98
+ ['yWindow', @y_window],
99
+ ['windowWidth', @window_width],
100
+ ['windowHeight', @window_height]
101
+ ]
102
+ attributes << ['tabRatio', @tab_ratio] if @tab_ratio != 600
103
+ attributes << ['firstSheet', @firstsheet + 1] if @firstsheet > 0
104
+ attributes << ['activeTab', @activesheet] if @activesheet > 0
105
+ @writer.empty_tag('workbookView', attributes)
106
+ end
107
+
108
+ def write_calc_pr # :nodoc:
109
+ attributes = [['calcId', @calc_id]]
110
+
111
+ case @calc_mode
112
+ when 'manual'
113
+ attributes << %w[calcMode manual]
114
+ attributes << ['calcOnSave', 0]
115
+ when 'autoNoTable'
116
+ attributes << %w[calcMode autoNoTable]
117
+ end
118
+
119
+ attributes << ['fullCalcOnLoad', 1] if @calc_on_load
120
+
121
+ @writer.empty_tag('calcPr', attributes)
122
+ end
123
+
124
+ def write_ext_lst # :nodoc:
125
+ @writer.tag_elements('extLst') { write_ext }
126
+ end
127
+
128
+ def write_ext # :nodoc:
129
+ attributes = [
130
+ ['xmlns:mx', "#{OFFICE_URL}mac/excel/2008/main"],
131
+ ['uri', uri]
132
+ ]
133
+ @writer.tag_elements('ext', attributes) { write_mx_arch_id }
134
+ end
135
+
136
+ def write_mx_arch_id # :nodoc:
137
+ @writer.empty_tag('mx:ArchID', ['Flags', 2])
138
+ end
139
+
140
+ def write_defined_names # :nodoc:
141
+ return unless ptrue?(@defined_names)
142
+
143
+ @writer.tag_elements('definedNames') do
144
+ @defined_names.each { |defined_name| write_defined_name(defined_name) }
145
+ end
146
+ end
147
+
148
+ def write_defined_name(defined_name) # :nodoc:
149
+ name, id, range, hidden = defined_name
150
+
151
+ attributes = [['name', name]]
152
+ attributes << ['localSheetId', id.to_s] unless id == -1
153
+ attributes << %w[hidden 1] if hidden
154
+
155
+ @writer.data_element('definedName', range, attributes)
156
+ end
157
+
158
+ def write_io(str) # :nodoc:
159
+ @writer << str
160
+ str
161
+ end
162
+ end
163
+ end
164
+ end