write_xlsx 0.64.1 → 0.65.0

Sign up to get free protection for your applications and to get access to all the features.
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