write_xlsx 0.64.1 → 0.65.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 (76) hide show
  1. checksums.yaml +4 -4
  2. data/README.rdoc +10 -1
  3. data/examples/conditional_format.rb +251 -18
  4. data/examples/demo.rb +2 -3
  5. data/examples/macros.rb +42 -0
  6. data/examples/outline_collapsed.rb +160 -0
  7. data/examples/republic.png +0 -0
  8. data/examples/shape3.rb +2 -2
  9. data/examples/shape4.rb +5 -5
  10. data/examples/shape5.rb +6 -6
  11. data/examples/shape6.rb +6 -6
  12. data/examples/shape7.rb +11 -11
  13. data/examples/shape8.rb +10 -10
  14. data/examples/shape_all.rb +0 -0
  15. data/examples/vbaProject.bin +0 -0
  16. data/lib/write_xlsx/chart.rb +656 -56
  17. data/lib/write_xlsx/chartsheet.rb +26 -2
  18. data/lib/write_xlsx/format.rb +50 -27
  19. data/lib/write_xlsx/formats.rb +32 -0
  20. data/lib/write_xlsx/package/packager.rb +45 -238
  21. data/lib/write_xlsx/package/table.rb +9 -18
  22. data/lib/write_xlsx/package/xml_writer_simple.rb +26 -9
  23. data/lib/write_xlsx/sheets.rb +223 -0
  24. data/lib/write_xlsx/sparkline.rb +140 -4
  25. data/lib/write_xlsx/version.rb +1 -1
  26. data/lib/write_xlsx/workbook.rb +34 -121
  27. data/lib/write_xlsx/worksheet/data_validation.rb +291 -0
  28. data/lib/write_xlsx/worksheet/hyperlink.rb +111 -0
  29. data/lib/write_xlsx/worksheet/page_setup.rb +170 -0
  30. data/lib/write_xlsx/worksheet.rb +1112 -1334
  31. data/test/helper.rb +1 -1
  32. data/test/package/styles/test_styles_01.rb +1 -10
  33. data/test/package/styles/test_styles_02.rb +1 -10
  34. data/test/package/styles/test_styles_03.rb +1 -10
  35. data/test/package/styles/test_styles_04.rb +1 -10
  36. data/test/package/styles/test_styles_05.rb +1 -10
  37. data/test/package/styles/test_styles_06.rb +1 -10
  38. data/test/package/styles/test_styles_07.rb +1 -10
  39. data/test/package/styles/test_styles_08.rb +1 -10
  40. data/test/package/styles/test_styles_09.rb +1 -10
  41. data/test/perl_output/conditional_format.xlsx +0 -0
  42. data/test/perl_output/outline_collapsed.xlsx +0 -0
  43. data/test/perl_output/protection.xlsx +0 -0
  44. data/test/regression/test_chart_gap01.rb +47 -0
  45. data/test/regression/test_chart_gap02.rb +47 -0
  46. data/test/regression/test_chart_gap03.rb +47 -0
  47. data/test/regression/test_format05.rb +26 -0
  48. data/test/regression/test_rich_string12.rb +32 -0
  49. data/test/regression/xlsx_files/chart_gap01.xlsx +0 -0
  50. data/test/regression/xlsx_files/chart_gap02.xlsx +0 -0
  51. data/test/regression/xlsx_files/chart_gap03.xlsx +0 -0
  52. data/test/regression/xlsx_files/format05.xlsx +0 -0
  53. data/test/regression/xlsx_files/rich_string12.xlsx +0 -0
  54. data/test/test_example_match.rb +253 -20
  55. data/test/worksheet/test_set_column.rb +25 -0
  56. data/test/worksheet/test_worksheet_03.rb +1 -1
  57. data/test/worksheet/test_worksheet_04.rb +1 -1
  58. data/test/worksheet/test_write_array_formula_01.rb +7 -0
  59. data/test/worksheet/test_write_col_breaks.rb +2 -2
  60. data/test/worksheet/test_write_col_info.rb +8 -8
  61. data/test/worksheet/test_write_conditional_formatting.rb +4 -4
  62. data/test/worksheet/test_write_formula_does_not_change_formula_string.rb +18 -0
  63. data/test/worksheet/test_write_header_footer.rb +8 -3
  64. data/test/worksheet/test_write_hyperlink.rb +10 -5
  65. data/test/worksheet/test_write_merge_cells.rb +6 -6
  66. data/test/worksheet/test_write_page_set_up_pr.rb +1 -1
  67. data/test/worksheet/test_write_page_setup.rb +1 -1
  68. data/test/worksheet/test_write_row_breaks.rb +2 -2
  69. data/test/worksheet/test_write_row_element.rb +1 -1
  70. data/test/worksheet/test_write_sheet_pr.rb +2 -2
  71. data/test/worksheet/test_write_sheet_view.rb +0 -9
  72. data/test/worksheet/test_write_url.rb +19 -0
  73. data/test/worksheet/test_write_worksheet_attributes.rb +21 -0
  74. metadata +38 -5
  75. data/lib/write_xlsx/worksheet/print_style.rb +0 -51
  76. data/test/worksheet/test_write_worksheet.rb +0 -19
@@ -0,0 +1,170 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module Writexlsx
4
+ class Worksheet
5
+ class PageSetup # :nodoc:
6
+ attr_accessor :margin_left, :margin_right, :margin_top, :margin_bottom # :nodoc:
7
+ attr_accessor :margin_header, :margin_footer # :nodoc:
8
+ attr_accessor :repeat_rows, :repeat_cols, :print_area # :nodoc:
9
+ attr_accessor :hbreaks, :vbreaks, :scale # :nodoc:
10
+ attr_accessor :fit_page, :fit_width, :fit_height, :page_setup_changed # :nodoc:
11
+ attr_writer :across # :nodoc:
12
+ attr_accessor :orientation, :print_options_changed # :nodoc:
13
+ attr_accessor :header, :footer, :header_footer_changed
14
+
15
+ def initialize # :nodoc:
16
+ @margin_left = 0.7
17
+ @margin_right = 0.7
18
+ @margin_top = 0.75
19
+ @margin_bottom = 0.75
20
+ @margin_header = 0.3
21
+ @margin_footer = 0.3
22
+ @repeat_rows = ''
23
+ @repeat_cols = ''
24
+ @print_area = ''
25
+ @hbreaks = []
26
+ @vbreaks = []
27
+ @scale = 100
28
+ @fit_page = false
29
+ @fit_width = nil
30
+ @fit_height = nil
31
+ @page_setup_changed = false
32
+ @across = false
33
+ @orientation = true
34
+ end
35
+
36
+ def paper=(paper_size)
37
+ if paper_size
38
+ @paper_size = paper_size
39
+ @page_setup_changed = true
40
+ end
41
+ end
42
+
43
+ def center_horizontally
44
+ @print_options_changed = true
45
+ @hcenter = true
46
+ end
47
+
48
+ def center_vertically
49
+ @print_options_changed = true
50
+ @vcenter = true
51
+ end
52
+
53
+ def print_row_col_headers(headers)
54
+ if headers
55
+ @print_headers = true
56
+ @print_options_changed = true
57
+ else
58
+ @print_headers = false
59
+ end
60
+ end
61
+
62
+ def hide_gridlines(option)
63
+ if option == 0 || !option
64
+ @print_gridlines = true
65
+ @print_options_changed = true
66
+ else
67
+ @print_gridlines = false
68
+ end
69
+ end
70
+
71
+ #
72
+ # Write the <pageSetup> element.
73
+ #
74
+ # The following is an example taken from Excel.
75
+ #
76
+ # <pageSetup
77
+ # paperSize="9"
78
+ # scale="110"
79
+ # fitToWidth="2"
80
+ # fitToHeight="2"
81
+ # pageOrder="overThenDown"
82
+ # orientation="portrait"
83
+ # blackAndWhite="1"
84
+ # draft="1"
85
+ # horizontalDpi="200"
86
+ # verticalDpi="200"
87
+ # r:id="rId1"
88
+ # />
89
+ #
90
+ def write_page_setup(writer) #:nodoc:
91
+ return unless @page_setup_changed
92
+
93
+ attributes = []
94
+ attributes << 'paperSize' << @paper_size if @paper_size
95
+ attributes << 'scale' << @scale if @scale != 100
96
+ attributes << 'fitToWidth' << @fit_width if @fit_page && @fit_width != 1
97
+ attributes << 'fitToHeight' << @fit_height if @fit_page && @fit_height != 1
98
+ attributes << 'pageOrder' << "overThenDown" if @across
99
+ attributes << 'orientation'
100
+ if @orientation
101
+ attributes << 'portrait'
102
+ else
103
+ attributes << 'landscape'
104
+ end
105
+
106
+ writer.empty_tag('pageSetup', attributes)
107
+ end
108
+
109
+ #
110
+ # Write the <pageMargins> element.
111
+ #
112
+ def write_page_margins(writer) #:nodoc:
113
+ writer.empty_tag('pageMargins', margin_attributes)
114
+ end
115
+
116
+ #
117
+ # Write the <printOptions> element.
118
+ #
119
+ def write_print_options(writer) #:nodoc:
120
+ return unless @print_options_changed
121
+
122
+ attributes = []
123
+ attributes << 'horizontalCentered' << 1 if @hcenter
124
+ attributes << 'verticalCentered' << 1 if @vcenter
125
+ attributes << 'headings' << 1 if @print_headers
126
+ attributes << 'gridLines' << 1 if @print_gridlines
127
+ writer.empty_tag('printOptions', attributes)
128
+ end
129
+
130
+ #
131
+ # Write the <headerFooter> element.
132
+ #
133
+ def write_header_footer(writer) #:nodoc:
134
+ return unless @header_footer_changed
135
+
136
+ writer.tag_elements('headerFooter') do
137
+ write_odd_header(writer) if @header && @header != ''
138
+ write_odd_footer(writer) if @footer && @footer != ''
139
+ end
140
+ end
141
+
142
+ private
143
+
144
+ #
145
+ # Write the <oddHeader> element.
146
+ #
147
+ def write_odd_header(writer) #:nodoc:
148
+ writer.data_element('oddHeader', @header)
149
+ end
150
+
151
+ #
152
+ # Write the <oddFooter> element.
153
+ #
154
+ def write_odd_footer(writer) #:nodoc:
155
+ writer.data_element('oddFooter', @footer)
156
+ end
157
+
158
+ def margin_attributes # :nodoc:
159
+ [
160
+ 'left', @margin_left,
161
+ 'right', @margin_right,
162
+ 'top', @margin_top,
163
+ 'bottom', @margin_bottom,
164
+ 'header', @margin_header,
165
+ 'footer', @margin_footer
166
+ ]
167
+ end
168
+ end
169
+ end
170
+ end