write_xlsx 1.07.0 → 1.09.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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/Changes +40 -0
  3. data/README.md +1 -1
  4. data/examples/background.rb +19 -0
  5. data/examples/ignore_errors.rb +39 -0
  6. data/ignore_errors.xlsx +0 -0
  7. data/lib/write_xlsx/chart/axis.rb +3 -3
  8. data/lib/write_xlsx/chart/scatter.rb +0 -15
  9. data/lib/write_xlsx/chart/series.rb +1 -1
  10. data/lib/write_xlsx/chart.rb +31 -33
  11. data/lib/write_xlsx/chartsheet.rb +3 -3
  12. data/lib/write_xlsx/drawing.rb +118 -55
  13. data/lib/write_xlsx/format.rb +11 -179
  14. data/lib/write_xlsx/package/app.rb +5 -5
  15. data/lib/write_xlsx/package/button.rb +8 -8
  16. data/lib/write_xlsx/package/comments.rb +8 -8
  17. data/lib/write_xlsx/package/conditional_format.rb +2 -8
  18. data/lib/write_xlsx/package/content_types.rb +18 -9
  19. data/lib/write_xlsx/package/core.rb +5 -5
  20. data/lib/write_xlsx/package/custom.rb +2 -2
  21. data/lib/write_xlsx/package/metadata.rb +159 -0
  22. data/lib/write_xlsx/package/packager.rb +22 -0
  23. data/lib/write_xlsx/package/shared_strings.rb +6 -6
  24. data/lib/write_xlsx/package/styles.rb +27 -14
  25. data/lib/write_xlsx/package/table.rb +31 -23
  26. data/lib/write_xlsx/package/theme.rb +1 -1
  27. data/lib/write_xlsx/package/vml.rb +43 -43
  28. data/lib/write_xlsx/shape.rb +17 -15
  29. data/lib/write_xlsx/sparkline.rb +340 -340
  30. data/lib/write_xlsx/utility.rb +9 -24
  31. data/lib/write_xlsx/version.rb +1 -1
  32. data/lib/write_xlsx/workbook.rb +193 -643
  33. data/lib/write_xlsx/worksheet/cell_data.rb +25 -3
  34. data/lib/write_xlsx/worksheet/data_validation.rb +21 -26
  35. data/lib/write_xlsx/worksheet/hyperlink.rb +4 -4
  36. data/lib/write_xlsx/worksheet/page_setup.rb +12 -12
  37. data/lib/write_xlsx/worksheet.rb +461 -4233
  38. data/test/drawing/{test_write_ext.rb → test_write_xdr_ext.rb} +2 -2
  39. data/test/perl_output/background.xlsx +0 -0
  40. data/test/perl_output/ignore_errors.xlsx +0 -0
  41. data/test/regression/images/logo.gif +0 -0
  42. data/test/regression/images/logo.jpg +0 -0
  43. data/test/regression/images/red.gif +0 -0
  44. data/test/regression/test_background01.rb +23 -0
  45. data/test/regression/test_background02.rb +23 -0
  46. data/test/regression/test_background03.rb +24 -0
  47. data/test/regression/test_background04.rb +25 -0
  48. data/test/regression/test_background05.rb +25 -0
  49. data/test/regression/test_background06.rb +31 -0
  50. data/test/regression/test_background07.rb +37 -0
  51. data/test/regression/test_chart_axis47.rb +52 -0
  52. data/test/regression/test_chart_axis48.rb +53 -0
  53. data/test/regression/test_chart_crossing01.rb +1 -1
  54. data/test/regression/test_chart_crossing05.rb +46 -0
  55. data/test/regression/test_chart_crossing06.rb +46 -0
  56. data/test/regression/test_chart_data_labels48.rb +55 -0
  57. data/test/regression/test_chart_data_labels49.rb +55 -0
  58. data/test/regression/test_chart_data_labels50.rb +57 -0
  59. data/test/regression/test_dynamic_array01.rb +25 -0
  60. data/test/regression/test_format16.rb +24 -0
  61. data/test/regression/test_format17.rb +24 -0
  62. data/test/regression/test_header04.rb +30 -0
  63. data/test/regression/test_hyperlink50.rb +27 -0
  64. data/test/regression/test_hyperlink51.rb +27 -0
  65. data/test/regression/test_ignore_error01.rb +23 -0
  66. data/test/regression/test_ignore_error02.rb +24 -0
  67. data/test/regression/test_ignore_error03.rb +26 -0
  68. data/test/regression/test_ignore_error04.rb +26 -0
  69. data/test/regression/test_ignore_error05.rb +32 -0
  70. data/test/regression/test_ignore_error06.rb +32 -0
  71. data/test/regression/test_image52.rb +26 -0
  72. data/test/regression/test_image53.rb +26 -0
  73. data/test/regression/test_image54.rb +26 -0
  74. data/test/regression/test_image55.rb +27 -0
  75. data/test/regression/test_image56.rb +23 -0
  76. data/test/regression/test_image57.rb +23 -0
  77. data/test/regression/test_protect04.rb +32 -0
  78. data/test/regression/test_protect05.rb +35 -0
  79. data/test/regression/test_protect06.rb +35 -0
  80. data/test/regression/test_protect07.rb +23 -0
  81. data/test/regression/test_set_column10.rb +55 -0
  82. data/test/regression/test_set_column11.rb +48 -0
  83. data/test/regression/test_set_row01.rb +35 -0
  84. data/test/regression/test_set_row02.rb +35 -0
  85. data/test/regression/test_set_row03.rb +35 -0
  86. data/test/regression/test_set_row04.rb +35 -0
  87. data/test/regression/test_table26.rb +38 -0
  88. data/test/regression/xlsx_files/background01.xlsx +0 -0
  89. data/test/regression/xlsx_files/background02.xlsx +0 -0
  90. data/test/regression/xlsx_files/background03.xlsx +0 -0
  91. data/test/regression/xlsx_files/background04.xlsx +0 -0
  92. data/test/regression/xlsx_files/background05.xlsx +0 -0
  93. data/test/regression/xlsx_files/background06.xlsx +0 -0
  94. data/test/regression/xlsx_files/background07.xlsx +0 -0
  95. data/test/regression/xlsx_files/chart_axis47.xlsx +0 -0
  96. data/test/regression/xlsx_files/chart_axis48.xlsx +0 -0
  97. data/test/regression/xlsx_files/chart_crossing05.xlsx +0 -0
  98. data/test/regression/xlsx_files/chart_crossing06.xlsx +0 -0
  99. data/test/regression/xlsx_files/chart_data_labels48.xlsx +0 -0
  100. data/test/regression/xlsx_files/chart_data_labels49.xlsx +0 -0
  101. data/test/regression/xlsx_files/chart_data_labels50.xlsx +0 -0
  102. data/test/regression/xlsx_files/dynamic_array01.xlsx +0 -0
  103. data/test/regression/xlsx_files/format16.xlsx +0 -0
  104. data/test/regression/xlsx_files/format17.xlsx +0 -0
  105. data/test/regression/xlsx_files/header04.xlsx +0 -0
  106. data/test/regression/xlsx_files/hyperlink50.xlsx +0 -0
  107. data/test/regression/xlsx_files/hyperlink51.xlsx +0 -0
  108. data/test/regression/xlsx_files/ignore_error01.xlsx +0 -0
  109. data/test/regression/xlsx_files/ignore_error02.xlsx +0 -0
  110. data/test/regression/xlsx_files/ignore_error03.xlsx +0 -0
  111. data/test/regression/xlsx_files/ignore_error04.xlsx +0 -0
  112. data/test/regression/xlsx_files/ignore_error05.xlsx +0 -0
  113. data/test/regression/xlsx_files/ignore_error06.xlsx +0 -0
  114. data/test/regression/xlsx_files/image52.xlsx +0 -0
  115. data/test/regression/xlsx_files/image53.xlsx +0 -0
  116. data/test/regression/xlsx_files/image54.xlsx +0 -0
  117. data/test/regression/xlsx_files/image55.xlsx +0 -0
  118. data/test/regression/xlsx_files/image56.xlsx +0 -0
  119. data/test/regression/xlsx_files/image57.xlsx +0 -0
  120. data/test/regression/xlsx_files/protect04.xlsx +0 -0
  121. data/test/regression/xlsx_files/protect05.xlsx +0 -0
  122. data/test/regression/xlsx_files/protect06.xlsx +0 -0
  123. data/test/regression/xlsx_files/protect07.xlsx +0 -0
  124. data/test/regression/xlsx_files/set_row01.xlsx +0 -0
  125. data/test/regression/xlsx_files/set_row03.xlsx +0 -0
  126. data/test/regression/xlsx_files/table26.xlsx +0 -0
  127. data/test/test_example_match.rb +43 -0
  128. data/test/utility/test_range.rb +20 -0
  129. data/test/worksheet/test_pixels_to_row_col.rb +46 -0
  130. metadata +190 -8
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionSetRow02 < 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_set_row02
14
+ @xlsx = 'set_row01.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.set_row_pixels(0, 1)
19
+ worksheet.set_row_pixels(1, 2)
20
+ worksheet.set_row_pixels(2, 3)
21
+ worksheet.set_row_pixels(3, 4)
22
+
23
+ worksheet.set_row_pixels(11, 12)
24
+ worksheet.set_row_pixels(12, 13)
25
+ worksheet.set_row_pixels(13, 14)
26
+ worksheet.set_row_pixels(14, 15)
27
+
28
+ worksheet.set_row_pixels(18, 19)
29
+ worksheet.set_row_pixels(20, 21)
30
+ worksheet.set_row_pixels(21, 22)
31
+
32
+ workbook.close
33
+ compare_for_regression
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionSetRow03 < 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_set_row03
14
+ @xlsx = 'set_row03.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.set_row(0, 0.75)
19
+ worksheet.set_row(1, 1.50)
20
+ worksheet.set_row(2, 2.25)
21
+ worksheet.set_row(3, 3)
22
+
23
+ worksheet.set_row(11, 9)
24
+ worksheet.set_row(12, 9.75)
25
+ worksheet.set_row(13, 10.50)
26
+ worksheet.set_row(14, 11.25)
27
+
28
+ worksheet.set_row(18, 14.25)
29
+ worksheet.set_row(20, 15.75, nil, 1)
30
+ worksheet.set_row(21, 16.50)
31
+
32
+ workbook.close
33
+ compare_for_regression
34
+ end
35
+ end
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionSetRow04 < 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_set_row04
14
+ @xlsx = 'set_row03.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.set_row_pixels(0, 1)
19
+ worksheet.set_row_pixels(1, 2)
20
+ worksheet.set_row_pixels(2, 3)
21
+ worksheet.set_row_pixels(3, 4)
22
+
23
+ worksheet.set_row_pixels(11, 12)
24
+ worksheet.set_row_pixels(12, 13)
25
+ worksheet.set_row_pixels(13, 14)
26
+ worksheet.set_row_pixels(14, 15)
27
+
28
+ worksheet.set_row_pixels(18, 19)
29
+ worksheet.set_row_pixels(20, 21, nil, 1)
30
+ worksheet.set_row_pixels(21, 22)
31
+
32
+ workbook.close
33
+ compare_for_regression
34
+ end
35
+ end
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionTable26 < 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_table26
14
+ @xlsx = 'table26.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ # Set the column width to match the target worksheet.
19
+ worksheet.set_column('C:D', 10.288)
20
+ worksheet.set_column('F:G', 10.288)
21
+
22
+ # Add the table.
23
+ worksheet.add_table('C2:D3')
24
+ worksheet.add_table('F3:G3', :header_row => 0)
25
+
26
+ # These tables should be ignored since the ranges are incorrect.
27
+ assert_raises(RuntimeError) do
28
+ worksheet.add_table('I2:J2')
29
+ end
30
+
31
+ assert_raises(RuntimeError) do
32
+ worksheet.add_table('L3:M3', header_row: 1)
33
+ end
34
+
35
+ workbook.close
36
+ compare_for_regression
37
+ end
38
+ end
@@ -242,6 +242,18 @@ class TestExampleMatch < Minitest::Test
242
242
  compare_xlsx(File.join(@perl_output, @xlsx), @tempfile.path)
243
243
  end
244
244
 
245
+ def teset_background
246
+ @xlsx = 'background.xlsx'
247
+ workbook = WriteXLSX.new(@io)
248
+
249
+ worksheet = workbook.add_worksheet
250
+ worksheet.set_background(File.join(@test_dir, 'republic.png'))
251
+
252
+ workbook.close
253
+ store_to_tempfile
254
+ compare_xlsx(File.join(@perl_output, @xlsx), @tempfile.path)
255
+ end
256
+
245
257
  def test_chart_data_labels
246
258
  @xlsx = 'chart_data_labels.xlsx'
247
259
  workbook = WriteXLSX.new(@io)
@@ -3292,6 +3304,37 @@ EOS
3292
3304
  compare_xlsx(File.join(@perl_output, @xlsx), @tempfile.path)
3293
3305
  end
3294
3306
 
3307
+ def test_ignore_errors
3308
+ @xlsx = 'ignore_errors.xlsx'
3309
+ workbook = WriteXLSX.new(@io)
3310
+ worksheet = workbook.add_worksheet
3311
+
3312
+ # Write strings that looks like numbers. This will cause an Excel warning.
3313
+ worksheet.write_string('C2', '123')
3314
+ worksheet.write_string('C3', '123')
3315
+
3316
+ # Write a divide by zero formula. This will also cause an Excel warning.
3317
+ worksheet.write_formula('C5', '=1/0')
3318
+ worksheet.write_formula('C6', '=1/0')
3319
+
3320
+ # Turn off some of the warnings:
3321
+ worksheet.ignore_errors(
3322
+ :number_stored_as_text => 'C3',
3323
+ :eval_error => 'C6'
3324
+ )
3325
+
3326
+ # Write some descriptions for the cells and make the column wider for clarity.
3327
+ worksheet.set_column('B:B', 16)
3328
+ worksheet.write('B2', 'Warning:')
3329
+ worksheet.write('B3', 'Warning turned off:')
3330
+ worksheet.write('B5', 'Warning:')
3331
+ worksheet.write('B6', 'Warning turned off:')
3332
+
3333
+ workbook.close
3334
+ store_to_tempfile
3335
+ compare_xlsx(File.join(@perl_output, @xlsx), @tempfile.path)
3336
+ end
3337
+
3295
3338
  def test_merge1
3296
3339
  @xlsx = 'merge1.xlsx'
3297
3340
  # Create a new workbook and add a worksheet
@@ -0,0 +1,20 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRange < Minitest::Test
5
+ include Writexlsx::Utility
6
+
7
+ def test_range_0_0_1_1
8
+ assert_equal(
9
+ 'B1',
10
+ xl_range(0, 0, 1, 1)
11
+ )
12
+ end
13
+
14
+ def test_range_0_0_1_1_1_1_1_1
15
+ assert_equal(
16
+ '$B$1',
17
+ xl_range(0, 0, 1, 1, 1, 1, 1, 1)
18
+ )
19
+ end
20
+ end
@@ -0,0 +1,46 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+ require 'write_xlsx'
4
+ require 'stringio'
5
+
6
+ class TestPixelsToRowCol < Minitest::Test
7
+ def setup
8
+ @workbook = WriteXLSX.new(StringIO.new)
9
+ @worksheet = @workbook.add_worksheet('')
10
+ end
11
+
12
+ def width_to_pixels(width)
13
+ max_digit_width = 7.0
14
+ padding = 5
15
+
16
+ if width < 1
17
+ pixels = (width * (max_digit_width + padding) + 0.5).to_i
18
+ else
19
+ pixels = (width * max_digit_width + 0.5).to_i + padding
20
+ end
21
+
22
+ pixels
23
+ end
24
+
25
+ def height_to_pixels(height)
26
+ (4.0 * height / 3).to_i
27
+ end
28
+
29
+ def test_pixel_to_width
30
+ (0..1790).each do |pixels|
31
+ caption = "\tWorksheet: pixcel_to_width(#{pixels})"
32
+ expected = pixels
33
+ result = width_to_pixels(@worksheet.__send__(:pixels_to_width, pixels))
34
+ assert_equal(expected, result, caption)
35
+ end
36
+ end
37
+
38
+ def test_pixel_to_height
39
+ (0..545).each do |pixels|
40
+ caption = "\tWorksheet: pixcel_to_height(#{pixels})"
41
+ expected = pixels
42
+ result = height_to_pixels(@worksheet.__send__(:pixels_to_height, pixels))
43
+ assert_equal(expected, result, caption)
44
+ end
45
+ end
46
+ end