write_xlsx 0.81.1 → 0.83.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 (84) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +8 -0
  3. data/Changes +20 -0
  4. data/README.md +3 -2
  5. data/examples/chart_combined.rb +107 -0
  6. data/examples/chart_data_table.rb +1 -1
  7. data/examples/chart_pareto.rb +82 -0
  8. data/lib/write_xlsx/chart.rb +115 -42
  9. data/lib/write_xlsx/chart/axis.rb +5 -1
  10. data/lib/write_xlsx/chart/bar.rb +13 -0
  11. data/lib/write_xlsx/chart/pie.rb +7 -0
  12. data/lib/write_xlsx/chart/scatter.rb +25 -57
  13. data/lib/write_xlsx/format.rb +40 -0
  14. data/lib/write_xlsx/package/app.rb +39 -1
  15. data/lib/write_xlsx/package/comments.rb +1 -5
  16. data/lib/write_xlsx/package/content_types.rb +48 -13
  17. data/lib/write_xlsx/package/core.rb +14 -12
  18. data/lib/write_xlsx/package/packager.rb +17 -41
  19. data/lib/write_xlsx/package/styles.rb +215 -256
  20. data/lib/write_xlsx/package/table.rb +5 -7
  21. data/lib/write_xlsx/package/xml_writer_simple.rb +2 -0
  22. data/lib/write_xlsx/sheets.rb +2 -2
  23. data/lib/write_xlsx/utility.rb +17 -2
  24. data/lib/write_xlsx/version.rb +1 -1
  25. data/lib/write_xlsx/workbook.rb +44 -2
  26. data/lib/write_xlsx/worksheet.rb +26 -17
  27. data/lib/write_xlsx/worksheet/page_setup.rb +12 -6
  28. data/test/chart/test_write_style.rb +2 -2
  29. data/test/helper.rb +3 -0
  30. data/test/package/app/test_app01.rb +1 -1
  31. data/test/package/app/test_app02.rb +1 -1
  32. data/test/package/app/test_app03.rb +1 -1
  33. data/test/package/content_types/test_content_types.rb +1 -1
  34. data/test/package/content_types/test_write_default.rb +1 -1
  35. data/test/package/content_types/test_write_override.rb +1 -1
  36. data/test/perl_output/chart_combined.xlsx +0 -0
  37. data/test/perl_output/chart_pareto.xlsx +0 -0
  38. data/test/regression/test_button07.rb +5 -2
  39. data/test/regression/test_button13.rb +34 -0
  40. data/test/regression/test_button14.rb +31 -0
  41. data/test/regression/test_chart_column11.rb +45 -0
  42. data/test/regression/test_chart_column12.rb +45 -0
  43. data/test/regression/test_chart_combined01.rb +37 -0
  44. data/test/regression/test_chart_combined02.rb +43 -0
  45. data/test/regression/test_chart_combined03.rb +45 -0
  46. data/test/regression/test_chart_combined04.rb +47 -0
  47. data/test/regression/test_chart_combined05.rb +49 -0
  48. data/test/regression/test_chart_combined06.rb +49 -0
  49. data/test/regression/test_chart_combined07.rb +53 -0
  50. data/test/regression/test_chart_combined08.rb +65 -0
  51. data/test/regression/test_chart_data_labels24.rb +50 -0
  52. data/test/regression/test_chart_date05.rb +57 -0
  53. data/test/regression/test_chart_format20.rb +55 -0
  54. data/test/regression/test_format11.rb +28 -0
  55. data/test/regression/test_format12.rb +41 -0
  56. data/test/regression/test_landscape01.rb +27 -0
  57. data/test/regression/test_quote_name04.rb +40 -0
  58. data/test/regression/test_set_start_page01.rb +4 -7
  59. data/test/regression/test_set_start_page02.rb +33 -0
  60. data/test/regression/test_set_start_page03.rb +33 -0
  61. data/test/regression/test_table17.rb +70 -0
  62. data/test/regression/xlsx_files/chart_column11.xlsx +0 -0
  63. data/test/regression/xlsx_files/chart_column12.xlsx +0 -0
  64. data/test/regression/xlsx_files/chart_combined01.xlsx +0 -0
  65. data/test/regression/xlsx_files/chart_combined02.xlsx +0 -0
  66. data/test/regression/xlsx_files/chart_combined03.xlsx +0 -0
  67. data/test/regression/xlsx_files/chart_combined04.xlsx +0 -0
  68. data/test/regression/xlsx_files/chart_combined05.xlsx +0 -0
  69. data/test/regression/xlsx_files/chart_combined06.xlsx +0 -0
  70. data/test/regression/xlsx_files/chart_combined07.xlsx +0 -0
  71. data/test/regression/xlsx_files/chart_combined08.xlsx +0 -0
  72. data/test/regression/xlsx_files/chart_date05.xlsx +0 -0
  73. data/test/regression/xlsx_files/chart_format20.xlsx +0 -0
  74. data/test/regression/xlsx_files/format11.xlsx +0 -0
  75. data/test/regression/xlsx_files/format12.xlsx +0 -0
  76. data/test/regression/xlsx_files/landscape01.xlsx +0 -0
  77. data/test/regression/xlsx_files/quote_name04.xlsx +0 -0
  78. data/test/regression/xlsx_files/set_start_page01.xlsx +0 -0
  79. data/test/regression/xlsx_files/set_start_page02.xlsx +0 -0
  80. data/test/regression/xlsx_files/set_start_page03.xlsx +0 -0
  81. data/test/regression/xlsx_files/table17.xlsx +0 -0
  82. data/test/test_example_match.rb +172 -0
  83. data/write_xlsx.gemspec +1 -0
  84. metadata +106 -3
@@ -0,0 +1,45 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartColumn11 < 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_column11
14
+ @xlsx = 'chart_column11.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 xlsx file.
20
+ chart.instance_variable_set(:@axis_ids, [46847488, 46849408])
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_style(1)
35
+
36
+ worksheet.insert_chart('E9', chart)
37
+
38
+ workbook.close
39
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx),
40
+ @xlsx,
41
+ nil,
42
+ nil
43
+ )
44
+ end
45
+ end
@@ -0,0 +1,45 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartColumn12 < 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_column12
14
+ @xlsx = 'chart_column12.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 xlsx file.
20
+ chart.instance_variable_set(:@axis_ids, [46847488, 46849408])
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_style(48)
35
+
36
+ worksheet.insert_chart('E9', chart)
37
+
38
+ workbook.close
39
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx),
40
+ @xlsx,
41
+ nil,
42
+ nil
43
+ )
44
+ end
45
+ end
@@ -0,0 +1,37 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartCombined01 < 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_combined01
14
+ @xlsx = 'chart_combined01.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+ chart1 = workbook.add_chart(:type => 'column', :embedded => 1)
18
+
19
+ # For testing, copy the randomly generated axis ids in the target xlsx file.
20
+ chart1.instance_variable_set(:@axis_ids, [84882560, 84884096])
21
+
22
+ data = [
23
+ [ 2, 7, 3, 6, 2 ],
24
+ [ 20, 25, 10, 10, 20 ]
25
+ ]
26
+
27
+ worksheet.write('A1', data)
28
+
29
+ chart1.add_series(:values => '=Sheet1!$A$1:$A$5')
30
+ chart1.add_series(:values => '=Sheet1!$B$1:$B$5')
31
+
32
+ worksheet.insert_chart('E9', chart1)
33
+
34
+ workbook.close
35
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx)
36
+ end
37
+ end
@@ -0,0 +1,43 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartCombined02 < 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_combined02
14
+ @xlsx = 'chart_combined02.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+ chart1 = workbook.add_chart(:type => 'column', :embedded => 1)
18
+ chart2 = workbook.add_chart(:type => 'line', :embedded => 1)
19
+
20
+ # For testing, copy the randomly generated axis ids in the target xlsx file.
21
+ # For this test the ids match the generated ids.
22
+
23
+ data = [
24
+ [ 2, 7, 3, 6, 2 ],
25
+ [ 20, 25, 10, 10, 20 ]
26
+ ]
27
+
28
+ worksheet.write('A1', data)
29
+
30
+ chart1.add_series(:values => '=Sheet1!$A$1:$A$5')
31
+ chart2.add_series(:values => '=Sheet1!$B$1:$B$5')
32
+
33
+ chart1.combine(chart2)
34
+
35
+ worksheet.insert_chart('E9', chart1)
36
+
37
+ workbook.close
38
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
39
+ [],
40
+ { 'xl/charts/chart1.xml' => ['<c:dispBlanksAs'] }
41
+ )
42
+ end
43
+ end
@@ -0,0 +1,45 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartCombined03 < 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_combined03
14
+ @xlsx = 'chart_combined03.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+ chart1 = workbook.add_chart(:type => 'column', :embedded => 1)
18
+ chart2 = workbook.add_chart(:type => 'line', :embedded => 1)
19
+
20
+ # For testing, copy the randomly generated axis ids in the target xlsx file.
21
+ # For this test the ids match the generated ids.
22
+
23
+ data = [
24
+ [ 2, 7, 3, 6, 2],
25
+ [20, 25, 10, 10, 20],
26
+ [ 4, 2, 5, 2, 1]
27
+ ]
28
+
29
+ worksheet.write('A1', data)
30
+
31
+ chart1.add_series(:values => '=Sheet1!$A$1:$A$5')
32
+ chart1.add_series(:values => '=Sheet1!$B$1:$B$5')
33
+ chart2.add_series(:values => '=Sheet1!$C$1:$C$5')
34
+
35
+ chart1.combine(chart2)
36
+
37
+ worksheet.insert_chart('E9', chart1)
38
+
39
+ workbook.close
40
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
41
+ [],
42
+ { 'xl/charts/chart1.xml' => ['<c:dispBlanksAs'] }
43
+ )
44
+ end
45
+ end
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartCombined04 < 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_combined04
14
+ @xlsx = 'chart_combined04.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+ chart1 = workbook.add_chart(:type => 'column', :embedded => 1)
18
+ chart2 = workbook.add_chart(:type => 'line', :embedded => 1)
19
+
20
+ # For testing, copy the randomly generated axis ids in the target xlsx file.
21
+ # For this test the ids match the generated ids.
22
+
23
+ data = [
24
+ [ 2, 7, 3, 6, 2],
25
+ [20, 25, 10, 10, 20]
26
+ ]
27
+
28
+ worksheet.write('A1', data)
29
+
30
+ chart1.add_series(:values => '=Sheet1!$A$1:$A$5')
31
+ chart2.add_series(:values => '=Sheet1!$B$1:$B$5', :y2_axis => 1)
32
+
33
+ chart1.combine(chart2)
34
+
35
+ worksheet.insert_chart('E9', chart1)
36
+
37
+ workbook.close
38
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
39
+ [],
40
+ { 'xl/charts/chart1.xml' => [
41
+ '<c:dispBlanksAs',
42
+ '<c:tickLblPos',
43
+ '<c:crosses'
44
+ ] }
45
+ )
46
+ end
47
+ end
@@ -0,0 +1,49 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartCombined05 < 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_combined05
14
+ @xlsx = 'chart_combined05.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+ chart1 = workbook.add_chart(:type => 'bar', :embedded => 1)
18
+ chart2 = workbook.add_chart(:type => 'line', :embedded => 1)
19
+
20
+ # For testing, copy the randomly generated axis ids in the target xlsx file.
21
+ chart1.instance_variable_set(:@axis_ids, [60914304, 78899072])
22
+ chart2.instance_variable_set(:@axis2_ids, [85542016, 85183872])
23
+
24
+ data = [
25
+ [ 2, 7, 3, 6, 2],
26
+ [20, 25, 10, 10, 20]
27
+ ]
28
+
29
+ worksheet.write('A1', data)
30
+
31
+ chart1.add_series(:values => '=Sheet1!$A$1:$A$5')
32
+ chart2.add_series(:values => '=Sheet1!$B$1:$B$5', :y2_axis => 1)
33
+
34
+ chart1.combine(chart2)
35
+
36
+ worksheet.insert_chart('E9', chart1)
37
+
38
+ workbook.close
39
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
40
+ [],
41
+ { 'xl/charts/chart1.xml' => [
42
+ '<c:dispBlanksAs',
43
+ '<c:tickLblPos',
44
+ '<c:crosses',
45
+ '<c:axPos'
46
+ ] }
47
+ )
48
+ end
49
+ end
@@ -0,0 +1,49 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartCombined06 < 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_combined06
14
+ @xlsx = 'chart_combined06.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+ chart1 = workbook.add_chart(:type => 'area', :embedded => 1)
18
+ chart2 = workbook.add_chart(:type => 'column', :embedded => 1)
19
+
20
+ # For testing, copy the randomly generated axis ids in the target xlsx file.
21
+ chart1.instance_variable_set(:@axis_ids, [91755648, 91757952])
22
+ chart2.instance_variable_set(:@axis_ids, [91755648, 91757952])
23
+
24
+ data = [
25
+ [ 2, 7, 3, 6, 2],
26
+ [20, 25, 10, 10, 20]
27
+ ]
28
+
29
+ worksheet.write('A1', data)
30
+
31
+ chart1.add_series(:values => '=Sheet1!$A$1:$A$5')
32
+ chart2.add_series(:values => '=Sheet1!$B$1:$B$5')
33
+
34
+ chart1.combine(chart2)
35
+
36
+ # For testing
37
+ chart1.instance_variable_set(:@cross_between, 'between')
38
+
39
+ worksheet.insert_chart('E9', chart1)
40
+
41
+ workbook.close
42
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
43
+ [],
44
+ { 'xl/charts/chart1.xml' => [
45
+ '<c:dispBlanksAs'
46
+ ] }
47
+ )
48
+ end
49
+ end
@@ -0,0 +1,53 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartCombined07 < 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_combined07
14
+ @xlsx = 'chart_combined07.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+ chart1 = workbook.add_chart(:type => 'column', :embedded => 1)
18
+ chart2 = workbook.add_chart(:type => 'scatter', :embedded => 1)
19
+
20
+ # For testing, copy the randomly generated axis ids in the target xlsx file.
21
+ chart1.instance_variable_set(:@axis_ids, [81267328, 81297792])
22
+ chart2.instance_variable_set(:@axis_ids, [81267328, 81297792])
23
+
24
+ data = [
25
+ [ 2, 3, 4, 5, 6],
26
+ [20, 25, 10, 10, 20],
27
+ [ 5, 10, 15, 10, 5]
28
+ ]
29
+
30
+ worksheet.write('A1', data)
31
+
32
+ chart1.add_series(
33
+ :categories => '=Sheet1!$A$1:$A$5',
34
+ :values => '=Sheet1!$B$1:$B$5'
35
+ )
36
+ chart2.add_series(
37
+ :categories => '=Sheet1!$A$1:$A$5',
38
+ :values => '=Sheet1!$C$1:$C$5'
39
+ )
40
+
41
+ chart1.combine(chart2)
42
+
43
+ worksheet.insert_chart('E9', chart1)
44
+
45
+ workbook.close
46
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
47
+ [],
48
+ { 'xl/charts/chart1.xml' => [
49
+ '<c:dispBlanksAs'
50
+ ] }
51
+ )
52
+ end
53
+ end
@@ -0,0 +1,65 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartCombined08 < 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_combined08
14
+ @xlsx = 'chart_combined08.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+ chart1 = workbook.add_chart(:type => 'column', :embedded => 1)
18
+ chart2 = workbook.add_chart(:type => 'scatter', :embedded => 1)
19
+
20
+ # For testing, copy the randomly generated axis ids in the target xlsx file.
21
+ chart1.instance_variable_set(:@axis_ids, [81267328, 81297792])
22
+ chart2.instance_variable_set(:@axis_ids, [81267328, 81297792])
23
+ chart2.instance_variable_set(:@axis2_ids, [89510656, 84556032])
24
+
25
+ data = [
26
+ [ 2, 3, 4, 5, 6],
27
+ [20, 25, 10, 10, 20],
28
+ [ 5, 10, 15, 10, 5]
29
+ ]
30
+
31
+ worksheet.write('A1', data)
32
+
33
+ chart1.add_series(
34
+ :categories => '=Sheet1!$A$1:$A$5',
35
+ :values => '=Sheet1!$B$1:$B$5'
36
+ )
37
+ chart2.add_series(
38
+ :categories => '=Sheet1!$A$1:$A$5',
39
+ :values => '=Sheet1!$C$1:$C$5',
40
+ :y2_axis => 1
41
+ )
42
+
43
+ chart1.combine(chart2)
44
+
45
+ worksheet.insert_chart('E9', chart1)
46
+
47
+ workbook.close
48
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
49
+ [],
50
+ { 'xl/charts/chart1.xml' => [
51
+ '<c:dispBlanksAs',
52
+ '<c:crossBetween',
53
+ '<c:tickLblPos',
54
+ '<c:auto',
55
+ '<c:valAx>',
56
+ '<c:catAx>',
57
+ '</c:valAx>',
58
+ '</c:catAx>',
59
+ '<c:crosses',
60
+ '<c:lblOffset',
61
+ '<c:lblAlgn'
62
+ ] }
63
+ )
64
+ end
65
+ end