write_xlsx 0.55.0 → 0.56.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.
- data/README.rdoc +21 -3
- data/lib/write_xlsx/chart.rb +7 -0
- data/lib/write_xlsx/chartsheet.rb +2 -0
- data/lib/write_xlsx/package/xml_writer_simple.rb +15 -5
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +4 -5
- data/lib/write_xlsx/worksheet.rb +2 -12
- data/test/regression/test_chart_gridlines01.rb +45 -0
- data/test/regression/test_chart_gridlines02.rb +50 -0
- data/test/regression/test_chart_gridlines03.rb +65 -0
- data/test/regression/test_chart_gridlines04.rb +45 -0
- data/test/regression/test_chart_name03.rb +1 -1
- data/test/regression/test_chart_order01.rb +57 -0
- data/test/regression/test_chart_order02.rb +57 -0
- data/test/regression/test_chart_order03.rb +62 -0
- data/test/regression/test_escapes06.rb +29 -0
- data/test/regression/xlsx_files/chart_gridlines01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_order01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_order03.xlsx +0 -0
- data/test/regression/xlsx_files/escapes06.xlsx +0 -0
- metadata +31 -1
data/README.rdoc
CHANGED
@@ -8,17 +8,18 @@ The WriteXLSX supports the following features:
|
|
8
8
|
* Multiple worksheets
|
9
9
|
* Strings and numbers
|
10
10
|
* Unicode text
|
11
|
-
*
|
11
|
+
* Cell formatting
|
12
12
|
* Formulas (including array formats)
|
13
|
-
*
|
14
|
-
* Embedded images
|
13
|
+
* Images
|
15
14
|
* Charts
|
16
15
|
* Autofilters
|
17
16
|
* Data validation
|
18
17
|
* Conditional formatting
|
19
18
|
* Tables
|
20
19
|
* Shapes
|
20
|
+
* Sparklines
|
21
21
|
* Hyperlinks
|
22
|
+
* Rich string formats
|
22
23
|
* Defined names
|
23
24
|
* Grouping/Outlines
|
24
25
|
* Cell comments
|
@@ -27,6 +28,20 @@ The WriteXLSX supports the following features:
|
|
27
28
|
|
28
29
|
write_xlsx uses the same interface as writeexcel gem.
|
29
30
|
|
31
|
+
== Installation
|
32
|
+
|
33
|
+
Add this line to your application's Gemfile:
|
34
|
+
|
35
|
+
gem 'writeexcel'
|
36
|
+
|
37
|
+
And then execute:
|
38
|
+
|
39
|
+
$ bundle
|
40
|
+
|
41
|
+
Or install it yourself as:
|
42
|
+
|
43
|
+
$ gem install writeexcel
|
44
|
+
|
30
45
|
== Synopsis
|
31
46
|
|
32
47
|
To write a string, a formatted string, a number and a formula to
|
@@ -59,6 +74,9 @@ the first worksheet in an Excel XML spreadsheet called ruby.xlsx:
|
|
59
74
|
workbook.close
|
60
75
|
|
61
76
|
== Recent change
|
77
|
+
2013-02-09 v0.56.0
|
78
|
+
Fix for issue where chart creation order had to be the same as the insertion order or charts would be out of sync.
|
79
|
+
Fixed issue where gridlines didn't work in Scatter and Stock charts.
|
62
80
|
|
63
81
|
2013-02-09 v0.55.0
|
64
82
|
Added Sparklines.
|
data/lib/write_xlsx/chart.rb
CHANGED
@@ -2178,6 +2178,9 @@ def write_cat_val_axis(params) # :nodoc:
|
|
2178
2178
|
# Write the c:axPos element.
|
2179
2179
|
write_axis_pos(position, y_axis[:_reverse])
|
2180
2180
|
|
2181
|
+
# Write the c:majorGridlines element.
|
2182
|
+
write_major_gridlines(x_axis[:_major_gridlines])
|
2183
|
+
|
2181
2184
|
# Write the axis title elements.
|
2182
2185
|
if title = x_axis[:_formula]
|
2183
2186
|
write_title_formula(title, y_axis[:_data_id], horiz, x_axis[:_name_font])
|
@@ -2277,6 +2280,10 @@ def write_date_axis(params) # :nodoc:
|
|
2277
2280
|
|
2278
2281
|
# Write the c:axPos element.
|
2279
2282
|
write_axis_pos(position, y_axis[:reverse])
|
2283
|
+
|
2284
|
+
# Write the c:majorGridlines element.
|
2285
|
+
write_major_gridlines(x_axis[:_major_gridlines])
|
2286
|
+
|
2280
2287
|
# Write the axis title elements.
|
2281
2288
|
if title = x_axis[:_formula]
|
2282
2289
|
write_title_formula(title, x_axis[:_data_id], nil, x_axis[:_name_font])
|
@@ -138,6 +138,8 @@ def show_hidden_data(*args)
|
|
138
138
|
# Set up chart/drawings.
|
139
139
|
#
|
140
140
|
def prepare_chart(index, chart_id, drawing_id) # :nodoc:
|
141
|
+
@chart.id = chart_id - 1
|
142
|
+
|
141
143
|
drawing = Drawing.new
|
142
144
|
@drawing = drawing
|
143
145
|
@drawing.orientation = @print_style.orientation
|
@@ -49,7 +49,7 @@ def empty_tag_encoded(tag, attr = [])
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def data_element(tag, data, attr = [])
|
52
|
-
tag_elements(tag, attr) { io_write("#{
|
52
|
+
tag_elements(tag, attr) { io_write("#{escape_data(data)}") }
|
53
53
|
end
|
54
54
|
|
55
55
|
#
|
@@ -67,7 +67,7 @@ def si_rich_element(data)
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def characters(data)
|
70
|
-
io_write(
|
70
|
+
io_write(escape_data(data))
|
71
71
|
end
|
72
72
|
|
73
73
|
def crlf
|
@@ -96,17 +96,27 @@ def key_val(key, val)
|
|
96
96
|
def key_vals(attr)
|
97
97
|
array = []
|
98
98
|
(0 .. attr.size-1).step(2) do |i|
|
99
|
-
array << key_val(attr[i],
|
99
|
+
array << key_val(attr[i], escape_attributes(attr[i+1]))
|
100
100
|
end
|
101
101
|
array.join('')
|
102
102
|
end
|
103
103
|
|
104
|
-
def
|
104
|
+
def escape_attributes(str = '')
|
105
|
+
return str if !(str =~ /["&<>]/)
|
106
|
+
|
107
|
+
str.
|
108
|
+
gsub(/&/, "&").
|
109
|
+
gsub(/"/, """).
|
110
|
+
gsub(/</, "<").
|
111
|
+
gsub(/>/, ">")
|
112
|
+
end
|
113
|
+
|
114
|
+
def escape_data(str = '')
|
105
115
|
if str =~ /[&<>"]/
|
106
116
|
str.gsub(/&/, '&').
|
107
117
|
gsub(/</, '<').
|
108
118
|
gsub(/>/, '>')
|
109
|
-
|
119
|
+
else
|
110
120
|
str
|
111
121
|
end
|
112
122
|
end
|
data/lib/write_xlsx/version.rb
CHANGED
data/lib/write_xlsx/workbook.rb
CHANGED
@@ -358,9 +358,6 @@ def add_chart(params = {})
|
|
358
358
|
chart = Chart.factory(type, params[:subtype])
|
359
359
|
chart.palette = @palette
|
360
360
|
|
361
|
-
# Get an incremental id to use for axes ids.
|
362
|
-
chart.id = @charts.size
|
363
|
-
|
364
361
|
# If the chart isn't embedded let the workbook control it.
|
365
362
|
if ptrue?(embedded)
|
366
363
|
chart.name = name if name
|
@@ -1638,8 +1635,6 @@ def prepare_drawings #:nodoc:
|
|
1638
1635
|
shape_count = sheet.shapes.size
|
1639
1636
|
next if chart_count + image_count + shape_count == 0
|
1640
1637
|
|
1641
|
-
sheet.sort_charts
|
1642
|
-
|
1643
1638
|
drawing_id += 1
|
1644
1639
|
|
1645
1640
|
(0 .. chart_count - 1).each do |index|
|
@@ -1665,6 +1660,10 @@ def prepare_drawings #:nodoc:
|
|
1665
1660
|
@drawings << drawing
|
1666
1661
|
end
|
1667
1662
|
|
1663
|
+
# Sort the workbook charts references into the order that the were
|
1664
|
+
# written from the worksheets above.
|
1665
|
+
@charts = @charts.sort_by { |chart| chart.id }
|
1666
|
+
|
1668
1667
|
@drawing_count = drawing_id
|
1669
1668
|
end
|
1670
1669
|
|
data/lib/write_xlsx/worksheet.rb
CHANGED
@@ -2797,17 +2797,6 @@ def insert_chart(*args)
|
|
2797
2797
|
@charts << [row, col, chart, x_offset, y_offset, scale_x, scale_y]
|
2798
2798
|
end
|
2799
2799
|
|
2800
|
-
#
|
2801
|
-
# Sort the worksheet charts into the order that they were created in rather
|
2802
|
-
# than the insertion order. This is ensure that the chart and drawing objects
|
2803
|
-
# written in the same order. The chart id is used to sort back into creation
|
2804
|
-
# order.
|
2805
|
-
#
|
2806
|
-
def sort_charts
|
2807
|
-
return if @charts.size < 2
|
2808
|
-
@charts = @charts.sort {|a, b| a[2].id <=> b[2].id}
|
2809
|
-
end
|
2810
|
-
|
2811
2800
|
#
|
2812
2801
|
# :call-seq:
|
2813
2802
|
# insert_image(row, column, filename [ , x, y, scale_x, scale_y ] )
|
@@ -3641,7 +3630,7 @@ def valid_table_parameter
|
|
3641
3630
|
private :valid_table_parameter
|
3642
3631
|
|
3643
3632
|
#
|
3644
|
-
#
|
3633
|
+
# Add sparklines to the worksheet.
|
3645
3634
|
#
|
3646
3635
|
def add_sparkline(param)
|
3647
3636
|
sparkline = {}
|
@@ -4652,6 +4641,7 @@ def prepare_chart(index, chart_id, drawing_id) # :nodoc:
|
|
4652
4641
|
drawing_type = 1
|
4653
4642
|
|
4654
4643
|
row, col, chart, x_offset, y_offset, scale_x, scale_y = @charts[index]
|
4644
|
+
chart.id = chart_id - 1
|
4655
4645
|
scale_x ||= 0
|
4656
4646
|
scale_y ||= 0
|
4657
4647
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestChartGridlines01 < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
setup_dir_var
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
File.delete(@xlsx) if File.exist?(@xlsx)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_chart_gridlines01
|
14
|
+
@xlsx = 'chart_gridlines01.xlsx'
|
15
|
+
workbook = WriteXLSX.new(@xlsx)
|
16
|
+
worksheet = workbook.add_worksheet
|
17
|
+
chart = workbook.add_chart(:type => 'column', :embedded => 1)
|
18
|
+
|
19
|
+
# For testing, copy the randomly generated axis ids in the target xls file.
|
20
|
+
chart.instance_variable_set(:@axis_ids, [67390848, 68472192])
|
21
|
+
|
22
|
+
data = [
|
23
|
+
[ 1, 2, 3, 4, 5 ],
|
24
|
+
[ 2, 4, 6, 8, 10 ],
|
25
|
+
[ 3, 6, 9, 12, 15 ]
|
26
|
+
]
|
27
|
+
|
28
|
+
worksheet.write('A1', data)
|
29
|
+
|
30
|
+
chart.add_series(:values => '=Sheet1!$A$1:$A$5')
|
31
|
+
chart.add_series(:values => '=Sheet1!$B$1:$B$5')
|
32
|
+
chart.add_series(:values => '=Sheet1!$C$1:$C$5')
|
33
|
+
|
34
|
+
chart.set_x_axis(:major_gridlines => { :visible => 1 })
|
35
|
+
chart.set_y_axis(:major_gridlines => { :visible => 0 })
|
36
|
+
|
37
|
+
worksheet.insert_chart('E9', chart)
|
38
|
+
|
39
|
+
workbook.close
|
40
|
+
compare_xlsx_for_regression(
|
41
|
+
File.join(@regression_output, @xlsx),
|
42
|
+
@xlsx
|
43
|
+
)
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestChartGridlines02 < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
setup_dir_var
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
File.delete(@xlsx) if File.exist?(@xlsx)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_chart_gridlines02
|
14
|
+
@xlsx = 'chart_gridlines02.xlsx'
|
15
|
+
workbook = WriteXLSX.new(@xlsx)
|
16
|
+
worksheet = workbook.add_worksheet
|
17
|
+
chart = workbook.add_chart(:type => 'scatter', :embedded => 1)
|
18
|
+
|
19
|
+
# For testing, copy the randomly generated axis ids in the target xls file.
|
20
|
+
chart.instance_variable_set(:@axis_ids, [57940608, 57938688])
|
21
|
+
|
22
|
+
data = [
|
23
|
+
[ 1, 2, 3, 4, 5 ],
|
24
|
+
[ 2, 4, 6, 8, 10 ],
|
25
|
+
[ 3, 6, 9, 12, 15 ]
|
26
|
+
]
|
27
|
+
|
28
|
+
worksheet.write('A1', data)
|
29
|
+
|
30
|
+
chart.add_series(
|
31
|
+
:categories => '=Sheet1!$A$1:$A$5',
|
32
|
+
:values => '=Sheet1!$B$1:$B$5'
|
33
|
+
)
|
34
|
+
chart.add_series(
|
35
|
+
:categories => '=Sheet1!$A$1:$A$5',
|
36
|
+
:values => '=Sheet1!$C$1:$C$5'
|
37
|
+
)
|
38
|
+
|
39
|
+
chart.set_x_axis(:major_gridlines => { :visible => 1 })
|
40
|
+
chart.set_y_axis(:major_gridlines => { :visible => 0 })
|
41
|
+
|
42
|
+
worksheet.insert_chart('E9', chart)
|
43
|
+
|
44
|
+
workbook.close
|
45
|
+
compare_xlsx_for_regression(
|
46
|
+
File.join(@regression_output, @xlsx),
|
47
|
+
@xlsx
|
48
|
+
)
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestChartGridlines03 < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
setup_dir_var
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
File.delete(@xlsx) if File.exist?(@xlsx)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_chart_gridlines03
|
14
|
+
@xlsx = 'chart_gridlines03.xlsx'
|
15
|
+
workbook = WriteXLSX.new(@xlsx)
|
16
|
+
worksheet = workbook.add_worksheet
|
17
|
+
chart = workbook.add_chart(:type => 'stock', :embedded => 1)
|
18
|
+
data_format = workbook.add_format(:num_format => 14)
|
19
|
+
|
20
|
+
# For testing, copy the randomly generated axis ids in the target xls file.
|
21
|
+
chart.instance_variable_set(:@axis_ids, [54553600, 54977280])
|
22
|
+
|
23
|
+
data = [
|
24
|
+
[ '2007-01-01T', '2007-01-02T', '2007-01-03T', '2007-01-04T', '2007-01-05T' ],
|
25
|
+
[ 27.2, 25.03, 19.05, 20.34, 18.5 ],
|
26
|
+
[ 23.49, 19.55, 15.12, 17.84, 16.34 ],
|
27
|
+
[ 25.45, 23.05, 17.32, 20.45, 17.34 ]
|
28
|
+
]
|
29
|
+
|
30
|
+
(0..4).each do |row|
|
31
|
+
worksheet.write_date_time(row, 0, data[0][row], data_format)
|
32
|
+
worksheet.write(row, 1, data[1][row])
|
33
|
+
worksheet.write(row, 2, data[2][row])
|
34
|
+
worksheet.write(row, 3, data[3][row])
|
35
|
+
end
|
36
|
+
|
37
|
+
worksheet.set_column('A:D', 11)
|
38
|
+
|
39
|
+
chart.add_series(
|
40
|
+
:categories => '=Sheet1!$A$1:$A$5',
|
41
|
+
:values => '=Sheet1!$B$1:$B$5'
|
42
|
+
)
|
43
|
+
chart.add_series(
|
44
|
+
:categories => '=Sheet1!$A$1:$A$5',
|
45
|
+
:values => '=Sheet1!$C$1:$C$5'
|
46
|
+
)
|
47
|
+
chart.add_series(
|
48
|
+
:categories => '=Sheet1!$A$1:$A$5',
|
49
|
+
:values => '=Sheet1!$D$1:$D$5'
|
50
|
+
)
|
51
|
+
|
52
|
+
chart.set_x_axis(:major_gridlines => { :visible => 1 })
|
53
|
+
chart.set_y_axis(:major_gridlines => { :visible => 0 })
|
54
|
+
|
55
|
+
worksheet.insert_chart('E9', chart)
|
56
|
+
|
57
|
+
workbook.close
|
58
|
+
compare_xlsx_for_regression(
|
59
|
+
File.join(@regression_output, @xlsx),
|
60
|
+
@xlsx,
|
61
|
+
[],
|
62
|
+
{'xl/charts/chart1.xml' => ['<c:formatCode', '<c:pageMargins']}
|
63
|
+
)
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestChartGridlines04 < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
setup_dir_var
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
File.delete(@xlsx) if File.exist?(@xlsx)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_chart_gridlines04
|
14
|
+
@xlsx = 'chart_gridlines04.xlsx'
|
15
|
+
workbook = WriteXLSX.new(@xlsx)
|
16
|
+
worksheet = workbook.add_worksheet
|
17
|
+
chart = workbook.add_chart(:type => 'radar', :embedded => 1)
|
18
|
+
|
19
|
+
# For testing, copy the randomly generated axis ids in the target xls file.
|
20
|
+
chart.instance_variable_set(:@axis_ids, [54977280, 54978816])
|
21
|
+
|
22
|
+
data = [
|
23
|
+
[ 1, 2, 3, 4, 5 ],
|
24
|
+
[ 2, 4, 6, 8, 10 ],
|
25
|
+
[ 3, 6, 9, 12, 15 ]
|
26
|
+
]
|
27
|
+
|
28
|
+
worksheet.write('A1', data)
|
29
|
+
|
30
|
+
chart.add_series(:values => '=Sheet1!$A$1:$A$5')
|
31
|
+
chart.add_series(:values => '=Sheet1!$B$1:$B$5')
|
32
|
+
chart.add_series(:values => '=Sheet1!$C$1:$C$5')
|
33
|
+
|
34
|
+
chart.set_y_axis(:major_gridlines => { :visible => 0 })
|
35
|
+
chart.instance_variable_get(:@y_axis)[:_major_tick_mark] = 'cross'
|
36
|
+
|
37
|
+
worksheet.insert_chart('E9', chart)
|
38
|
+
|
39
|
+
workbook.close
|
40
|
+
compare_xlsx_for_regression(
|
41
|
+
File.join(@regression_output, @xlsx),
|
42
|
+
@xlsx
|
43
|
+
)
|
44
|
+
end
|
45
|
+
end
|
@@ -46,8 +46,8 @@ def test_chart_name03
|
|
46
46
|
chart2.add_series(:values => '=Sheet1!$B$1:$B$5')
|
47
47
|
chart2.add_series(:values => '=Sheet1!$C$1:$C$5')
|
48
48
|
|
49
|
-
worksheet.insert_chart('E24', chart2)
|
50
49
|
worksheet.insert_chart('E9', chart1)
|
50
|
+
worksheet.insert_chart('E24', chart2)
|
51
51
|
|
52
52
|
workbook.close
|
53
53
|
compare_xlsx_for_regression(
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestChartOrder01 < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
setup_dir_var
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
File.delete(@xlsx) if File.exist?(@xlsx)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_chart_order01
|
14
|
+
@xlsx = 'chart_order01.xlsx'
|
15
|
+
workbook = WriteXLSX.new(@xlsx)
|
16
|
+
worksheet1 = workbook.add_worksheet
|
17
|
+
worksheet2 = workbook.add_worksheet
|
18
|
+
worksheet3 = workbook.add_worksheet
|
19
|
+
|
20
|
+
chart1 = workbook.add_chart(:type => 'column', :embedded => 1)
|
21
|
+
chart2 = workbook.add_chart(:type => 'bar', :embedded => 1)
|
22
|
+
chart3 = workbook.add_chart(:type => 'line', :embedded => 1)
|
23
|
+
chart4 = workbook.add_chart(:type => 'pie', :embedded => 1)
|
24
|
+
|
25
|
+
# For testing, copy the randomly generated axis ids in the target xls file.
|
26
|
+
chart1.instance_variable_set(:@axis_ids, [54976896, 54978432])
|
27
|
+
chart2.instance_variable_set(:@axis_ids, [54310784, 54312320])
|
28
|
+
chart3.instance_variable_set(:@axis_ids, [69816704, 69818240])
|
29
|
+
chart4.instance_variable_set(:@axis_ids, [69816704, 69818240])
|
30
|
+
|
31
|
+
data = [
|
32
|
+
[ 1, 2, 3, 4, 5 ],
|
33
|
+
[ 2, 4, 6, 8, 10 ],
|
34
|
+
[ 3, 6, 9, 12, 15 ]
|
35
|
+
]
|
36
|
+
|
37
|
+
worksheet1.write('A1', data)
|
38
|
+
worksheet2.write('A1', data)
|
39
|
+
worksheet3.write('A1', data)
|
40
|
+
|
41
|
+
chart1.add_series(:values => '=Sheet1!$A$1:$A$5')
|
42
|
+
chart2.add_series(:values => '=Sheet2!$A$1:$A$5')
|
43
|
+
chart3.add_series(:values => '=Sheet3!$A$1:$A$5')
|
44
|
+
chart4.add_series(:values => '=Sheet1!$B$1:$B$5')
|
45
|
+
|
46
|
+
worksheet1.insert_chart('E9', chart1)
|
47
|
+
worksheet2.insert_chart('E9', chart2)
|
48
|
+
worksheet3.insert_chart('E9', chart3)
|
49
|
+
worksheet1.insert_chart('E24', chart4)
|
50
|
+
|
51
|
+
workbook.close
|
52
|
+
compare_xlsx_for_regression(
|
53
|
+
File.join(@regression_output, @xlsx),
|
54
|
+
@xlsx
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestChartOrder02 < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
setup_dir_var
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
File.delete(@xlsx) if File.exist?(@xlsx)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_chart_order02
|
14
|
+
@xlsx = 'chart_order01.xlsx'
|
15
|
+
workbook = WriteXLSX.new(@xlsx)
|
16
|
+
worksheet1 = workbook.add_worksheet
|
17
|
+
worksheet2 = workbook.add_worksheet
|
18
|
+
worksheet3 = workbook.add_worksheet
|
19
|
+
|
20
|
+
chart4 = workbook.add_chart(:type => 'pie', :embedded => 1)
|
21
|
+
chart3 = workbook.add_chart(:type => 'line', :embedded => 1)
|
22
|
+
chart2 = workbook.add_chart(:type => 'bar', :embedded => 1)
|
23
|
+
chart1 = workbook.add_chart(:type => 'column', :embedded => 1)
|
24
|
+
|
25
|
+
# For testing, copy the randomly generated axis ids in the target xls file.
|
26
|
+
chart1.instance_variable_set(:@axis_ids, [54976896, 54978432])
|
27
|
+
chart2.instance_variable_set(:@axis_ids, [54310784, 54312320])
|
28
|
+
chart3.instance_variable_set(:@axis_ids, [69816704, 69818240])
|
29
|
+
chart4.instance_variable_set(:@axis_ids, [69816704, 69818240])
|
30
|
+
|
31
|
+
data = [
|
32
|
+
[ 1, 2, 3, 4, 5 ],
|
33
|
+
[ 2, 4, 6, 8, 10 ],
|
34
|
+
[ 3, 6, 9, 12, 15 ]
|
35
|
+
]
|
36
|
+
|
37
|
+
worksheet1.write('A1', data)
|
38
|
+
worksheet2.write('A1', data)
|
39
|
+
worksheet3.write('A1', data)
|
40
|
+
|
41
|
+
chart1.add_series(:values => '=Sheet1!$A$1:$A$5')
|
42
|
+
chart2.add_series(:values => '=Sheet2!$A$1:$A$5')
|
43
|
+
chart3.add_series(:values => '=Sheet3!$A$1:$A$5')
|
44
|
+
chart4.add_series(:values => '=Sheet1!$B$1:$B$5')
|
45
|
+
|
46
|
+
worksheet1.insert_chart('E9', chart1)
|
47
|
+
worksheet2.insert_chart('E9', chart2)
|
48
|
+
worksheet3.insert_chart('E9', chart3)
|
49
|
+
worksheet1.insert_chart('E24', chart4)
|
50
|
+
|
51
|
+
workbook.close
|
52
|
+
compare_xlsx_for_regression(
|
53
|
+
File.join(@regression_output, @xlsx),
|
54
|
+
@xlsx
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestChartOrder03 < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
setup_dir_var
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
File.delete(@xlsx) if File.exist?(@xlsx)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_chart_order03
|
14
|
+
@xlsx = 'chart_order03.xlsx'
|
15
|
+
workbook = WriteXLSX.new(@xlsx)
|
16
|
+
worksheet1 = workbook.add_worksheet
|
17
|
+
worksheet2 = workbook.add_worksheet
|
18
|
+
chart2 = workbook.add_chart(:type => 'bar')
|
19
|
+
worksheet3 = workbook.add_worksheet
|
20
|
+
|
21
|
+
chart4 = workbook.add_chart(:type => 'pie', :embedded => 1)
|
22
|
+
chart3 = workbook.add_chart(:type => 'line', :embedded => 1)
|
23
|
+
chart1 = workbook.add_chart(:type => 'column', :embedded => 1)
|
24
|
+
|
25
|
+
# For testing, copy the randomly generated axis ids in the target xls file.
|
26
|
+
chart1.instance_variable_set(:@axis_ids, [67913600, 68169088])
|
27
|
+
chart2.instance_variable_get(:@chart).
|
28
|
+
instance_variable_set(:@axis_ids, [58117120, 67654400])
|
29
|
+
chart3.instance_variable_set(:@axis_ids, [58109952, 68215936])
|
30
|
+
|
31
|
+
data = [
|
32
|
+
[ 1, 2, 3, 4, 5 ],
|
33
|
+
[ 2, 4, 6, 8, 10 ],
|
34
|
+
[ 3, 6, 9, 12, 15 ]
|
35
|
+
]
|
36
|
+
|
37
|
+
worksheet1.write('A1', data)
|
38
|
+
worksheet2.write('A1', data)
|
39
|
+
worksheet3.write('A1', data)
|
40
|
+
|
41
|
+
chart1.add_series(:values => '=Sheet1!$A$1:$A$5')
|
42
|
+
chart2.add_series(:values => '=Sheet2!$A$1:$A$5')
|
43
|
+
chart3.add_series(:values => '=Sheet3!$A$1:$A$5')
|
44
|
+
chart4.add_series(:values => '=Sheet1!$B$1:$B$5')
|
45
|
+
|
46
|
+
worksheet1.insert_chart('E9', chart1)
|
47
|
+
worksheet3.insert_chart('E9', chart3)
|
48
|
+
worksheet1.insert_chart('E24', chart4)
|
49
|
+
|
50
|
+
workbook.close
|
51
|
+
compare_xlsx_for_regression(
|
52
|
+
File.join(@regression_output, @xlsx),
|
53
|
+
@xlsx,
|
54
|
+
[],
|
55
|
+
{
|
56
|
+
'xl/charts/chart1.xml' => [ '<c:formatCode', '<c:pageMargins' ],
|
57
|
+
'xl/charts/chart2.xml' => [ '<c:formatCode', '<c:pageMargins' ],
|
58
|
+
'xl/charts/chart4.xml' => [ '<c:formatCode', '<c:pageMargins' ]
|
59
|
+
}
|
60
|
+
)
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestRegressionEscapes06 < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
setup_dir_var
|
7
|
+
end
|
8
|
+
|
9
|
+
def teardown
|
10
|
+
File.delete(@xlsx) if File.exist?(@xlsx)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_chart_escapes06
|
14
|
+
@xlsx = 'escapes06.xlsx'
|
15
|
+
workbook = WriteXLSX.new(@xlsx)
|
16
|
+
worksheet = workbook.add_worksheet
|
17
|
+
num_format = workbook.add_format(:num_format => '[Red]0.0%\\ "a"')
|
18
|
+
|
19
|
+
worksheet.set_column('A:A', 14)
|
20
|
+
|
21
|
+
worksheet.write('A1', 123, num_format)
|
22
|
+
|
23
|
+
workbook.close
|
24
|
+
compare_xlsx_for_regression(
|
25
|
+
File.join(@regression_output, @xlsx),
|
26
|
+
@xlsx
|
27
|
+
)
|
28
|
+
end
|
29
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: write_xlsx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.56.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -421,11 +421,18 @@ files:
|
|
421
421
|
- test/regression/test_chart_format16.rb
|
422
422
|
- test/regression/test_chart_format17.rb
|
423
423
|
- test/regression/test_chart_format18.rb
|
424
|
+
- test/regression/test_chart_gridlines01.rb
|
425
|
+
- test/regression/test_chart_gridlines02.rb
|
426
|
+
- test/regression/test_chart_gridlines03.rb
|
427
|
+
- test/regression/test_chart_gridlines04.rb
|
424
428
|
- test/regression/test_chart_line01.rb
|
425
429
|
- test/regression/test_chart_line02.rb
|
426
430
|
- test/regression/test_chart_name01.rb
|
427
431
|
- test/regression/test_chart_name02.rb
|
428
432
|
- test/regression/test_chart_name03.rb
|
433
|
+
- test/regression/test_chart_order01.rb
|
434
|
+
- test/regression/test_chart_order02.rb
|
435
|
+
- test/regression/test_chart_order03.rb
|
429
436
|
- test/regression/test_chart_pie01.rb
|
430
437
|
- test/regression/test_chart_radar01.rb
|
431
438
|
- test/regression/test_chart_radar02.rb
|
@@ -480,6 +487,7 @@ files:
|
|
480
487
|
- test/regression/test_escapes03.rb
|
481
488
|
- test/regression/test_escapes04.rb
|
482
489
|
- test/regression/test_escapes05.rb
|
490
|
+
- test/regression/test_escapes06.rb
|
483
491
|
- test/regression/test_fit_to_pages01.rb
|
484
492
|
- test/regression/test_fit_to_pages02.rb
|
485
493
|
- test/regression/test_fit_to_pages03.rb
|
@@ -703,11 +711,17 @@ files:
|
|
703
711
|
- test/regression/xlsx_files/chart_format16.xlsx
|
704
712
|
- test/regression/xlsx_files/chart_format17.xlsx
|
705
713
|
- test/regression/xlsx_files/chart_format18.xlsx
|
714
|
+
- test/regression/xlsx_files/chart_gridlines01.xlsx
|
715
|
+
- test/regression/xlsx_files/chart_gridlines02.xlsx
|
716
|
+
- test/regression/xlsx_files/chart_gridlines03.xlsx
|
717
|
+
- test/regression/xlsx_files/chart_gridlines04.xlsx
|
706
718
|
- test/regression/xlsx_files/chart_line01.xlsx
|
707
719
|
- test/regression/xlsx_files/chart_line02.xlsx
|
708
720
|
- test/regression/xlsx_files/chart_name01.xlsx
|
709
721
|
- test/regression/xlsx_files/chart_name02.xlsx
|
710
722
|
- test/regression/xlsx_files/chart_name03.xlsx
|
723
|
+
- test/regression/xlsx_files/chart_order01.xlsx
|
724
|
+
- test/regression/xlsx_files/chart_order03.xlsx
|
711
725
|
- test/regression/xlsx_files/chart_pie01.xlsx
|
712
726
|
- test/regression/xlsx_files/chart_radar01.xlsx
|
713
727
|
- test/regression/xlsx_files/chart_radar02.xlsx
|
@@ -763,6 +777,7 @@ files:
|
|
763
777
|
- test/regression/xlsx_files/escapes03.xlsx
|
764
778
|
- test/regression/xlsx_files/escapes04.xlsx
|
765
779
|
- test/regression/xlsx_files/escapes05.xlsx
|
780
|
+
- test/regression/xlsx_files/escapes06.xlsx
|
766
781
|
- test/regression/xlsx_files/filehandle01.xlsx
|
767
782
|
- test/regression/xlsx_files/fit_to_pages01.xlsx
|
768
783
|
- test/regression/xlsx_files/fit_to_pages02.xlsx
|
@@ -1295,11 +1310,18 @@ test_files:
|
|
1295
1310
|
- test/regression/test_chart_format16.rb
|
1296
1311
|
- test/regression/test_chart_format17.rb
|
1297
1312
|
- test/regression/test_chart_format18.rb
|
1313
|
+
- test/regression/test_chart_gridlines01.rb
|
1314
|
+
- test/regression/test_chart_gridlines02.rb
|
1315
|
+
- test/regression/test_chart_gridlines03.rb
|
1316
|
+
- test/regression/test_chart_gridlines04.rb
|
1298
1317
|
- test/regression/test_chart_line01.rb
|
1299
1318
|
- test/regression/test_chart_line02.rb
|
1300
1319
|
- test/regression/test_chart_name01.rb
|
1301
1320
|
- test/regression/test_chart_name02.rb
|
1302
1321
|
- test/regression/test_chart_name03.rb
|
1322
|
+
- test/regression/test_chart_order01.rb
|
1323
|
+
- test/regression/test_chart_order02.rb
|
1324
|
+
- test/regression/test_chart_order03.rb
|
1303
1325
|
- test/regression/test_chart_pie01.rb
|
1304
1326
|
- test/regression/test_chart_radar01.rb
|
1305
1327
|
- test/regression/test_chart_radar02.rb
|
@@ -1354,6 +1376,7 @@ test_files:
|
|
1354
1376
|
- test/regression/test_escapes03.rb
|
1355
1377
|
- test/regression/test_escapes04.rb
|
1356
1378
|
- test/regression/test_escapes05.rb
|
1379
|
+
- test/regression/test_escapes06.rb
|
1357
1380
|
- test/regression/test_fit_to_pages01.rb
|
1358
1381
|
- test/regression/test_fit_to_pages02.rb
|
1359
1382
|
- test/regression/test_fit_to_pages03.rb
|
@@ -1577,11 +1600,17 @@ test_files:
|
|
1577
1600
|
- test/regression/xlsx_files/chart_format16.xlsx
|
1578
1601
|
- test/regression/xlsx_files/chart_format17.xlsx
|
1579
1602
|
- test/regression/xlsx_files/chart_format18.xlsx
|
1603
|
+
- test/regression/xlsx_files/chart_gridlines01.xlsx
|
1604
|
+
- test/regression/xlsx_files/chart_gridlines02.xlsx
|
1605
|
+
- test/regression/xlsx_files/chart_gridlines03.xlsx
|
1606
|
+
- test/regression/xlsx_files/chart_gridlines04.xlsx
|
1580
1607
|
- test/regression/xlsx_files/chart_line01.xlsx
|
1581
1608
|
- test/regression/xlsx_files/chart_line02.xlsx
|
1582
1609
|
- test/regression/xlsx_files/chart_name01.xlsx
|
1583
1610
|
- test/regression/xlsx_files/chart_name02.xlsx
|
1584
1611
|
- test/regression/xlsx_files/chart_name03.xlsx
|
1612
|
+
- test/regression/xlsx_files/chart_order01.xlsx
|
1613
|
+
- test/regression/xlsx_files/chart_order03.xlsx
|
1585
1614
|
- test/regression/xlsx_files/chart_pie01.xlsx
|
1586
1615
|
- test/regression/xlsx_files/chart_radar01.xlsx
|
1587
1616
|
- test/regression/xlsx_files/chart_radar02.xlsx
|
@@ -1637,6 +1666,7 @@ test_files:
|
|
1637
1666
|
- test/regression/xlsx_files/escapes03.xlsx
|
1638
1667
|
- test/regression/xlsx_files/escapes04.xlsx
|
1639
1668
|
- test/regression/xlsx_files/escapes05.xlsx
|
1669
|
+
- test/regression/xlsx_files/escapes06.xlsx
|
1640
1670
|
- test/regression/xlsx_files/filehandle01.xlsx
|
1641
1671
|
- test/regression/xlsx_files/fit_to_pages01.xlsx
|
1642
1672
|
- test/regression/xlsx_files/fit_to_pages02.xlsx
|