write_xlsx 0.90.0 → 0.97.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 (135) hide show
  1. checksums.yaml +4 -4
  2. data/Changes +37 -0
  3. data/README.md +1 -1
  4. data/examples/a_simple.rb +1 -6
  5. data/examples/conditional_format.rb +73 -46
  6. data/examples/demo.rb +1 -7
  7. data/examples/hyperlink1.rb +4 -11
  8. data/lib/write_xlsx/chart.rb +81 -205
  9. data/lib/write_xlsx/chart/axis.rb +2 -2
  10. data/lib/write_xlsx/chart/caption.rb +3 -1
  11. data/lib/write_xlsx/chart/pie.rb +2 -0
  12. data/lib/write_xlsx/chart/series.rb +11 -7
  13. data/lib/write_xlsx/format.rb +15 -11
  14. data/lib/write_xlsx/package/conditional_format.rb +351 -38
  15. data/lib/write_xlsx/package/content_types.rb +10 -0
  16. data/lib/write_xlsx/package/custom.rb +125 -0
  17. data/lib/write_xlsx/package/packager.rb +26 -0
  18. data/lib/write_xlsx/package/styles.rb +53 -21
  19. data/lib/write_xlsx/package/table.rb +11 -4
  20. data/lib/write_xlsx/utility.rb +234 -34
  21. data/lib/write_xlsx/version.rb +1 -1
  22. data/lib/write_xlsx/workbook.rb +88 -1
  23. data/lib/write_xlsx/worksheet.rb +247 -23
  24. data/test/helper.rb +6 -1
  25. data/test/regression/_test_hyperlink31.rb +26 -0
  26. data/test/regression/images/zero_dpi.jpg +0 -0
  27. data/test/regression/test_chart_bar08.rb +3 -0
  28. data/test/regression/test_chart_bar11.rb +3 -0
  29. data/test/regression/test_chart_bar14.rb +3 -0
  30. data/test/regression/test_chart_chartarea05.rb +16 -17
  31. data/test/regression/test_chart_chartarea06.rb +49 -0
  32. data/test/regression/test_chart_data_labels25.rb +61 -0
  33. data/test/regression/test_chart_format26.rb +48 -0
  34. data/test/regression/test_chart_format27.rb +58 -0
  35. data/test/regression/test_chart_format28.rb +52 -0
  36. data/test/regression/test_chart_format29.rb +59 -0
  37. data/test/regression/test_chart_format30.rb +53 -0
  38. data/test/regression/test_chart_format31.rb +60 -0
  39. data/test/regression/test_chart_table03.rb +56 -0
  40. data/test/regression/test_cond_format14.rb +42 -0
  41. data/test/regression/test_cond_format15.rb +53 -0
  42. data/test/regression/test_cond_format16.rb +53 -0
  43. data/test/regression/test_cond_format17.rb +37 -0
  44. data/test/regression/test_cond_format18.rb +136 -0
  45. data/test/regression/test_date_1904_01.rb +1 -1
  46. data/test/regression/test_escapes04.rb +3 -0
  47. data/test/regression/test_escapes05.rb +3 -0
  48. data/test/regression/test_escapes07.rb +3 -0
  49. data/test/regression/test_escapes08.rb +3 -0
  50. data/test/regression/test_hyperlink01.rb +3 -0
  51. data/test/regression/test_hyperlink02.rb +3 -0
  52. data/test/regression/test_hyperlink03.rb +4 -0
  53. data/test/regression/test_hyperlink04.rb +3 -0
  54. data/test/regression/test_hyperlink05.rb +3 -0
  55. data/test/regression/test_hyperlink06.rb +3 -0
  56. data/test/regression/test_hyperlink07.rb +3 -0
  57. data/test/regression/test_hyperlink08.rb +3 -0
  58. data/test/regression/test_hyperlink09.rb +3 -0
  59. data/test/regression/test_hyperlink10.rb +3 -0
  60. data/test/regression/test_hyperlink11.rb +3 -0
  61. data/test/regression/test_hyperlink12.rb +3 -0
  62. data/test/regression/test_hyperlink13.rb +3 -0
  63. data/test/regression/test_hyperlink14.rb +3 -0
  64. data/test/regression/test_hyperlink15.rb +3 -0
  65. data/test/regression/test_hyperlink16.rb +3 -0
  66. data/test/regression/test_hyperlink17.rb +3 -0
  67. data/test/regression/test_hyperlink18.rb +3 -0
  68. data/test/regression/test_hyperlink20.rb +3 -0
  69. data/test/regression/test_hyperlink21.rb +3 -0
  70. data/test/regression/test_hyperlink22.rb +3 -0
  71. data/test/regression/test_hyperlink23.rb +3 -0
  72. data/test/regression/test_hyperlink24.rb +3 -0
  73. data/test/regression/test_hyperlink25.rb +3 -0
  74. data/test/regression/test_hyperlink26.rb +3 -0
  75. data/test/regression/test_hyperlink27.rb +3 -0
  76. data/test/regression/test_hyperlink28.rb +50 -0
  77. data/test/regression/test_hyperlink29.rb +27 -0
  78. data/test/regression/test_hyperlink30.rb +36 -0
  79. data/test/regression/test_image35.rb +26 -0
  80. data/test/regression/test_properties01.rb +1 -4
  81. data/test/regression/test_properties02.rb +1 -4
  82. data/test/regression/test_properties03.rb +26 -0
  83. data/test/regression/test_properties04.rb +61 -0
  84. data/test/regression/test_properties05.rb +30 -0
  85. data/test/regression/test_table03.rb +3 -0
  86. data/test/regression/test_table04.rb +3 -0
  87. data/test/regression/test_table05.rb +3 -0
  88. data/test/regression/test_table06.rb +3 -0
  89. data/test/regression/test_table20.rb +34 -0
  90. data/test/regression/test_table21.rb +36 -0
  91. data/test/regression/test_table22.rb +32 -0
  92. data/test/regression/xlsx_files/chart_chartarea05.xlsx +0 -0
  93. data/test/regression/xlsx_files/chart_chartarea06.xlsx +0 -0
  94. data/test/regression/xlsx_files/chart_data_labels25.xlsx +0 -0
  95. data/test/regression/xlsx_files/chart_format26.xlsx +0 -0
  96. data/test/regression/xlsx_files/chart_format27.xlsx +0 -0
  97. data/test/regression/xlsx_files/chart_format28.xlsx +0 -0
  98. data/test/regression/xlsx_files/chart_format29.xlsx +0 -0
  99. data/test/regression/xlsx_files/chart_format30.xlsx +0 -0
  100. data/test/regression/xlsx_files/chart_format31.xlsx +0 -0
  101. data/test/regression/xlsx_files/chart_table03.xlsx +0 -0
  102. data/test/regression/xlsx_files/cond_format14.xlsx +0 -0
  103. data/test/regression/xlsx_files/cond_format15.xlsx +0 -0
  104. data/test/regression/xlsx_files/cond_format16.xlsx +0 -0
  105. data/test/regression/xlsx_files/cond_format17.xlsx +0 -0
  106. data/test/regression/xlsx_files/cond_format18.xlsx +0 -0
  107. data/test/regression/xlsx_files/date_1904_01.xlsx +0 -0
  108. data/test/regression/xlsx_files/hyperlink28.xlsx +0 -0
  109. data/test/regression/xlsx_files/hyperlink29.xlsx +0 -0
  110. data/test/regression/xlsx_files/hyperlink30.xlsx +0 -0
  111. data/test/regression/xlsx_files/hyperlink31.xlsx +0 -0
  112. data/test/regression/xlsx_files/image35.xlsx +0 -0
  113. data/test/regression/xlsx_files/properties03.xlsx +0 -0
  114. data/test/regression/xlsx_files/properties04.xlsx +0 -0
  115. data/test/regression/xlsx_files/properties05.xlsx +0 -0
  116. data/test/regression/xlsx_files/table21.xlsx +0 -0
  117. data/test/regression/xlsx_files/table22.xlsx +0 -0
  118. data/test/workbook/test_write_workbook_view.rb +81 -0
  119. data/test/worksheet/test_cond_format_22.rb +266 -0
  120. data/test/worksheet/test_cond_format_23.rb +242 -0
  121. data/test/worksheet/test_cond_format_24.rb +303 -0
  122. data/test/worksheet/test_data_bar_01.rb +53 -0
  123. data/test/worksheet/test_data_bar_02.rb +79 -0
  124. data/test/worksheet/test_data_bar_03.rb +147 -0
  125. data/test/worksheet/test_data_bar_04.rb +145 -0
  126. data/test/worksheet/test_data_bar_05.rb +147 -0
  127. data/test/worksheet/test_data_bar_06.rb +145 -0
  128. data/test/worksheet/test_data_bar_07.rb +146 -0
  129. data/test/worksheet/test_data_bar_08.rb +54 -0
  130. data/test/worksheet/test_data_bar_09.rb +80 -0
  131. data/test/worksheet/test_data_bar_10.rb +165 -0
  132. data/test/worksheet/test_data_bar_11.rb +167 -0
  133. data/test/worksheet/test_data_bar_12.rb +104 -0
  134. data/test/worksheet/test_write_data_validation_02.rb +27 -0
  135. metadata +135 -2
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionImage35 < Minitest::Test
5
+ def setup
6
+ setup_dir_var
7
+ end
8
+
9
+ def teardown
10
+ @tempfile.close(true)
11
+ end
12
+
13
+ def test_image35
14
+ @xlsx = 'image35.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.insert_image(
19
+ 'E9',
20
+ File.join(@test_dir, 'regression', 'images/zero_dpi.jpg')
21
+ )
22
+
23
+ workbook.close
24
+ compare_for_regression
25
+ end
26
+ end
@@ -31,9 +31,6 @@ def test_properties01
31
31
  worksheet.write('A1', "Select 'Office Button -> Prepare -> Properties' to see the file properties.")
32
32
 
33
33
  workbook.close
34
- compare_for_regression(
35
- nil,
36
- { 'xl/workbook.xml' => ['<workbookView'] }
37
- )
34
+ compare_for_regression
38
35
  end
39
36
  end
@@ -20,9 +20,6 @@ def test_properties02
20
20
  )
21
21
 
22
22
  workbook.close
23
- compare_for_regression(
24
- nil,
25
- { 'xl/workbook.xml' => ['<workbookView'] }
26
- )
23
+ compare_for_regression
27
24
  end
28
25
  end
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionProperties03 < Minitest::Test
5
+ def setup
6
+ setup_dir_var
7
+ end
8
+
9
+ def teardown
10
+ @tempfile.close(true)
11
+ end
12
+
13
+ def test_properties03
14
+ @xlsx = 'properties03.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ workbook.set_custom_property('Checked by', 'Adam')
19
+
20
+ worksheet.set_column('A:A', 70)
21
+ worksheet.write('A1', "Select 'Office Button -> Prepare -> Properties' to see the file properties.")
22
+
23
+ workbook.close
24
+ compare_for_regression
25
+ end
26
+ end
@@ -0,0 +1,61 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionProperties04 < Minitest::Test
5
+ def setup
6
+ setup_dir_var
7
+ @long_string = 'This is a long string. ' * 11 + 'AA'
8
+ end
9
+
10
+ def teardown
11
+ @tempfile.close(true)
12
+ end
13
+
14
+ def test_properties04
15
+ @xlsx = 'properties04.xlsx'
16
+ workbook = WriteXLSX.new(@io)
17
+ worksheet = workbook.add_worksheet
18
+
19
+ workbook.set_custom_property('Checked by', 'Adam', 'text' )
20
+ workbook.set_custom_property('Date completed', '2016-12-12T23:00:00Z', 'date' )
21
+ workbook.set_custom_property('Document number', '12345' , 'number_int')
22
+ workbook.set_custom_property('Reference', '1.2345', 'number' )
23
+ workbook.set_custom_property('Source', true, 'bool' )
24
+ workbook.set_custom_property('Status', false, 'bool' )
25
+ workbook.set_custom_property('Department', @long_string, 'text' )
26
+ workbook.set_custom_property('Group', '1.2345678901234', 'number' )
27
+
28
+ worksheet.set_column('A:A', 70 )
29
+ worksheet.write(
30
+ 'A1',
31
+ "Select 'Office Button -> Prepare -> Properties' to see the file properties."
32
+ )
33
+
34
+ workbook.close
35
+ compare_for_regression
36
+ end
37
+
38
+ def test_properties04_2
39
+ @xlsx = 'properties04.xlsx'
40
+ workbook = WriteXLSX.new(@io)
41
+ worksheet = workbook.add_worksheet
42
+
43
+ workbook.set_custom_property('Checked by', 'Adam' )
44
+ workbook.set_custom_property('Date completed', '2016-12-12T23:00:00Z', 'date' )
45
+ workbook.set_custom_property('Document number', '12345' )
46
+ workbook.set_custom_property('Reference', '1.2345' )
47
+ workbook.set_custom_property('Source', 1, 'bool' )
48
+ workbook.set_custom_property('Status', nil, 'bool' )
49
+ workbook.set_custom_property('Department', @long_string )
50
+ workbook.set_custom_property('Group', '1.2345678901234' )
51
+
52
+ worksheet.set_column('A:A', 70 )
53
+ worksheet.write(
54
+ 'A1',
55
+ "Select 'Office Button -> Prepare -> Properties' to see the file properties."
56
+ )
57
+
58
+ workbook.close
59
+ compare_for_regression
60
+ end
61
+ end
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionProperties05 < Minitest::Test
5
+ def setup
6
+ setup_dir_var
7
+ @long_string = 'This is a long string. ' * 11 + 'AA'
8
+ end
9
+
10
+ def teardown
11
+ @tempfile.close(true)
12
+ end
13
+
14
+ def test_properties05
15
+ @xlsx = 'properties05.xlsx'
16
+ workbook = WriteXLSX.new(@io)
17
+ worksheet = workbook.add_worksheet
18
+
19
+ workbook.set_custom_property('Location', 'Café')
20
+
21
+ worksheet.set_column('A:A', 70 )
22
+ worksheet.write(
23
+ 'A1',
24
+ "Select 'Office Button -> Prepare -> Properties' to see the file properties."
25
+ )
26
+
27
+ workbook.close
28
+ compare_for_regression
29
+ end
30
+ end
@@ -21,6 +21,9 @@ def test_table03
21
21
  # Add the table.
22
22
  worksheet.add_table('C3:F13')
23
23
 
24
+ # Turn off default URL format for testing.
25
+ worksheet.instance_variable_set(:@default_url_format, nil)
26
+
24
27
  # Add a link to check rId handling.
25
28
  worksheet.write('A1', 'http://perl.com/')
26
29
 
@@ -21,6 +21,9 @@ def test_table04
21
21
  # Add the table.
22
22
  worksheet.add_table('C3:F13')
23
23
 
24
+ # Turn off default URL format for testing.
25
+ worksheet.instance_variable_set(:@default_url_format, nil)
26
+
24
27
  # Add a link to check rId handling.
25
28
  worksheet.write('A1', 'http://perl.com/')
26
29
 
@@ -21,6 +21,9 @@ def test_table05
21
21
  # Add the table.
22
22
  worksheet.add_table('C3:F13')
23
23
 
24
+ # Turn off default URL format for testing.
25
+ worksheet.instance_variable_set(:@default_url_format, nil)
26
+
24
27
  # Add a link to check rId handling.
25
28
  worksheet.write('A1', 'http://perl.com/')
26
29
 
@@ -23,6 +23,9 @@ def test_table06
23
23
  worksheet.add_table('F15:H20')
24
24
  worksheet.add_table('C23:D30')
25
25
 
26
+ # Turn off default URL format for testing.
27
+ worksheet.instance_variable_set(:@default_url_format, nil)
28
+
26
29
  # Add a link to check rId handling.
27
30
  worksheet.write('A1', 'http://perl.com/')
28
31
  worksheet.write('C1', 'http://perl.com/')
@@ -0,0 +1,34 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionTable20 < Minitest::Test
5
+ def setup
6
+ setup_dir_var
7
+ end
8
+
9
+ def teardown
10
+ @tempfile.close(true) if @tempfile
11
+ end
12
+
13
+ def test_table20
14
+ @xlsx = 'table01.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ # Set the column width to match the taget worksheet.
19
+ worksheet.set_column('C:F', 10.288)
20
+
21
+ # Add the table.
22
+ worksheet.add_table('C3:F13')
23
+
24
+ e = assert_raises RuntimeError do
25
+ worksheet.add_table(
26
+ 'C3:F7',
27
+ :columns => [ { :header => 'Column1' }, { :header => 'column1' }]
28
+ )
29
+ end
30
+ assert_match(/add_table\(\) contains duplicate name:/, e.message)
31
+
32
+ workbook.close
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionTable21 < Minitest::Test
5
+ def setup
6
+ setup_dir_var
7
+ end
8
+
9
+ def teardown
10
+ @tempfile.close(true) if @tempfile
11
+ end
12
+
13
+ def test_table21
14
+ @xlsx = 'table21.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.write('A1', 'Column')
19
+
20
+ # Set the column width to match the taget worksheet.
21
+ worksheet.set_column('C:D', 10.288)
22
+
23
+ # Add the table.
24
+ worksheet.add_table(
25
+ 'C3:D13',
26
+ {
27
+ :columns => [
28
+ { :header => "Column" }
29
+ ]
30
+ }
31
+ )
32
+
33
+ workbook.close
34
+ compare_for_regression
35
+ end
36
+ end
@@ -0,0 +1,32 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionTable22 < Minitest::Test
5
+ def setup
6
+ setup_dir_var
7
+ end
8
+
9
+ def teardown
10
+ @tempfile.close(true) if @tempfile
11
+ end
12
+
13
+ def test_table22
14
+ @xlsx = 'table22.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ data = [
19
+ ['apple', 'pie' ],
20
+ ['pine', 'tree']
21
+ ]
22
+
23
+ # Set the column width to match the taget worksheet.
24
+ worksheet.set_column('B:C', 10.288)
25
+
26
+ # Add the table.
27
+ worksheet.add_table('B2:C3', :data => data, :header_row => 0)
28
+
29
+ workbook.close
30
+ compare_for_regression
31
+ end
32
+ end
@@ -0,0 +1,81 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+ require 'write_xlsx'
4
+ require 'stringio'
5
+
6
+ class TestGetChartRange < Minitest::Test
7
+ def setup
8
+ @workbook = WriteXLSX.new(StringIO.new)
9
+ end
10
+
11
+ def test_write_workbook_view_1
12
+ expected = '<workbookView xWindow="240" yWindow="15" windowWidth="16095" windowHeight="9660"/>'
13
+ result = @workbook.__send__('write_workbook_view')
14
+
15
+ assert_equal(expected, result)
16
+ end
17
+
18
+ def test_write_workbook_view_second_tab_selected
19
+ expected = '<workbookView xWindow="240" yWindow="15" windowWidth="16095" windowHeight="9660" activeTab="1"/>'
20
+
21
+ @workbook.activesheet = 1
22
+ result = @workbook.__send__('write_workbook_view')
23
+
24
+ assert_equal(expected, result)
25
+ end
26
+
27
+ def test_write_workbook_view_second_tab_selected_first_sheet_set
28
+ expected = '<workbookView xWindow="240" yWindow="15" windowWidth="16095" windowHeight="9660" firstSheet="2" activeTab="1"/>'
29
+
30
+ @workbook.firstsheet = 1
31
+ @workbook.activesheet = 1
32
+ result = @workbook.__send__('write_workbook_view')
33
+
34
+ assert_equal(expected, result)
35
+ end
36
+
37
+ def test_write_workbook_view_with_set_size
38
+ expected = '<workbookView xWindow="240" yWindow="15" windowWidth="16095" windowHeight="9660"/>'
39
+
40
+ @workbook.set_size
41
+ result = @workbook.__send__('write_workbook_view')
42
+
43
+ assert_equal(expected, result)
44
+ end
45
+
46
+ def test_write_workbook_view_with_set_size_0_0
47
+ expected = '<workbookView xWindow="240" yWindow="15" windowWidth="16095" windowHeight="9660"/>'
48
+
49
+ @workbook.set_size(0, 0)
50
+ result = @workbook.__send__('write_workbook_view')
51
+
52
+ assert_equal(expected, result)
53
+ end
54
+
55
+ def test_write_workbook_view_with_set_size_1073_644
56
+ expected = '<workbookView xWindow="240" yWindow="15" windowWidth="16095" windowHeight="9660"/>'
57
+
58
+ @workbook.set_size(1073, 644)
59
+ result = @workbook.__send__('write_workbook_view')
60
+
61
+ assert_equal(expected, result)
62
+ end
63
+
64
+ def test_write_workbook_view_with_set_size_123_70
65
+ expected = '<workbookView xWindow="240" yWindow="15" windowWidth="1845" windowHeight="1050"/>'
66
+
67
+ @workbook.set_size(123, 70)
68
+ result = @workbook.__send__('write_workbook_view')
69
+
70
+ assert_equal(expected, result)
71
+ end
72
+
73
+ def test_write_workbook_view_with_set_size_719_490
74
+ expected = '<workbookView xWindow="240" yWindow="15" windowWidth="10785" windowHeight="7350"/>'
75
+
76
+ @workbook.set_size(719, 490)
77
+ result = @workbook.__send__('write_workbook_view')
78
+
79
+ assert_equal(expected, result)
80
+ end
81
+ end