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.
- 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
|