write_xlsx 0.97.0 → 0.99.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changes +27 -0
- data/LICENSE.txt +1 -1
- data/README.md +2 -2
- data/lib/write_xlsx/chart.rb +25 -22
- data/lib/write_xlsx/chart/axis.rb +2 -2
- data/lib/write_xlsx/chart/legend.rb +14 -0
- data/lib/write_xlsx/chart/pie.rb +9 -7
- data/lib/write_xlsx/chartsheet.rb +30 -2
- data/lib/write_xlsx/format.rb +4 -4
- data/lib/write_xlsx/package/comments.rb +50 -47
- data/lib/write_xlsx/package/conditional_format.rb +9 -1
- data/lib/write_xlsx/package/table.rb +5 -0
- data/lib/write_xlsx/utility.rb +59 -1
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +30 -5
- data/lib/write_xlsx/worksheet.rb +31 -13
- data/lib/write_xlsx/worksheet/data_validation.rb +10 -14
- data/test/chart/test_write_legend_pos.rb +9 -1
- data/test/chartsheet/test_write_sheet_protection.rb +91 -0
- data/test/package/comments/test_comments_01.rb +54 -0
- data/test/package/comments/test_comments_02.rb +54 -0
- data/test/perl_output/formats.xlsx +0 -0
- data/test/regression/images/happy.jpg +0 -0
- data/test/regression/test_array_formula03.rb +36 -0
- data/test/regression/test_autofilter08.rb +110 -0
- data/test/regression/test_autofilter09.rb +110 -0
- data/test/regression/test_autofilter10.rb +110 -0
- data/test/regression/test_chart_axis42.rb +44 -0
- data/test/regression/test_chart_axis43.rb +44 -0
- data/test/regression/test_chart_legend03.rb +41 -0
- data/test/regression/test_chart_legend04.rb +41 -0
- data/test/regression/test_chart_legend05.rb +41 -0
- data/test/regression/test_chart_legend06.rb +41 -0
- data/test/regression/test_chart_legend07.rb +38 -0
- data/test/regression/test_comment13.rb +36 -0
- data/test/regression/test_cond_format19.rb +64 -0
- data/test/regression/test_cond_format20.rb +43 -0
- data/test/regression/test_format15.rb +26 -0
- data/test/regression/test_image36.rb +26 -0
- data/test/regression/test_table23.rb +56 -0
- data/test/regression/xlsx_files/array_formula03.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter08.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter09.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis42.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis43.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend07.xlsx +0 -0
- data/test/regression/xlsx_files/comment13.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format19.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format20.xlsx +0 -0
- data/test/regression/xlsx_files/format15.xlsx +0 -0
- data/test/regression/xlsx_files/image36.xlsx +0 -0
- data/test/regression/xlsx_files/table23.xlsx +0 -0
- data/test/workbook/test_write_workbook_view.rb +36 -0
- data/test/worksheet/test_write_data_validation_02.rb +17 -0
- data/test/worksheet/test_write_sheet_view.rb +19 -1
- metadata +79 -4
- data/test/package/comments/test_write_text_t.rb +0 -44
@@ -749,7 +749,15 @@ def write_cf_rule
|
|
749
749
|
write_formula_tag(maximum)
|
750
750
|
end
|
751
751
|
else
|
752
|
-
|
752
|
+
quoted_value = value.to_s
|
753
|
+
numeric_regex = /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/
|
754
|
+
# String "Cell" values must be quoted, apart from ranges.
|
755
|
+
if !(quoted_value =~ /(\$?)([A-Z]{1,3})(\$?)(\d+)/) &&
|
756
|
+
!(quoted_value =~ numeric_regex) &&
|
757
|
+
!(quoted_value =~ /^".*"$/)
|
758
|
+
quoted_value = (%Q!"#{value}"!)
|
759
|
+
end
|
760
|
+
write_cf_rule_formula_tag(quoted_value)
|
753
761
|
end
|
754
762
|
end
|
755
763
|
end
|
@@ -240,6 +240,11 @@ def handle_the_function_for_the_table_row(row2, col_data, col_num, user_data)
|
|
240
240
|
# Convert a table total function to a worksheet formula.
|
241
241
|
#
|
242
242
|
def table_function_to_formula(function, col_name)
|
243
|
+
col_name = col_name.gsub(/'/, "''").
|
244
|
+
gsub(/#/, "'#").
|
245
|
+
gsub(/\[/, "'[").
|
246
|
+
gsub(/\]/, "']")
|
247
|
+
|
243
248
|
subtotals = {
|
244
249
|
:average => 101,
|
245
250
|
:countNums => 102,
|
data/lib/write_xlsx/utility.rb
CHANGED
@@ -119,7 +119,7 @@ def check_dimensions(row, col)
|
|
119
119
|
# nil if the date is invalid.
|
120
120
|
#
|
121
121
|
def convert_date_time(date_time_string) #:nodoc:
|
122
|
-
date_time = date_time_string.sub(/^\s+/, '').sub(/\s+$/, '').sub(/Z$/, '')
|
122
|
+
date_time = date_time_string.to_s.sub(/^\s+/, '').sub(/\s+$/, '').sub(/Z$/, '')
|
123
123
|
|
124
124
|
# Check for invalid date char.
|
125
125
|
return nil if date_time =~ /[^0-9T:\-\.Z]/
|
@@ -361,6 +361,64 @@ def float_to_str(float)
|
|
361
361
|
end
|
362
362
|
end
|
363
363
|
|
364
|
+
#
|
365
|
+
# Convert user defined legend properties to the structure required internally.
|
366
|
+
#
|
367
|
+
def legend_properties(params)
|
368
|
+
legend = Writexlsx::Chart::Legend.new
|
369
|
+
|
370
|
+
legend.position = params[:position] || 'right'
|
371
|
+
legend.delete_series = params[:delete_series]
|
372
|
+
legend.font = convert_font_args(params[:font])
|
373
|
+
|
374
|
+
# Set the legend layout.
|
375
|
+
legend.layout = layout_properties(params[:layout])
|
376
|
+
|
377
|
+
# Turn off the legend.
|
378
|
+
if params[:none]
|
379
|
+
legend.position = 'none'
|
380
|
+
end
|
381
|
+
|
382
|
+
# Set the line properties for the legend.
|
383
|
+
line = line_properties(params[:line])
|
384
|
+
|
385
|
+
# Allow 'border' as a synonym for 'line'.
|
386
|
+
if params[:border]
|
387
|
+
line = line_properties(params[:border])
|
388
|
+
end
|
389
|
+
|
390
|
+
# Set the fill properties for the legend.
|
391
|
+
fill = fill_properties(params[:fill])
|
392
|
+
|
393
|
+
# Set the pattern properties for the legend.
|
394
|
+
pattern = pattern_properties(params[:pattern])
|
395
|
+
|
396
|
+
# Set the gradient fill properties for the legend.
|
397
|
+
gradient = gradient_properties(params[:gradient])
|
398
|
+
|
399
|
+
# Pattern fill overrides solid fill.
|
400
|
+
if pattern
|
401
|
+
fill = nil
|
402
|
+
end
|
403
|
+
|
404
|
+
# Gradient fill overrides solid and pattern fills.
|
405
|
+
if gradient
|
406
|
+
pattern = nil
|
407
|
+
fill = nil
|
408
|
+
end
|
409
|
+
|
410
|
+
# Set the legend layout.
|
411
|
+
layout = layout_properties(params[:layout])
|
412
|
+
|
413
|
+
legend.line = line
|
414
|
+
legend.fill = fill
|
415
|
+
legend.pattern = pattern
|
416
|
+
legend.gradient = gradient
|
417
|
+
legend.layout = layout
|
418
|
+
|
419
|
+
@legend = legend
|
420
|
+
end
|
421
|
+
|
364
422
|
#
|
365
423
|
# Convert user defined layout properties to the format required internally.
|
366
424
|
#
|
data/lib/write_xlsx/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
WriteXLSX_VERSION = "0.
|
1
|
+
WriteXLSX_VERSION = "0.99.0"
|
data/lib/write_xlsx/workbook.rb
CHANGED
@@ -123,7 +123,7 @@ def initialize(file, *option_params)
|
|
123
123
|
@y_window = 15
|
124
124
|
@window_width = 16095
|
125
125
|
@window_height = 9660
|
126
|
-
@tab_ratio =
|
126
|
+
@tab_ratio = 600
|
127
127
|
@excel2003_style = options[:excel2003_style] || false
|
128
128
|
@table_count = 0
|
129
129
|
@image_types = {}
|
@@ -784,6 +784,19 @@ def set_size(width = nil, height = nil)
|
|
784
784
|
end
|
785
785
|
end
|
786
786
|
|
787
|
+
#
|
788
|
+
# Set the ratio of space for worksheet tabs.
|
789
|
+
#
|
790
|
+
def set_tab_ratio(tab_ratio = nil)
|
791
|
+
return if !tab_ratio
|
792
|
+
|
793
|
+
if tab_ratio < 0 || tab_ratio > 100
|
794
|
+
raise "Tab ratio outside range: 0 <= zoom <= 100"
|
795
|
+
else
|
796
|
+
@tab_ratio = (tab_ratio * 10).to_i
|
797
|
+
end
|
798
|
+
end
|
799
|
+
|
787
800
|
#
|
788
801
|
# The set_properties method can be used to set the document properties
|
789
802
|
# of the Excel file created by WriteXLSX. These properties are visible
|
@@ -1308,7 +1321,7 @@ def write_workbook_view #:nodoc:
|
|
1308
1321
|
['windowWidth', @window_width],
|
1309
1322
|
['windowHeight', @window_height]
|
1310
1323
|
]
|
1311
|
-
if @tab_ratio !=
|
1324
|
+
if @tab_ratio != 600
|
1312
1325
|
attributes << ['tabRatio', @tab_ratio]
|
1313
1326
|
end
|
1314
1327
|
if @firstsheet > 0
|
@@ -1512,9 +1525,17 @@ def prepare_num_formats #:nodoc:
|
|
1512
1525
|
# string but would evaluate to zero.
|
1513
1526
|
#
|
1514
1527
|
if num_format.to_s =~ /^\d+$/ && num_format.to_s !~ /^0+\d/
|
1528
|
+
# Number format '0' is indexed as 1 in Excel.
|
1529
|
+
if num_format == 0
|
1530
|
+
num_format = 1
|
1531
|
+
end
|
1515
1532
|
# Index to a built-in number format.
|
1516
1533
|
format.num_format_index = num_format
|
1517
1534
|
next
|
1535
|
+
elsif num_format.to_s == 'General'
|
1536
|
+
# The 'General' format has an number format index of 0.
|
1537
|
+
format.num_format_index = 0
|
1538
|
+
next
|
1518
1539
|
end
|
1519
1540
|
|
1520
1541
|
if num_formats[num_format]
|
@@ -2064,16 +2085,20 @@ def process_jpg(data, filename)
|
|
2064
2085
|
offset = 2
|
2065
2086
|
data_length = data.bytesize
|
2066
2087
|
|
2067
|
-
# Search through the image data to read the
|
2068
|
-
# 0xFFC0/C2 element. Also read the DPI in the 0xFFE0 element.
|
2088
|
+
# Search through the image data to read the JPEG markers.
|
2069
2089
|
while offset < data_length
|
2070
2090
|
marker = data[offset+0, 2].unpack("n")[0]
|
2071
2091
|
length = data[offset+2, 2].unpack("n")[0]
|
2072
2092
|
|
2073
|
-
|
2093
|
+
# Read the height and width in the 0xFFCn elements
|
2094
|
+
# (Except C4, C8 and CC which aren't SOF markers).
|
2095
|
+
if (marker & 0xFFF0) == 0xFFC0 &&
|
2096
|
+
marker != 0xFFC4 && marker != 0xFFCC
|
2074
2097
|
height = data[offset+5, 2].unpack("n")[0]
|
2075
2098
|
width = data[offset+7, 2].unpack("n")[0]
|
2076
2099
|
end
|
2100
|
+
|
2101
|
+
# Read the DPI in the 0xFFE0 element.
|
2077
2102
|
if marker == 0xFFE0
|
2078
2103
|
units = data[offset + 11, 1].unpack("C")[0]
|
2079
2104
|
x_density = data[offset + 12, 2].unpack("n")[0]
|
data/lib/write_xlsx/worksheet.rb
CHANGED
@@ -312,14 +312,15 @@ def initialize(workbook, index, name) #:nodoc:
|
|
312
312
|
|
313
313
|
@page_setup = PageSetup.new
|
314
314
|
|
315
|
-
@screen_gridlines
|
316
|
-
@show_zeros
|
317
|
-
@dim_rowmin
|
318
|
-
@dim_rowmax
|
319
|
-
@dim_colmin
|
320
|
-
@dim_colmax
|
321
|
-
@selections
|
322
|
-
@panes
|
315
|
+
@screen_gridlines = true
|
316
|
+
@show_zeros = true
|
317
|
+
@dim_rowmin = nil
|
318
|
+
@dim_rowmax = nil
|
319
|
+
@dim_colmin = nil
|
320
|
+
@dim_colmax = nil
|
321
|
+
@selections = []
|
322
|
+
@panes = []
|
323
|
+
@hide_row_col_headers = 0
|
323
324
|
|
324
325
|
@tab_color = 0
|
325
326
|
|
@@ -5344,6 +5345,13 @@ def print_row_col_headers(headers = true)
|
|
5344
5345
|
# end
|
5345
5346
|
end
|
5346
5347
|
|
5348
|
+
#
|
5349
|
+
# Set the option to hide the row and column headers in Excel.
|
5350
|
+
#
|
5351
|
+
def hide_row_col_headers
|
5352
|
+
@hide_row_col_headers = 1
|
5353
|
+
end
|
5354
|
+
|
5347
5355
|
#
|
5348
5356
|
# The fit_to_pages() method is used to fit the printed area to a specific
|
5349
5357
|
# number of pages both vertically and horizontally. If the printed area
|
@@ -6757,9 +6765,12 @@ def write_sheet_views #:nodoc:
|
|
6757
6765
|
|
6758
6766
|
def write_sheet_view #:nodoc:
|
6759
6767
|
attributes = []
|
6760
|
-
# Hide screen gridlines if required
|
6768
|
+
# Hide screen gridlines if required.
|
6761
6769
|
attributes << ['showGridLines', 0] unless @screen_gridlines
|
6762
6770
|
|
6771
|
+
# Hide the row/column headers.
|
6772
|
+
attributes << ['showRowColHeaders', 0] if ptrue?(@hide_row_col_headers)
|
6773
|
+
|
6763
6774
|
# Hide zeroes in cells.
|
6764
6775
|
attributes << ['showZeros', 0] unless show_zeros?
|
6765
6776
|
|
@@ -7294,13 +7305,20 @@ def write_filter_column(col_id, type, *filters) #:nodoc:
|
|
7294
7305
|
# Write the <filters> element.
|
7295
7306
|
#
|
7296
7307
|
def write_filters(*filters) #:nodoc:
|
7297
|
-
|
7308
|
+
non_blanks = filters.reject { |filter| filter =~ /^blanks$/i }
|
7309
|
+
attributes = []
|
7310
|
+
|
7311
|
+
if filters != non_blanks
|
7312
|
+
attributes = [ ['blank', 1] ]
|
7313
|
+
end
|
7314
|
+
|
7315
|
+
if filters.size == 1 && non_blanks.empty?
|
7298
7316
|
# Special case for blank cells only.
|
7299
|
-
@writer.empty_tag('filters',
|
7317
|
+
@writer.empty_tag('filters', attributes)
|
7300
7318
|
else
|
7301
7319
|
# General case.
|
7302
|
-
@writer.tag_elements('filters') do
|
7303
|
-
|
7320
|
+
@writer.tag_elements('filters', attributes) do
|
7321
|
+
non_blanks.sort.each { |filter| write_filter(filter) }
|
7304
7322
|
end
|
7305
7323
|
end
|
7306
7324
|
end
|
@@ -219,10 +219,17 @@ def check_valid_citeria_types
|
|
219
219
|
end
|
220
220
|
|
221
221
|
def convert_date_time_value_if_required
|
222
|
-
@date_1904 = date_1904?
|
223
222
|
if @validate == 'date' || @validate == 'time'
|
224
|
-
|
225
|
-
|
223
|
+
date_time = convert_date_time(@value)
|
224
|
+
if date_time
|
225
|
+
@value = date_time
|
226
|
+
end
|
227
|
+
|
228
|
+
if @maximum
|
229
|
+
date_time = convert_date_time(@maximum)
|
230
|
+
if date_time
|
231
|
+
@maximum = date_time
|
232
|
+
end
|
226
233
|
end
|
227
234
|
end
|
228
235
|
end
|
@@ -292,17 +299,6 @@ def valid_criteria_type # :nodoc:
|
|
292
299
|
}
|
293
300
|
end
|
294
301
|
|
295
|
-
def convert_date_time_value(key) # :nodoc:
|
296
|
-
value = instance_variable_get("@#{key}")
|
297
|
-
if value && value.to_s =~ /T/
|
298
|
-
date_time = convert_date_time(value)
|
299
|
-
instance_variable_set("@#{key}", date_time) if date_time
|
300
|
-
date_time
|
301
|
-
else
|
302
|
-
true
|
303
|
-
end
|
304
|
-
end
|
305
|
-
|
306
302
|
def date_1904?
|
307
303
|
@date_1904
|
308
304
|
end
|
@@ -7,9 +7,17 @@ def setup
|
|
7
7
|
@chart = Writexlsx::Chart.new('Bar')
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
10
|
+
def test_write_legend_pos_default
|
11
11
|
expected = '<c:legendPos val="r"/>'
|
12
12
|
result = @chart.__send__('write_legend_pos', 'r')
|
13
13
|
assert_equal(expected, result)
|
14
14
|
end
|
15
|
+
|
16
|
+
def test_write_legend_overlay_top_right
|
17
|
+
expected = '<c:legend><c:legendPos val="tr"/><c:layout/><c:overlay val="1"/></c:legend>'
|
18
|
+
@chart.set_legend(:position => 'overlay_top_right')
|
19
|
+
@chart.__send__('write_legend')
|
20
|
+
result = @chart.instance_variable_get(:@writer).string
|
21
|
+
assert_equal(expected, result)
|
22
|
+
end
|
15
23
|
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestChartsheetWriteSheetProtection < Minitest::Test
|
5
|
+
def setup
|
6
|
+
workbook = WriteXLSX.new(StringIO.new)
|
7
|
+
workbook.add_chart(:type => 'line')
|
8
|
+
@chartsheet = workbook.sheets.first
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_chartsheet_write_sheet_protection
|
12
|
+
expected = '<sheetProtection password="83AF" content="1" objects="1"/>'
|
13
|
+
|
14
|
+
@chartsheet.protect('', {})
|
15
|
+
result = @chartsheet.__send__(:write_sheet_protection)
|
16
|
+
assert_equal(expected_to_array(expected), got_to_array(result))
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_chartsheet_write_sheet_protection
|
20
|
+
expected = '<sheetProtection password="83AF" content="1" objects="1"/>'
|
21
|
+
|
22
|
+
@chartsheet.protect('password', {})
|
23
|
+
result = @chartsheet.__send__(:write_sheet_protection)
|
24
|
+
assert_equal(expected_to_array(expected), got_to_array(result))
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_chartsheet_write_sheet_protection_without_password_and_content
|
28
|
+
expected = '<sheetProtection content="1"/>'
|
29
|
+
|
30
|
+
@chartsheet.protect('', {:objects => 0})
|
31
|
+
result = @chartsheet.__send__(:write_sheet_protection)
|
32
|
+
assert_equal(expected_to_array(expected), got_to_array(result))
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_chartsheet_write_sheet_protection_with_opjects0_option
|
36
|
+
expected = '<sheetProtection password="83AF" content="1"/>'
|
37
|
+
|
38
|
+
@chartsheet.protect('password', { :objects => 0 })
|
39
|
+
result = @chartsheet.__send__(:write_sheet_protection)
|
40
|
+
assert_equal(expected_to_array(expected), got_to_array(result))
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_chartsheet_write_sheet_protection_without_password
|
44
|
+
expected = '<sheetProtection objects="1"/>'
|
45
|
+
|
46
|
+
@chartsheet.protect('', { :content => 0 })
|
47
|
+
result = @chartsheet.__send__(:write_sheet_protection)
|
48
|
+
assert_equal(expected_to_array(expected), got_to_array(result))
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_chartsheet_write_sheet_protection_without_password_and_content_option
|
52
|
+
expected = ''
|
53
|
+
|
54
|
+
@chartsheet.protect('', { :content => 0, :objects => 0 })
|
55
|
+
result = @chartsheet.__send__(:write_sheet_protection) || ''
|
56
|
+
assert_equal(expected_to_array(expected), got_to_array(result))
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_chartsheet_write_sheet_protection_with_password_and_content_objects_option
|
60
|
+
expected = '<sheetProtection password="83AF"/>'
|
61
|
+
|
62
|
+
@chartsheet.protect('password', { :content => 0, :objects => 0 })
|
63
|
+
result = @chartsheet.__send__(:write_sheet_protection)
|
64
|
+
assert_equal(expected_to_array(expected), got_to_array(result))
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_chartsheet_write_sheet_protection_with_password_full_options
|
68
|
+
expected = '<sheetProtection password="83AF" content="1" objects="1"/>'
|
69
|
+
|
70
|
+
options = {
|
71
|
+
:objects => 1,
|
72
|
+
:scenarios => 1,
|
73
|
+
:format_cells => 1,
|
74
|
+
:format_columns => 1,
|
75
|
+
:format_rows => 1,
|
76
|
+
:insert_columns => 1,
|
77
|
+
:insert_rows => 1,
|
78
|
+
:insert_hyperlinks => 1,
|
79
|
+
:delete_columns => 1,
|
80
|
+
:delete_rows => 1,
|
81
|
+
:select_locked_cells => 0,
|
82
|
+
:sort => 1,
|
83
|
+
:autofilter => 1,
|
84
|
+
:pivot_tables => 1,
|
85
|
+
:select_unlocked_cells => 0
|
86
|
+
}
|
87
|
+
@chartsheet.protect('password', options)
|
88
|
+
result = @chartsheet.__send__(:write_sheet_protection)
|
89
|
+
assert_equal(expected_to_array(expected), got_to_array(result))
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'helper'
|
3
|
+
|
4
|
+
class TestComments01 < Minitest::Test
|
5
|
+
def setup
|
6
|
+
@workbook = WriteXLSX.new(StringIO.new)
|
7
|
+
@worksheet = @workbook.add_worksheet('')
|
8
|
+
end
|
9
|
+
|
10
|
+
###############################################################################
|
11
|
+
#
|
12
|
+
# Test the _assemble_xml_file() method.
|
13
|
+
#
|
14
|
+
def test_assemble_xml_file
|
15
|
+
@worksheet.write_comment(
|
16
|
+
1, 1, 'Some text',
|
17
|
+
:author => 'John', :visible => nil, :color => 81,
|
18
|
+
:font => 'Tahoma', :font_size => 8, :font_family => 2
|
19
|
+
)
|
20
|
+
|
21
|
+
comments = @worksheet.comments
|
22
|
+
comments.assemble_xml_file
|
23
|
+
result = got_to_array(comments.instance_variable_get(:@writer).string)
|
24
|
+
|
25
|
+
expected = expected_to_array(expected_xml)
|
26
|
+
assert_equal(expected, result)
|
27
|
+
end
|
28
|
+
|
29
|
+
def expected_xml
|
30
|
+
<<EOS
|
31
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
32
|
+
<comments xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
33
|
+
<authors>
|
34
|
+
<author>John</author>
|
35
|
+
</authors>
|
36
|
+
<commentList>
|
37
|
+
<comment ref="B2" authorId="0">
|
38
|
+
<text>
|
39
|
+
<r>
|
40
|
+
<rPr>
|
41
|
+
<sz val="8"/>
|
42
|
+
<color indexed="81"/>
|
43
|
+
<rFont val="Tahoma"/>
|
44
|
+
<family val="2"/>
|
45
|
+
</rPr>
|
46
|
+
<t>Some text</t>
|
47
|
+
</r>
|
48
|
+
</text>
|
49
|
+
</comment>
|
50
|
+
</commentList>
|
51
|
+
</comments>
|
52
|
+
EOS
|
53
|
+
end
|
54
|
+
end
|