write_xlsx 0.64.1 → 0.65.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 (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
data/test/helper.rb CHANGED
@@ -19,7 +19,7 @@ class Writexlsx::Workbook
19
19
  # Set the default index for each format. This is mainly used for testing.
20
20
  #
21
21
  def set_default_xf_indices #:nodoc:
22
- @formats.each { |format| format.get_xf_index }
22
+ @formats.formats.each { |format| format.get_xf_index }
23
23
  end
24
24
  end
25
25
 
@@ -9,16 +9,7 @@ class TestStyles01 < Test::Unit::TestCase
9
9
  workbook.__send__('prepare_format_properties')
10
10
 
11
11
  @style = Writexlsx::Package::Styles.new
12
- @style.set_style_properties(
13
- workbook.xf_formats,
14
- workbook.palette,
15
- workbook.font_count,
16
- workbook.num_format_count,
17
- workbook.border_count,
18
- workbook.fill_count,
19
- workbook.custom_colors,
20
- workbook.dxf_formats
21
- )
12
+ @style.set_style_properties(*workbook.style_properties)
22
13
  @style.assemble_xml_file
23
14
  result = got_to_array(@style.xml_str)
24
15
  expected = expected_to_array(<<EOS
@@ -16,16 +16,7 @@ class TestStyles02 < Test::Unit::TestCase
16
16
  workbook.__send__('prepare_format_properties')
17
17
 
18
18
  @style = Writexlsx::Package::Styles.new
19
- @style.set_style_properties(
20
- workbook.xf_formats,
21
- workbook.palette,
22
- workbook.font_count,
23
- workbook.num_format_count,
24
- workbook.border_count,
25
- workbook.fill_count,
26
- workbook.custom_colors,
27
- workbook.dxf_formats
28
- )
19
+ @style.set_style_properties(*workbook.style_properties)
29
20
  @style.assemble_xml_file
30
21
  result = got_to_array(@style.xml_str)
31
22
  expected = expected_to_array(<<EOS
@@ -16,16 +16,7 @@ class TestStyles03 < Test::Unit::TestCase
16
16
  workbook.__send__('prepare_format_properties')
17
17
 
18
18
  @style = Writexlsx::Package::Styles.new
19
- @style.set_style_properties(
20
- workbook.xf_formats,
21
- workbook.palette,
22
- workbook.font_count,
23
- workbook.num_format_count,
24
- workbook.border_count,
25
- workbook.fill_count,
26
- workbook.custom_colors,
27
- workbook.dxf_formats
28
- )
19
+ @style.set_style_properties(*workbook.style_properties)
29
20
  @style.assemble_xml_file
30
21
  result = got_to_array(@style.xml_str)
31
22
  expected = expected_to_array(<<EOS
@@ -26,16 +26,7 @@ class TestStyles04 < Test::Unit::TestCase
26
26
  workbook.__send__('prepare_format_properties')
27
27
 
28
28
  @style = Writexlsx::Package::Styles.new
29
- @style.set_style_properties(
30
- workbook.xf_formats,
31
- workbook.palette,
32
- workbook.font_count,
33
- workbook.num_format_count,
34
- workbook.border_count,
35
- workbook.fill_count,
36
- workbook.custom_colors,
37
- workbook.dxf_formats
38
- )
29
+ @style.set_style_properties(*workbook.style_properties)
39
30
  @style.assemble_xml_file
40
31
  result = got_to_array(@style.xml_str)
41
32
  expected = expected_to_array(<<EOS
@@ -20,16 +20,7 @@ class TestStyles05 < Test::Unit::TestCase
20
20
  workbook.__send__('prepare_format_properties')
21
21
 
22
22
  @style = Writexlsx::Package::Styles.new
23
- @style.set_style_properties(
24
- workbook.xf_formats,
25
- workbook.palette,
26
- workbook.font_count,
27
- workbook.num_format_count,
28
- workbook.border_count,
29
- workbook.fill_count,
30
- workbook.custom_colors,
31
- workbook.dxf_formats
32
- )
23
+ @style.set_style_properties(*workbook.style_properties)
33
24
  @style.assemble_xml_file
34
25
  result = got_to_array(@style.xml_str)
35
26
  expected = expected_to_array(<<EOS
@@ -26,16 +26,7 @@ class TestStyles06 < Test::Unit::TestCase
26
26
  workbook.__send__('prepare_format_properties')
27
27
 
28
28
  @style = Writexlsx::Package::Styles.new
29
- @style.set_style_properties(
30
- workbook.xf_formats,
31
- workbook.palette,
32
- workbook.font_count,
33
- workbook.num_format_count,
34
- workbook.border_count,
35
- workbook.fill_count,
36
- workbook.custom_colors,
37
- workbook.dxf_formats
38
- )
29
+ @style.set_style_properties(*workbook.style_properties)
39
30
  @style.assemble_xml_file
40
31
  result = got_to_array(@style.xml_str)
41
32
  expected = expected_to_array(<<EOS
@@ -17,16 +17,7 @@ class TestStyles07 < Test::Unit::TestCase
17
17
  workbook.__send__('prepare_format_properties')
18
18
 
19
19
  @style = Writexlsx::Package::Styles.new
20
- @style.set_style_properties(
21
- workbook.xf_formats,
22
- workbook.palette,
23
- workbook.font_count,
24
- workbook.num_format_count,
25
- workbook.border_count,
26
- workbook.fill_count,
27
- workbook.custom_colors,
28
- workbook.dxf_formats
29
- )
20
+ @style.set_style_properties(*workbook.style_properties)
30
21
  @style.assemble_xml_file
31
22
  result = got_to_array(@style.xml_str)
32
23
  expected = expected_to_array(<<EOS
@@ -16,16 +16,7 @@ class TestStyles08 < Test::Unit::TestCase
16
16
  workbook.__send__('prepare_format_properties')
17
17
 
18
18
  @style = Writexlsx::Package::Styles.new
19
- @style.set_style_properties(
20
- workbook.xf_formats,
21
- workbook.palette,
22
- workbook.font_count,
23
- workbook.num_format_count,
24
- workbook.border_count,
25
- workbook.fill_count,
26
- workbook.custom_colors,
27
- workbook.dxf_formats
28
- )
19
+ @style.set_style_properties(*workbook.style_properties)
29
20
  @style.assemble_xml_file
30
21
  result = got_to_array(@style.xml_str)
31
22
  expected = expected_to_array(<<EOS
@@ -22,16 +22,7 @@ class TestStyles09 < Test::Unit::TestCase
22
22
  workbook.__send__('prepare_format_properties')
23
23
 
24
24
  @style = Writexlsx::Package::Styles.new
25
- @style.set_style_properties(
26
- workbook.xf_formats,
27
- workbook.palette,
28
- workbook.font_count,
29
- workbook.num_format_count,
30
- workbook.border_count,
31
- workbook.fill_count,
32
- workbook.custom_colors,
33
- workbook.dxf_formats
34
- )
25
+ @style.set_style_properties(*workbook.style_properties)
35
26
  @style.assemble_xml_file
36
27
  result = got_to_array(@style.xml_str)
37
28
  expected = expected_to_array(<<EOS
Binary file
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartGap01 < 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_gap01
14
+ @xlsx = 'chart_gap01.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, [45438848, 45470464])
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
+ :overlap => 5,
34
+ :gap => 157
35
+ )
36
+
37
+ chart.add_series(
38
+ :categories => '=Sheet1!$A$1:$A$5',
39
+ :values => '=Sheet1!$C$1:$C$5'
40
+ )
41
+
42
+ worksheet.insert_chart('E9', chart)
43
+
44
+ workbook.close
45
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx)
46
+ end
47
+ end
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartGap02 < 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_gap02
14
+ @xlsx = 'chart_gap02.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, [45470464, 45472000])
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
+ :overlap => -100,
34
+ :gap => 0
35
+ )
36
+
37
+ chart.add_series(
38
+ :categories => '=Sheet1!$A$1:$A$5',
39
+ :values => '=Sheet1!$C$1:$C$5'
40
+ )
41
+
42
+ worksheet.insert_chart('E9', chart)
43
+
44
+ workbook.close
45
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx)
46
+ end
47
+ end
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionChartGap03 < 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_gap03
14
+ @xlsx = 'chart_gap03.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, [45470464, 45472000])
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
+ :overlap => 100,
34
+ :gap => 500
35
+ )
36
+
37
+ chart.add_series(
38
+ :categories => '=Sheet1!$A$1:$A$5',
39
+ :values => '=Sheet1!$C$1:$C$5'
40
+ )
41
+
42
+ worksheet.insert_chart('E9', chart)
43
+
44
+ workbook.close
45
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx)
46
+ end
47
+ end
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionFormat05 < 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_format05
14
+ @xlsx = 'format05.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+ wrap = workbook.add_format(:text_wrap => 1)
18
+
19
+ worksheet.set_row(0, 45)
20
+
21
+ worksheet.write('A1', "Foo\nBar", wrap)
22
+
23
+ workbook.close
24
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx)
25
+ end
26
+ end
@@ -0,0 +1,32 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionRichString12 < 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_rich_string12
14
+ @xlsx = 'rich_string12.xlsx'
15
+ workbook = WriteXLSX.new(@xlsx)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.set_column('A:A', 30)
19
+ worksheet.set_row(2, 60)
20
+
21
+ bold = workbook.add_format(:bold => 1)
22
+ italic = workbook.add_format(:italic => 1)
23
+ wrap = workbook.add_format(:text_wrap => 1)
24
+
25
+ worksheet.write('A1', 'Foo', bold)
26
+ worksheet.write('A2', 'Bar', italic)
27
+ worksheet.write_rich_string('A3', "This is\n", bold, "bold\n", "and this is\n", italic, 'italic', wrap)
28
+
29
+ workbook.close
30
+ compare_xlsx_for_regression(File.join(@regression_output, @xlsx), @xlsx)
31
+ end
32
+ end