write_xlsx 1.11.0 → 1.11.2
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/.rubocop.yml +1 -1
- data/Changes +12 -0
- data/examples/shape_all.rb +1 -1
- data/lib/write_xlsx/chart/area.rb +1 -0
- data/lib/write_xlsx/chart/axis.rb +1 -0
- data/lib/write_xlsx/chart/bar.rb +1 -0
- data/lib/write_xlsx/chart/caption.rb +1 -0
- data/lib/write_xlsx/chart/column.rb +1 -0
- data/lib/write_xlsx/chart/doughnut.rb +1 -0
- data/lib/write_xlsx/chart/legend.rb +1 -0
- data/lib/write_xlsx/chart/line.rb +1 -0
- data/lib/write_xlsx/chart/pie.rb +15 -2
- data/lib/write_xlsx/chart/radar.rb +1 -0
- data/lib/write_xlsx/chart/scatter.rb +1 -0
- data/lib/write_xlsx/chart/series.rb +56 -4
- data/lib/write_xlsx/chart/stock.rb +1 -0
- data/lib/write_xlsx/chart.rb +107 -23
- data/lib/write_xlsx/chartsheet.rb +10 -1
- data/lib/write_xlsx/col_name.rb +7 -3
- data/lib/write_xlsx/colors.rb +20 -19
- data/lib/write_xlsx/format.rb +10 -8
- data/lib/write_xlsx/package/app.rb +9 -5
- data/lib/write_xlsx/package/comments.rb +2 -1
- data/lib/write_xlsx/package/conditional_format.rb +6 -6
- data/lib/write_xlsx/package/packager.rb +2 -3
- data/lib/write_xlsx/package/styles.rb +11 -13
- data/lib/write_xlsx/package/table.rb +74 -20
- data/lib/write_xlsx/package/xml_writer_simple.rb +32 -44
- data/lib/write_xlsx/sheets.rb +6 -2
- data/lib/write_xlsx/sparkline.rb +2 -2
- data/lib/write_xlsx/utility.rb +14 -12
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +2 -3
- data/lib/write_xlsx/worksheet/cell_data.rb +17 -18
- data/lib/write_xlsx/worksheet/hyperlink.rb +2 -2
- data/lib/write_xlsx/worksheet.rb +90 -39
- data/write_xlsx.gemspec +2 -0
- metadata +31 -3
@@ -28,7 +28,7 @@ module Writexlsx
|
|
28
28
|
normalized_str = str.sub(/^mailto:/, '')
|
29
29
|
|
30
30
|
# Split url into the link and optional anchor/location.
|
31
|
-
url, @url_str = url.split(
|
31
|
+
url, @url_str = url.split("#", 2)
|
32
32
|
|
33
33
|
# Escape URL unless it looks already escaped.
|
34
34
|
url = escape_url(url)
|
@@ -106,7 +106,7 @@ module Writexlsx
|
|
106
106
|
str = str.sub(/^mailto:/, '')
|
107
107
|
|
108
108
|
# Split url into the link and optional anchor/location.
|
109
|
-
url, url_str = url.split(
|
109
|
+
url, url_str = url.split("#", 2)
|
110
110
|
|
111
111
|
# Escape URL unless it looks already escaped.
|
112
112
|
url = escape_url(url)
|
data/lib/write_xlsx/worksheet.rb
CHANGED
@@ -23,6 +23,7 @@ module Writexlsx
|
|
23
23
|
|
24
24
|
MAX_DIGIT_WIDTH = 7 # For Calabri 11. # :nodoc:
|
25
25
|
PADDING = 5 # :nodoc:
|
26
|
+
COLINFO = Struct.new('ColInfo', :width, :format, :hidden, :level, :collapsed, :autofit)
|
26
27
|
|
27
28
|
attr_reader :index # :nodoc:
|
28
29
|
attr_reader :charts, :images, :tables, :shapes, :drawings # :nodoc:
|
@@ -227,15 +228,26 @@ module Writexlsx
|
|
227
228
|
#
|
228
229
|
# Hide this worksheet.
|
229
230
|
#
|
230
|
-
def hide
|
231
|
-
@hidden =
|
231
|
+
def hide(hidden = :hidden)
|
232
|
+
@hidden = hidden
|
232
233
|
@selected = false
|
233
234
|
@workbook.activesheet = 0 if @workbook.activesheet == @index
|
234
235
|
@workbook.firstsheet = 0 if @workbook.firstsheet == @index
|
235
236
|
end
|
236
237
|
|
238
|
+
#
|
239
|
+
# Hide this worksheet. This can only be unhidden from VBA.
|
240
|
+
#
|
241
|
+
def very_hidden
|
242
|
+
hide(:very_hidden)
|
243
|
+
end
|
244
|
+
|
237
245
|
def hidden? # :nodoc:
|
238
|
-
@hidden
|
246
|
+
@hidden == :hidden
|
247
|
+
end
|
248
|
+
|
249
|
+
def very_hidden? # :nodoc:
|
250
|
+
@hidden == :very_hidden
|
239
251
|
end
|
240
252
|
|
241
253
|
#
|
@@ -270,7 +282,7 @@ module Writexlsx
|
|
270
282
|
if range.nil?
|
271
283
|
raise "The range must be defined in unprotect_range())\n"
|
272
284
|
else
|
273
|
-
range = range.gsub(
|
285
|
+
range = range.gsub("$", "")
|
274
286
|
range = range.sub(/^=/, "")
|
275
287
|
@num_protected_ranges += 1
|
276
288
|
end
|
@@ -357,8 +369,7 @@ module Writexlsx
|
|
357
369
|
# Store the column data based on the first column. Padded for sorting.
|
358
370
|
(firstcol..lastcol).each do |col|
|
359
371
|
@col_info[col] =
|
360
|
-
|
361
|
-
.new(width, format, hidden, level, collapsed, autofit)
|
372
|
+
COLINFO.new(width, format, hidden, level, collapsed, autofit)
|
362
373
|
end
|
363
374
|
|
364
375
|
# Store the column change to allow optimisations.
|
@@ -497,8 +508,7 @@ module Writexlsx
|
|
497
508
|
@col_info[col_num].autofit = 1
|
498
509
|
else
|
499
510
|
@col_info[col_num] =
|
500
|
-
|
501
|
-
.new(width, nil, 0, 0, 0, 1)
|
511
|
+
COLINFO.new(width, nil, 0, 0, 0, 1)
|
502
512
|
end
|
503
513
|
end
|
504
514
|
end
|
@@ -613,8 +623,17 @@ module Writexlsx
|
|
613
623
|
#
|
614
624
|
# This method is used to display the worksheet in "Page View/Layout" mode.
|
615
625
|
#
|
616
|
-
def set_page_view(flag =
|
617
|
-
@page_view =
|
626
|
+
def set_page_view(flag = 1)
|
627
|
+
@page_view = flag
|
628
|
+
end
|
629
|
+
|
630
|
+
#
|
631
|
+
# set_pagebreak_view
|
632
|
+
#
|
633
|
+
# Set the page view mode.
|
634
|
+
#
|
635
|
+
def set_pagebreak_view
|
636
|
+
@page_view = 2
|
618
637
|
end
|
619
638
|
|
620
639
|
#
|
@@ -649,7 +668,7 @@ module Writexlsx
|
|
649
668
|
raise 'Header string must be less than 255 characters' if string.length > 255
|
650
669
|
|
651
670
|
# Replace the Excel placeholder &[Picture] with the internal &G.
|
652
|
-
@page_setup.header = string.gsub(
|
671
|
+
@page_setup.header = string.gsub("&[Picture]", '&G')
|
653
672
|
|
654
673
|
@page_setup.header_footer_aligns = options[:align_with_margins] if options[:align_with_margins]
|
655
674
|
|
@@ -665,7 +684,7 @@ module Writexlsx
|
|
665
684
|
end
|
666
685
|
|
667
686
|
# placeholeder /&G/ の数
|
668
|
-
placeholder_count = @page_setup.header.scan(
|
687
|
+
placeholder_count = @page_setup.header.scan("&G").count
|
669
688
|
|
670
689
|
image_count = @header_images.count
|
671
690
|
|
@@ -686,7 +705,7 @@ module Writexlsx
|
|
686
705
|
@page_setup.footer = string.dup
|
687
706
|
|
688
707
|
# Replace the Excel placeholder &[Picture] with the internal &G.
|
689
|
-
@page_setup.footer = string.gsub(
|
708
|
+
@page_setup.footer = string.gsub("&[Picture]", '&G')
|
690
709
|
|
691
710
|
@page_setup.header_footer_aligns = options[:align_with_margins] if options[:align_with_margins]
|
692
711
|
|
@@ -702,7 +721,7 @@ module Writexlsx
|
|
702
721
|
end
|
703
722
|
|
704
723
|
# placeholeder /&G/ の数
|
705
|
-
placeholder_count = @page_setup.footer.scan(
|
724
|
+
placeholder_count = @page_setup.footer.scan("&G").count
|
706
725
|
|
707
726
|
image_count = @footer_images.count
|
708
727
|
|
@@ -1321,7 +1340,7 @@ module Writexlsx
|
|
1321
1340
|
# Utility method to strip equal sign and array braces from a formula
|
1322
1341
|
# and also expand out future and dynamic array formulas.
|
1323
1342
|
#
|
1324
|
-
def prepare_formula(given_formula)
|
1343
|
+
def prepare_formula(given_formula, expand_future_functions = nil)
|
1325
1344
|
# Ignore empty/null formulas.
|
1326
1345
|
return given_formula unless ptrue?(given_formula)
|
1327
1346
|
|
@@ -1332,26 +1351,46 @@ module Writexlsx
|
|
1332
1351
|
return formula if formula =~ /_xlfn\./
|
1333
1352
|
|
1334
1353
|
# Expand dynamic array formulas.
|
1335
|
-
formula = expand_formula(formula, '
|
1354
|
+
formula = expand_formula(formula, 'ANCHORARRAY\(')
|
1355
|
+
formula = expand_formula(formula, 'BYCOL\(')
|
1356
|
+
formula = expand_formula(formula, 'BYROW\(')
|
1357
|
+
formula = expand_formula(formula, 'CHOOSECOLS\(')
|
1358
|
+
formula = expand_formula(formula, 'CHOOSEROWS\(')
|
1359
|
+
formula = expand_formula(formula, 'DROP\(')
|
1360
|
+
formula = expand_formula(formula, 'EXPAND\(')
|
1361
|
+
formula = expand_formula(formula, 'FILTER\(', '._xlws')
|
1362
|
+
formula = expand_formula(formula, 'HSTACK\(')
|
1336
1363
|
formula = expand_formula(formula, 'LAMBDA\(')
|
1364
|
+
formula = expand_formula(formula, 'MAKEARRAY\(')
|
1365
|
+
formula = expand_formula(formula, 'MAP\(')
|
1366
|
+
formula = expand_formula(formula, 'RANDARRAY\(')
|
1367
|
+
formula = expand_formula(formula, 'REDUCE\(')
|
1368
|
+
formula = expand_formula(formula, 'SCAN\(')
|
1369
|
+
formula = expand_formula(formula, 'SEQUENCE\(')
|
1337
1370
|
formula = expand_formula(formula, 'SINGLE\(')
|
1371
|
+
formula = expand_formula(formula, 'SORT\(', '._xlws')
|
1338
1372
|
formula = expand_formula(formula, 'SORTBY\(')
|
1373
|
+
formula = expand_formula(formula, 'SWITCH\(')
|
1374
|
+
formula = expand_formula(formula, 'TAKE\(')
|
1375
|
+
formula = expand_formula(formula, 'TEXTSPLIT\(')
|
1376
|
+
formula = expand_formula(formula, 'TOCOL\(')
|
1377
|
+
formula = expand_formula(formula, 'TOROW\(')
|
1339
1378
|
formula = expand_formula(formula, 'UNIQUE\(')
|
1340
|
-
formula = expand_formula(formula, '
|
1379
|
+
formula = expand_formula(formula, 'VSTACK\(')
|
1380
|
+
formula = expand_formula(formula, 'WRAPCOLS\(')
|
1381
|
+
formula = expand_formula(formula, 'WRAPROWS\(')
|
1341
1382
|
formula = expand_formula(formula, 'XLOOKUP\(')
|
1342
|
-
formula = expand_formula(formula, 'SEQUENCE\(')
|
1343
|
-
formula = expand_formula(formula, 'RANDARRAY\(')
|
1344
|
-
formula = expand_formula(formula, 'SORT\(', '._xlws')
|
1345
|
-
formula = expand_formula(formula, 'ANCHORARRAY\(')
|
1346
|
-
formula = expand_formula(formula, 'FILTER\(', '._xlws')
|
1347
1383
|
|
1348
|
-
|
1384
|
+
if !@use_future_functions && !ptrue?(expand_future_functions)
|
1385
|
+
return formula
|
1386
|
+
end
|
1349
1387
|
|
1350
1388
|
# Future functions.
|
1351
1389
|
formula = expand_formula(formula, 'ACOTH\(')
|
1352
1390
|
formula = expand_formula(formula, 'ACOT\(')
|
1353
1391
|
formula = expand_formula(formula, 'AGGREGATE\(')
|
1354
1392
|
formula = expand_formula(formula, 'ARABIC\(')
|
1393
|
+
formula = expand_formula(formula, 'ARRAYTOTEXT\(')
|
1355
1394
|
formula = expand_formula(formula, 'BASE\(')
|
1356
1395
|
formula = expand_formula(formula, 'BETA.DIST\(')
|
1357
1396
|
formula = expand_formula(formula, 'BETA.INV\(')
|
@@ -1416,7 +1455,9 @@ module Writexlsx
|
|
1416
1455
|
formula = expand_formula(formula, 'IMSINH\(')
|
1417
1456
|
formula = expand_formula(formula, 'IMTAN\(')
|
1418
1457
|
formula = expand_formula(formula, 'ISFORMULA\(')
|
1458
|
+
formula = expand_formula(formula, 'ISOMITTED\(')
|
1419
1459
|
formula = expand_formula(formula, 'ISOWEEKNUM\(')
|
1460
|
+
formula = expand_formula(formula, 'LET\(')
|
1420
1461
|
formula = expand_formula(formula, 'LOGNORM.DIST\(')
|
1421
1462
|
formula = expand_formula(formula, 'LOGNORM.INV\(')
|
1422
1463
|
formula = expand_formula(formula, 'MAXIFS\(')
|
@@ -1451,24 +1492,26 @@ module Writexlsx
|
|
1451
1492
|
formula = expand_formula(formula, 'SKEW.P\(')
|
1452
1493
|
formula = expand_formula(formula, 'STDEV.P\(')
|
1453
1494
|
formula = expand_formula(formula, 'STDEV.S\(')
|
1454
|
-
formula = expand_formula(formula, 'SWITCH\(')
|
1455
1495
|
formula = expand_formula(formula, 'T.DIST.2T\(')
|
1456
1496
|
formula = expand_formula(formula, 'T.DIST.RT\(')
|
1457
1497
|
formula = expand_formula(formula, 'T.DIST\(')
|
1458
1498
|
formula = expand_formula(formula, 'T.INV.2T\(')
|
1459
1499
|
formula = expand_formula(formula, 'T.INV\(')
|
1460
1500
|
formula = expand_formula(formula, 'T.TEST\(')
|
1501
|
+
formula = expand_formula(formula, 'TEXTAFTER\(')
|
1502
|
+
formula = expand_formula(formula, 'TEXTBEFORE\(')
|
1461
1503
|
formula = expand_formula(formula, 'TEXTJOIN\(')
|
1462
1504
|
formula = expand_formula(formula, 'UNICHAR\(')
|
1463
1505
|
formula = expand_formula(formula, 'UNICODE\(')
|
1506
|
+
formula = expand_formula(formula, 'VALUETOTEXT\(')
|
1464
1507
|
formula = expand_formula(formula, 'VAR.P\(')
|
1465
1508
|
formula = expand_formula(formula, 'VAR.S\(')
|
1466
1509
|
formula = expand_formula(formula, 'WEBSERVICE\(')
|
1467
1510
|
formula = expand_formula(formula, 'WEIBULL.DIST\(')
|
1511
|
+
formula = expand_formula(formula, 'XMATCH\(')
|
1468
1512
|
formula = expand_formula(formula, 'XOR\(')
|
1469
1513
|
expand_formula(formula, 'Z.TEST\(')
|
1470
1514
|
end
|
1471
|
-
private :prepare_formula
|
1472
1515
|
|
1473
1516
|
#
|
1474
1517
|
# :call-seq:
|
@@ -1552,7 +1595,7 @@ module Writexlsx
|
|
1552
1595
|
end
|
1553
1596
|
|
1554
1597
|
# Modify the formula string, as needed.
|
1555
|
-
formula = prepare_formula(formula)
|
1598
|
+
formula = prepare_formula(formula, 1)
|
1556
1599
|
|
1557
1600
|
store_data_to_table(
|
1558
1601
|
if type == 'a'
|
@@ -2927,7 +2970,7 @@ module Writexlsx
|
|
2927
2970
|
tokens.map! do |token|
|
2928
2971
|
token.sub!(/^"/, '')
|
2929
2972
|
token.sub!(/"$/, '')
|
2930
|
-
token.gsub!(
|
2973
|
+
token.gsub!('""', '"')
|
2931
2974
|
|
2932
2975
|
# if token is number, convert to numeric.
|
2933
2976
|
if token =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/
|
@@ -3209,13 +3252,13 @@ module Writexlsx
|
|
3209
3252
|
target = escape_url(url.sub(/^external:/, ''))
|
3210
3253
|
|
3211
3254
|
# Additional escape not required in worksheet hyperlinks
|
3212
|
-
target = target.gsub(
|
3255
|
+
target = target.gsub("#", '%23')
|
3213
3256
|
|
3214
3257
|
# Prefix absolute paths (not relative) with file:///
|
3215
3258
|
target = if target =~ /^\w:/ || target =~ /^\\\\/
|
3216
3259
|
"file:///#{target}"
|
3217
3260
|
else
|
3218
|
-
target.gsub(
|
3261
|
+
target.gsub("\\", '/')
|
3219
3262
|
end
|
3220
3263
|
end
|
3221
3264
|
|
@@ -3438,7 +3481,7 @@ EOS
|
|
3438
3481
|
def encode_password(password) # :nodoc:
|
3439
3482
|
hash = 0
|
3440
3483
|
|
3441
|
-
password.reverse.split(
|
3484
|
+
password.reverse.split("").each do |char|
|
3442
3485
|
hash = ((hash >> 14) & 0x01) | ((hash << 1) & 0x7fff)
|
3443
3486
|
hash ^= char.ord
|
3444
3487
|
end
|
@@ -3560,16 +3603,27 @@ EOS
|
|
3560
3603
|
attributes << ["showOutlineSymbols", 0] if @outline_on
|
3561
3604
|
|
3562
3605
|
# Set the page view/layout mode if required.
|
3563
|
-
|
3564
|
-
|
3606
|
+
case @page_view
|
3607
|
+
when 1
|
3608
|
+
attributes << %w[view pageLayout]
|
3609
|
+
when 2
|
3610
|
+
attributes << %w[view pageBreakPreview]
|
3611
|
+
end
|
3565
3612
|
|
3566
3613
|
# Set the first visible cell.
|
3567
3614
|
attributes << ['topLeftCell', @top_left_cell] if ptrue?(@top_left_cell)
|
3568
3615
|
|
3569
3616
|
# Set the zoom level.
|
3570
3617
|
if @zoom != 100
|
3571
|
-
attributes << ['zoomScale', @zoom]
|
3572
|
-
|
3618
|
+
attributes << ['zoomScale', @zoom]
|
3619
|
+
|
3620
|
+
if @page_view == 1
|
3621
|
+
attributes << ['zoomScalePageLayoutView', @zoom]
|
3622
|
+
elsif @page_view == 2
|
3623
|
+
attributes << ['zoomScaleSheetLayoutView', @zoom]
|
3624
|
+
elsif ptrue?(@zoom_scale_normal)
|
3625
|
+
attributes << ['zoomScaleNormal', @zoom]
|
3626
|
+
end
|
3573
3627
|
end
|
3574
3628
|
|
3575
3629
|
attributes << ['workbookViewId', 0]
|
@@ -3755,9 +3809,10 @@ EOS
|
|
3755
3809
|
|
3756
3810
|
def write_cell_column_dimension(row_num) # :nodoc:
|
3757
3811
|
row = @cell_data_table[row_num]
|
3812
|
+
row_name = (row_num + 1).to_s
|
3758
3813
|
(@dim_colmin..@dim_colmax).each do |col_num|
|
3759
3814
|
if (cell = row[col_num])
|
3760
|
-
cell.write_cell(self, row_num, col_num)
|
3815
|
+
cell.write_cell(self, row_num, row_name, col_num)
|
3761
3816
|
end
|
3762
3817
|
end
|
3763
3818
|
end
|
@@ -4756,10 +4811,6 @@ EOS
|
|
4756
4811
|
ptrue?(@zoom_scale_normal)
|
4757
4812
|
end
|
4758
4813
|
|
4759
|
-
def page_view? # :nodoc:
|
4760
|
-
!!@page_view
|
4761
|
-
end
|
4762
|
-
|
4763
4814
|
def right_to_left? # :nodoc:
|
4764
4815
|
!!@right_to_left
|
4765
4816
|
end
|
data/write_xlsx.gemspec
CHANGED
@@ -20,9 +20,11 @@ Gem::Specification.new do |gem|
|
|
20
20
|
end
|
21
21
|
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
22
22
|
gem.require_paths = ['lib']
|
23
|
+
gem.add_runtime_dependency 'nkf'
|
23
24
|
gem.add_runtime_dependency 'rubyzip', '>= 1.0.0'
|
24
25
|
gem.add_development_dependency 'byebug'
|
25
26
|
gem.add_development_dependency 'minitest'
|
27
|
+
gem.add_development_dependency 'mutex_m'
|
26
28
|
gem.add_development_dependency 'rake'
|
27
29
|
gem.add_development_dependency 'rubocop'
|
28
30
|
gem.add_development_dependency 'rubocop-minitest'
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: write_xlsx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.11.
|
4
|
+
version: 1.11.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hideo NAKAMURA
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nkf
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rubyzip
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +66,20 @@ dependencies:
|
|
52
66
|
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mutex_m
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
55
83
|
- !ruby/object:Gem::Dependency
|
56
84
|
name: rake
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -276,7 +304,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
276
304
|
- !ruby/object:Gem::Version
|
277
305
|
version: '0'
|
278
306
|
requirements: []
|
279
|
-
rubygems_version: 3.
|
307
|
+
rubygems_version: 3.5.3
|
280
308
|
signing_key:
|
281
309
|
specification_version: 4
|
282
310
|
summary: write_xlsx is a gem to create a new file in the Excel 2007+ XLSX format.
|