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,50 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartDataLabels24 < 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_data_labels24
14
+ @xlsx = 'chart_data_labels24.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, [45937792, 45939712])
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
+ :values => '=Sheet1!$A$1:$A$5',
32
+ :data_labels => {
33
+ :value => 1,
34
+ :font => { :name => 'Consolas', :size => 12, :baseline => -1, :pitch_family => 49, :charset => 0 }
35
+ }
36
+ )
37
+
38
+ chart.add_series(
39
+ :values => '=Sheet1!$B$1:$B$5',
40
+ :data_labels => { :value => 1, :position => 'inside_base' }
41
+ )
42
+
43
+ chart.add_series(:values => '=Sheet1!$C$1:$C$5')
44
+
45
+ worksheet.insert_chart('E9', chart)
46
+
47
+ workbook.close
48
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx)
49
+ end
50
+ end
@@ -0,0 +1,57 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartDate05 < 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_date05
14
+ @xlsx = 'chart_date05.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+ chart = workbook.add_chart(:type => 'line', :embedded => 1)
18
+ date_format = workbook.add_format(:num_format => 14)
19
+
20
+ # For testing, copy the randomly generated axis ids in the target xlsx file.
21
+ chart.instance_variable_set(:@axis_ids, [45937408, 45939328])
22
+
23
+ worksheet.set_column('A:A', 12)
24
+
25
+ dates = [
26
+ '2013-01-01T', '2013-01-02T', '2013-01-03T', '2013-01-04T',
27
+ '2013-01-05T', '2013-01-06T', '2013-01-07T', '2013-01-08T',
28
+ '2013-01-09T', '2013-01-10T'
29
+ ]
30
+
31
+ data = [10, 30, 20, 40, 20, 60, 50, 40, 30, 30]
32
+
33
+ dates.each_with_index do |date_time, row|
34
+ worksheet.write_date_time(row, 0, date_time, date_format)
35
+ worksheet.write(row, 1, data[row])
36
+ end
37
+
38
+ chart.add_series(
39
+ :categories => '=Sheet1!$A$1:$A$10',
40
+ :values => '=Sheet1!$B$1:$B$10'
41
+ )
42
+
43
+ chart.set_x_axis(
44
+ :num_format => 'dd/mm/yyyy',
45
+ :num_format_linked => 1,
46
+ :text_axis => 1
47
+ )
48
+
49
+ worksheet.insert_chart('E9', chart)
50
+
51
+ workbook.close
52
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
53
+ nil,
54
+ {'xl/charts/chart1.xml' => ['<c:formatCode']}
55
+ )
56
+ end
57
+ end
@@ -0,0 +1,55 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartFormat20 < 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_format20
14
+ @xlsx = 'chart_format20.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+ chart1 = workbook.add_chart(:type => 'line', :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, [80553856, 80555392])
22
+ chart2.instance_variable_set(:@axis_ids, [84583936, 84585856])
23
+
24
+ trend = {
25
+ :type => 'linear',
26
+ :line => {:color => 'red', :dash_type => 'dash'}
27
+ }
28
+
29
+ data = [
30
+ [ 1, 2, 3, 4, 5 ],
31
+ [ 2, 4, 6, 8, 10 ],
32
+ [ 3, 6, 9, 12, 15 ]
33
+ ]
34
+
35
+ worksheet.write('A1', data)
36
+
37
+ chart1.add_series(
38
+ :values => '=Sheet1!$B$1:$B$5',
39
+ :trendline => trend
40
+ )
41
+ chart1.add_series(:values => '=Sheet1!$C$1:$C$5')
42
+ chart2.add_series(
43
+ :values => '=Sheet1!$B$1:$B$5',
44
+ :trendline => trend
45
+ )
46
+ chart2.add_series(:values => '=Sheet1!$C$1:$C$5')
47
+
48
+ worksheet.insert_chart('E9', chart1)
49
+ worksheet.insert_chart('E25', chart2)
50
+
51
+ workbook.close
52
+ compare_xlsx_for_regression(
53
+ File.join(@regression_output, @xlsx), @xlsx)
54
+ end
55
+ end
@@ -0,0 +1,28 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionFormat11 < 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_format11
14
+ @xlsx = 'format11.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ centered = workbook.add_format(
19
+ :align => 'center',
20
+ :valign => 'vcenter'
21
+ )
22
+
23
+ worksheet.write('B2', "Foo", centered)
24
+
25
+ workbook.close
26
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx)
27
+ end
28
+ end
@@ -0,0 +1,41 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionFormat12 < 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_format12
14
+ @xlsx = 'format12.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ top_left_bottom = workbook.add_format(
19
+ :left => 1,
20
+ :top => 1,
21
+ :bottom => 1
22
+ )
23
+
24
+ top_bottom = workbook.add_format(
25
+ :top => 1,
26
+ :bottom => 1
27
+ )
28
+
29
+ top_left = workbook.add_format(
30
+ :left => 1,
31
+ :top => 1
32
+ )
33
+
34
+ worksheet.write('B2', 'test', top_left_bottom)
35
+ worksheet.write('D2', 'test', top_left)
36
+ worksheet.write('F2', 'test', top_bottom)
37
+
38
+ workbook.close
39
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx)
40
+ end
41
+ end
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionLandscape01 < 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_landscape01
14
+ @xlsx = 'landscape01.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.write(0, 0, 'Foo')
19
+ worksheet.set_landscape
20
+ worksheet.paper = 9
21
+
22
+ worksheet.vertical_dpi = 200
23
+
24
+ workbook.close
25
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx)
26
+ end
27
+ end
@@ -0,0 +1,40 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionQuoteName04 < 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_quote_name04
14
+ @xlsx = 'quote_name04.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+
17
+ data = [
18
+ [1, 2, 3, 4, 5],
19
+ [2, 4, 6, 8, 10],
20
+ [3, 6, 9, 12, 15]
21
+ ]
22
+
23
+ # Test quoted/non-quoted sheet names.
24
+ worksheet = workbook.add_worksheet('Sheet 1')
25
+ chart = workbook.add_chart(:type => 'pie', :embedded => 1)
26
+
27
+ worksheet.write( 'A1', data )
28
+ chart.add_series(
29
+ :values => ['Sheet 1', 0, 4, 0, 0],
30
+ :name => ['Sheet 1', 0, 0]
31
+ )
32
+
33
+ chart.set_title(:name => 'Foo')
34
+
35
+ worksheet.insert_chart('E9', chart)
36
+
37
+ workbook.close
38
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx)
39
+ end
40
+ end
@@ -15,21 +15,18 @@ def test_set_start_page01
15
15
  workbook = WriteXLSX.new(@xlsx)
16
16
  worksheet = workbook.add_worksheet
17
17
 
18
- worksheet.start_page = 1
18
+ worksheet.start_page = 1
19
19
  worksheet.paper = 9
20
20
 
21
+ worksheet.vertical_dpi = 200
22
+
21
23
  worksheet.write('A1', 'Foo')
22
24
 
23
25
  workbook.close
24
26
  compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
25
- [
26
- 'xl/printerSettings/printerSettings1.bin',
27
- 'xl/worksheets/_rels/sheet1.xml.rels'
28
- ],
27
+ [],
29
28
  {
30
- '[Content_Types].xml' => ['<Default Extension="bin"'],
31
29
  'xl/worksheets/sheet1.xml' => ['<pageMargins']
32
-
33
30
  }
34
31
  )
35
32
  end
@@ -0,0 +1,33 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionSetStartPage02 < 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_set_start_page02
14
+ @xlsx = 'set_start_page02.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.start_page = 2
19
+ worksheet.paper = 9
20
+
21
+ worksheet.vertical_dpi = 200
22
+
23
+ worksheet.write('A1', 'Foo')
24
+
25
+ workbook.close
26
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
27
+ [],
28
+ {
29
+ 'xl/worksheets/sheet1.xml' => ['<pageMargins']
30
+ }
31
+ )
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionSetStartPage03 < 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_set_start_page03
14
+ @xlsx = 'set_start_page03.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.start_page = 101
19
+ worksheet.paper = 9
20
+
21
+ worksheet.vertical_dpi = 200
22
+
23
+ worksheet.write('A1', 'Foo')
24
+
25
+ workbook.close
26
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
27
+ [],
28
+ {
29
+ 'xl/worksheets/sheet1.xml' => ['<pageMargins']
30
+ }
31
+ )
32
+ end
33
+ end
@@ -0,0 +1,70 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionTable17 < 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_table17
14
+ @xlsx = 'table17.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ # Set the column width to match the taget worksheet.
19
+ worksheet.set_column('B:K', 10.288)
20
+
21
+ # Write some strings to order the string table.
22
+ worksheet.write_string('A1', 'Column1')
23
+ worksheet.write_string('B1', 'Column2')
24
+ worksheet.write_string('C1', 'Column3')
25
+ worksheet.write_string('D1', 'Column4')
26
+ worksheet.write_string('E1', 'Column5')
27
+ worksheet.write_string('F1', 'Column6')
28
+ worksheet.write_string('G1', 'Column7')
29
+ worksheet.write_string('H1', 'Column8')
30
+ worksheet.write_string('I1', 'Column9')
31
+ worksheet.write_string('J1', 'Column10')
32
+ worksheet.write_string('K1', 'Total')
33
+
34
+ # Populate the data range.
35
+ data = [ 0, 0, 0, nil, nil, 0, 0, 0, 0, 0];
36
+ worksheet.write_row('B4', data)
37
+ worksheet.write_row('B5', data)
38
+
39
+ worksheet.write('G4', 4)
40
+ worksheet.write('G5', 5)
41
+ worksheet.write('I4', 1)
42
+ worksheet.write('I5', 2)
43
+
44
+ # Add the table.
45
+ worksheet.add_table(
46
+ 'B3:K6',
47
+ {
48
+ :total_row => 1,
49
+ :columns => [
50
+ {:total_string => 'Total'},
51
+ {},
52
+ {:total_function => 'Average'},
53
+ {:total_function => 'COUNT'},
54
+ {:total_function => 'count_nums'},
55
+ {:total_function => 'max', :total_value => 5},
56
+ {:total_function => 'min'},
57
+ {:total_function => 'sum', :total_value => 3},
58
+ {:total_function => 'std Dev'},
59
+ {:total_function => 'var'}
60
+ ]
61
+ }
62
+ )
63
+
64
+ workbook.close
65
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx,
66
+ ['xl/calcChain.xml', '[Content_Types].xml', 'xl/_rels/workbook.xml.rels'],
67
+ {'xl/workbook.xml' => ['<workbookView']}
68
+ )
69
+ end
70
+ end