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.
- checksums.yaml +4 -4
- data/Changes +40 -0
- data/README.md +1 -1
- data/examples/background.rb +19 -0
- data/examples/ignore_errors.rb +39 -0
- data/ignore_errors.xlsx +0 -0
- data/lib/write_xlsx/chart/axis.rb +3 -3
- data/lib/write_xlsx/chart/scatter.rb +0 -15
- data/lib/write_xlsx/chart/series.rb +1 -1
- data/lib/write_xlsx/chart.rb +31 -33
- data/lib/write_xlsx/chartsheet.rb +3 -3
- data/lib/write_xlsx/drawing.rb +118 -55
- data/lib/write_xlsx/format.rb +11 -179
- data/lib/write_xlsx/package/app.rb +5 -5
- data/lib/write_xlsx/package/button.rb +8 -8
- data/lib/write_xlsx/package/comments.rb +8 -8
- data/lib/write_xlsx/package/conditional_format.rb +2 -8
- data/lib/write_xlsx/package/content_types.rb +18 -9
- data/lib/write_xlsx/package/core.rb +5 -5
- data/lib/write_xlsx/package/custom.rb +2 -2
- data/lib/write_xlsx/package/metadata.rb +159 -0
- data/lib/write_xlsx/package/packager.rb +22 -0
- data/lib/write_xlsx/package/shared_strings.rb +6 -6
- data/lib/write_xlsx/package/styles.rb +27 -14
- data/lib/write_xlsx/package/table.rb +31 -23
- data/lib/write_xlsx/package/theme.rb +1 -1
- data/lib/write_xlsx/package/vml.rb +43 -43
- data/lib/write_xlsx/shape.rb +17 -15
- data/lib/write_xlsx/sparkline.rb +340 -340
- data/lib/write_xlsx/utility.rb +9 -24
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +193 -643
- data/lib/write_xlsx/worksheet/cell_data.rb +25 -3
- data/lib/write_xlsx/worksheet/data_validation.rb +21 -26
- data/lib/write_xlsx/worksheet/hyperlink.rb +4 -4
- data/lib/write_xlsx/worksheet/page_setup.rb +12 -12
- data/lib/write_xlsx/worksheet.rb +461 -4233
- data/test/drawing/{test_write_ext.rb → test_write_xdr_ext.rb} +2 -2
- data/test/perl_output/background.xlsx +0 -0
- data/test/perl_output/ignore_errors.xlsx +0 -0
- data/test/regression/images/logo.gif +0 -0
- data/test/regression/images/logo.jpg +0 -0
- data/test/regression/images/red.gif +0 -0
- data/test/regression/test_background01.rb +23 -0
- data/test/regression/test_background02.rb +23 -0
- data/test/regression/test_background03.rb +24 -0
- data/test/regression/test_background04.rb +25 -0
- data/test/regression/test_background05.rb +25 -0
- data/test/regression/test_background06.rb +31 -0
- data/test/regression/test_background07.rb +37 -0
- data/test/regression/test_chart_axis47.rb +52 -0
- data/test/regression/test_chart_axis48.rb +53 -0
- data/test/regression/test_chart_crossing01.rb +1 -1
- data/test/regression/test_chart_crossing05.rb +46 -0
- data/test/regression/test_chart_crossing06.rb +46 -0
- data/test/regression/test_chart_data_labels48.rb +55 -0
- data/test/regression/test_chart_data_labels49.rb +55 -0
- data/test/regression/test_chart_data_labels50.rb +57 -0
- data/test/regression/test_dynamic_array01.rb +25 -0
- data/test/regression/test_format16.rb +24 -0
- data/test/regression/test_format17.rb +24 -0
- data/test/regression/test_header04.rb +30 -0
- data/test/regression/test_hyperlink50.rb +27 -0
- data/test/regression/test_hyperlink51.rb +27 -0
- data/test/regression/test_ignore_error01.rb +23 -0
- data/test/regression/test_ignore_error02.rb +24 -0
- data/test/regression/test_ignore_error03.rb +26 -0
- data/test/regression/test_ignore_error04.rb +26 -0
- data/test/regression/test_ignore_error05.rb +32 -0
- data/test/regression/test_ignore_error06.rb +32 -0
- data/test/regression/test_image52.rb +26 -0
- data/test/regression/test_image53.rb +26 -0
- data/test/regression/test_image54.rb +26 -0
- data/test/regression/test_image55.rb +27 -0
- data/test/regression/test_image56.rb +23 -0
- data/test/regression/test_image57.rb +23 -0
- data/test/regression/test_protect04.rb +32 -0
- data/test/regression/test_protect05.rb +35 -0
- data/test/regression/test_protect06.rb +35 -0
- data/test/regression/test_protect07.rb +23 -0
- data/test/regression/test_set_column10.rb +55 -0
- data/test/regression/test_set_column11.rb +48 -0
- data/test/regression/test_set_row01.rb +35 -0
- data/test/regression/test_set_row02.rb +35 -0
- data/test/regression/test_set_row03.rb +35 -0
- data/test/regression/test_set_row04.rb +35 -0
- data/test/regression/test_table26.rb +38 -0
- data/test/regression/xlsx_files/background01.xlsx +0 -0
- data/test/regression/xlsx_files/background02.xlsx +0 -0
- data/test/regression/xlsx_files/background03.xlsx +0 -0
- data/test/regression/xlsx_files/background04.xlsx +0 -0
- data/test/regression/xlsx_files/background05.xlsx +0 -0
- data/test/regression/xlsx_files/background06.xlsx +0 -0
- data/test/regression/xlsx_files/background07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis47.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis48.xlsx +0 -0
- data/test/regression/xlsx_files/chart_crossing05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_crossing06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels48.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels49.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels50.xlsx +0 -0
- data/test/regression/xlsx_files/dynamic_array01.xlsx +0 -0
- data/test/regression/xlsx_files/format16.xlsx +0 -0
- data/test/regression/xlsx_files/format17.xlsx +0 -0
- data/test/regression/xlsx_files/header04.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink50.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink51.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error01.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error02.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error03.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error04.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error05.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error06.xlsx +0 -0
- data/test/regression/xlsx_files/image52.xlsx +0 -0
- data/test/regression/xlsx_files/image53.xlsx +0 -0
- data/test/regression/xlsx_files/image54.xlsx +0 -0
- data/test/regression/xlsx_files/image55.xlsx +0 -0
- data/test/regression/xlsx_files/image56.xlsx +0 -0
- data/test/regression/xlsx_files/image57.xlsx +0 -0
- data/test/regression/xlsx_files/protect04.xlsx +0 -0
- data/test/regression/xlsx_files/protect05.xlsx +0 -0
- data/test/regression/xlsx_files/protect06.xlsx +0 -0
- data/test/regression/xlsx_files/protect07.xlsx +0 -0
- data/test/regression/xlsx_files/set_row01.xlsx +0 -0
- data/test/regression/xlsx_files/set_row03.xlsx +0 -0
- data/test/regression/xlsx_files/table26.xlsx +0 -0
- data/test/test_example_match.rb +43 -0
- data/test/utility/test_range.rb +20 -0
- data/test/worksheet/test_pixels_to_row_col.rb +46 -0
- 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
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/test/test_example_match.rb
CHANGED
@@ -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
|