write_xlsx 1.07.0 → 1.09.0

Sign up to get free protection for your applications and to get access to all the features.
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