write_xlsx 1.11.1 → 1.12.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.
@@ -113,7 +113,8 @@ module Writexlsx
113
113
  @drawing_rels_id = 0
114
114
  @vml_drawing_rels = {}
115
115
  @vml_drawing_rels_id = 0
116
- @has_dynamic_arrays = false
116
+ @has_dynamic_functions = false
117
+ @has_embedded_images = false
117
118
 
118
119
  @use_future_functions = false
119
120
 
@@ -160,6 +161,8 @@ module Writexlsx
160
161
  @page_setup.margin_footer = 0.5
161
162
  @page_setup.header_footer_aligns = false
162
163
  end
164
+
165
+ @embedded_image_indexes = @workbook.embedded_image_indexes
163
166
  end
164
167
 
165
168
  def set_xml_writer(filename) # :nodoc:
@@ -228,15 +231,26 @@ module Writexlsx
228
231
  #
229
232
  # Hide this worksheet.
230
233
  #
231
- def hide
232
- @hidden = true
234
+ def hide(hidden = :hidden)
235
+ @hidden = hidden
233
236
  @selected = false
234
237
  @workbook.activesheet = 0 if @workbook.activesheet == @index
235
238
  @workbook.firstsheet = 0 if @workbook.firstsheet == @index
236
239
  end
237
240
 
241
+ #
242
+ # Hide this worksheet. This can only be unhidden from VBA.
243
+ #
244
+ def very_hidden
245
+ hide(:very_hidden)
246
+ end
247
+
238
248
  def hidden? # :nodoc:
239
- @hidden
249
+ @hidden == :hidden
250
+ end
251
+
252
+ def very_hidden? # :nodoc:
253
+ @hidden == :very_hidden
240
254
  end
241
255
 
242
256
  #
@@ -271,7 +285,7 @@ module Writexlsx
271
285
  if range.nil?
272
286
  raise "The range must be defined in unprotect_range())\n"
273
287
  else
274
- range = range.gsub(/\$/, "")
288
+ range = range.gsub("$", "")
275
289
  range = range.sub(/^=/, "")
276
290
  @num_protected_ranges += 1
277
291
  end
@@ -612,8 +626,17 @@ module Writexlsx
612
626
  #
613
627
  # This method is used to display the worksheet in "Page View/Layout" mode.
614
628
  #
615
- def set_page_view(flag = true)
616
- @page_view = !!flag
629
+ def set_page_view(flag = 1)
630
+ @page_view = flag
631
+ end
632
+
633
+ #
634
+ # set_pagebreak_view
635
+ #
636
+ # Set the page view mode.
637
+ #
638
+ def set_pagebreak_view
639
+ @page_view = 2
617
640
  end
618
641
 
619
642
  #
@@ -648,7 +671,7 @@ module Writexlsx
648
671
  raise 'Header string must be less than 255 characters' if string.length > 255
649
672
 
650
673
  # Replace the Excel placeholder &[Picture] with the internal &G.
651
- @page_setup.header = string.gsub(/&\[Picture\]/, '&G')
674
+ @page_setup.header = string.gsub("&[Picture]", '&G')
652
675
 
653
676
  @page_setup.header_footer_aligns = options[:align_with_margins] if options[:align_with_margins]
654
677
 
@@ -664,7 +687,7 @@ module Writexlsx
664
687
  end
665
688
 
666
689
  # placeholeder /&G/ の数
667
- placeholder_count = @page_setup.header.scan(/&G/).count
690
+ placeholder_count = @page_setup.header.scan("&G").count
668
691
 
669
692
  image_count = @header_images.count
670
693
 
@@ -685,7 +708,7 @@ module Writexlsx
685
708
  @page_setup.footer = string.dup
686
709
 
687
710
  # Replace the Excel placeholder &[Picture] with the internal &G.
688
- @page_setup.footer = string.gsub(/&\[Picture\]/, '&G')
711
+ @page_setup.footer = string.gsub("&[Picture]", '&G')
689
712
 
690
713
  @page_setup.header_footer_aligns = options[:align_with_margins] if options[:align_with_margins]
691
714
 
@@ -701,7 +724,7 @@ module Writexlsx
701
724
  end
702
725
 
703
726
  # placeholeder /&G/ の数
704
- placeholder_count = @page_setup.footer.scan(/&G/).count
727
+ placeholder_count = @page_setup.footer.scan("&G").count
705
728
 
706
729
  image_count = @footer_images.count
707
730
 
@@ -1320,7 +1343,7 @@ module Writexlsx
1320
1343
  # Utility method to strip equal sign and array braces from a formula
1321
1344
  # and also expand out future and dynamic array formulas.
1322
1345
  #
1323
- def prepare_formula(given_formula)
1346
+ def prepare_formula(given_formula, expand_future_functions = nil)
1324
1347
  # Ignore empty/null formulas.
1325
1348
  return given_formula unless ptrue?(given_formula)
1326
1349
 
@@ -1331,26 +1354,46 @@ module Writexlsx
1331
1354
  return formula if formula =~ /_xlfn\./
1332
1355
 
1333
1356
  # Expand dynamic array formulas.
1334
- formula = expand_formula(formula, 'LET\(')
1357
+ formula = expand_formula(formula, 'ANCHORARRAY\(')
1358
+ formula = expand_formula(formula, 'BYCOL\(')
1359
+ formula = expand_formula(formula, 'BYROW\(')
1360
+ formula = expand_formula(formula, 'CHOOSECOLS\(')
1361
+ formula = expand_formula(formula, 'CHOOSEROWS\(')
1362
+ formula = expand_formula(formula, 'DROP\(')
1363
+ formula = expand_formula(formula, 'EXPAND\(')
1364
+ formula = expand_formula(formula, 'FILTER\(', '._xlws')
1365
+ formula = expand_formula(formula, 'HSTACK\(')
1335
1366
  formula = expand_formula(formula, 'LAMBDA\(')
1367
+ formula = expand_formula(formula, 'MAKEARRAY\(')
1368
+ formula = expand_formula(formula, 'MAP\(')
1369
+ formula = expand_formula(formula, 'RANDARRAY\(')
1370
+ formula = expand_formula(formula, 'REDUCE\(')
1371
+ formula = expand_formula(formula, 'SCAN\(')
1372
+ formula = expand_formula(formula, 'SEQUENCE\(')
1336
1373
  formula = expand_formula(formula, 'SINGLE\(')
1374
+ formula = expand_formula(formula, 'SORT\(', '._xlws')
1337
1375
  formula = expand_formula(formula, 'SORTBY\(')
1376
+ formula = expand_formula(formula, 'SWITCH\(')
1377
+ formula = expand_formula(formula, 'TAKE\(')
1378
+ formula = expand_formula(formula, 'TEXTSPLIT\(')
1379
+ formula = expand_formula(formula, 'TOCOL\(')
1380
+ formula = expand_formula(formula, 'TOROW\(')
1338
1381
  formula = expand_formula(formula, 'UNIQUE\(')
1339
- formula = expand_formula(formula, 'XMATCH\(')
1382
+ formula = expand_formula(formula, 'VSTACK\(')
1383
+ formula = expand_formula(formula, 'WRAPCOLS\(')
1384
+ formula = expand_formula(formula, 'WRAPROWS\(')
1340
1385
  formula = expand_formula(formula, 'XLOOKUP\(')
1341
- formula = expand_formula(formula, 'SEQUENCE\(')
1342
- formula = expand_formula(formula, 'RANDARRAY\(')
1343
- formula = expand_formula(formula, 'SORT\(', '._xlws')
1344
- formula = expand_formula(formula, 'ANCHORARRAY\(')
1345
- formula = expand_formula(formula, 'FILTER\(', '._xlws')
1346
1386
 
1347
- return formula unless @use_future_functions
1387
+ if !@use_future_functions && !ptrue?(expand_future_functions)
1388
+ return formula
1389
+ end
1348
1390
 
1349
1391
  # Future functions.
1350
1392
  formula = expand_formula(formula, 'ACOTH\(')
1351
1393
  formula = expand_formula(formula, 'ACOT\(')
1352
1394
  formula = expand_formula(formula, 'AGGREGATE\(')
1353
1395
  formula = expand_formula(formula, 'ARABIC\(')
1396
+ formula = expand_formula(formula, 'ARRAYTOTEXT\(')
1354
1397
  formula = expand_formula(formula, 'BASE\(')
1355
1398
  formula = expand_formula(formula, 'BETA.DIST\(')
1356
1399
  formula = expand_formula(formula, 'BETA.INV\(')
@@ -1406,6 +1449,7 @@ module Writexlsx
1406
1449
  formula = expand_formula(formula, 'HYPGEOM.DIST\(')
1407
1450
  formula = expand_formula(formula, 'IFNA\(')
1408
1451
  formula = expand_formula(formula, 'IFS\(')
1452
+ formula = expand_formula(formula, 'IMAGE\(')
1409
1453
  formula = expand_formula(formula, 'IMCOSH\(')
1410
1454
  formula = expand_formula(formula, 'IMCOT\(')
1411
1455
  formula = expand_formula(formula, 'IMCSCH\(')
@@ -1415,7 +1459,9 @@ module Writexlsx
1415
1459
  formula = expand_formula(formula, 'IMSINH\(')
1416
1460
  formula = expand_formula(formula, 'IMTAN\(')
1417
1461
  formula = expand_formula(formula, 'ISFORMULA\(')
1462
+ formula = expand_formula(formula, 'ISOMITTED\(')
1418
1463
  formula = expand_formula(formula, 'ISOWEEKNUM\(')
1464
+ formula = expand_formula(formula, 'LET\(')
1419
1465
  formula = expand_formula(formula, 'LOGNORM.DIST\(')
1420
1466
  formula = expand_formula(formula, 'LOGNORM.INV\(')
1421
1467
  formula = expand_formula(formula, 'MAXIFS\(')
@@ -1450,24 +1496,26 @@ module Writexlsx
1450
1496
  formula = expand_formula(formula, 'SKEW.P\(')
1451
1497
  formula = expand_formula(formula, 'STDEV.P\(')
1452
1498
  formula = expand_formula(formula, 'STDEV.S\(')
1453
- formula = expand_formula(formula, 'SWITCH\(')
1454
1499
  formula = expand_formula(formula, 'T.DIST.2T\(')
1455
1500
  formula = expand_formula(formula, 'T.DIST.RT\(')
1456
1501
  formula = expand_formula(formula, 'T.DIST\(')
1457
1502
  formula = expand_formula(formula, 'T.INV.2T\(')
1458
1503
  formula = expand_formula(formula, 'T.INV\(')
1459
1504
  formula = expand_formula(formula, 'T.TEST\(')
1505
+ formula = expand_formula(formula, 'TEXTAFTER\(')
1506
+ formula = expand_formula(formula, 'TEXTBEFORE\(')
1460
1507
  formula = expand_formula(formula, 'TEXTJOIN\(')
1461
1508
  formula = expand_formula(formula, 'UNICHAR\(')
1462
1509
  formula = expand_formula(formula, 'UNICODE\(')
1510
+ formula = expand_formula(formula, 'VALUETOTEXT\(')
1463
1511
  formula = expand_formula(formula, 'VAR.P\(')
1464
1512
  formula = expand_formula(formula, 'VAR.S\(')
1465
1513
  formula = expand_formula(formula, 'WEBSERVICE\(')
1466
1514
  formula = expand_formula(formula, 'WEIBULL.DIST\(')
1515
+ formula = expand_formula(formula, 'XMATCH\(')
1467
1516
  formula = expand_formula(formula, 'XOR\(')
1468
1517
  expand_formula(formula, 'Z.TEST\(')
1469
1518
  end
1470
- private :prepare_formula
1471
1519
 
1472
1520
  #
1473
1521
  # :call-seq:
@@ -1492,7 +1540,7 @@ module Writexlsx
1492
1540
  raise WriteXLSXInsufficientArgumentError if [_row, _col, _formula].include?(nil)
1493
1541
 
1494
1542
  # Check for dynamic array functions.
1495
- regex = /\bLET\(|\bSORT\(|\bLAMBDA\(|\bSINGLE\(|\bSORTBY\(|\bUNIQUE\(|\bXMATCH\(|\bFILTER\(|\bXLOOKUP\(|\bSEQUENCE\(|\bRANDARRAY\(|\bANCHORARRAY\(/
1543
+ regex = /\bANCHORARRAY\(|\bBYCOL\(|\bBYROW\(|\bCHOOSECOLS\(|\bCHOOSEROWS\(|\bDROP\(|\bEXPAND\(|\bFILTER\(|\bHSTACK\(|\bLAMBDA\(|\bMAKEARRAY\(|\bMAP\(|\bRANDARRAY\(|\bREDUCE\(|\bSCAN\(|\bSEQUENCE\(|\bSINGLE\(|\bSORT\(|\bSORTBY\(|\bSWITCH\(|\bTAKE\(|\bTEXTSPLIT\(|\bTOCOL\(|\bTOROW\(|\bUNIQUE\(|\bVSTACK\(|\bWRAPCOLS\(|\bWRAPROWS\(|\bXLOOKUP\(/
1496
1544
  if _formula =~ regex
1497
1545
  return write_dynamic_array_formula(
1498
1546
  _row, _col, _row, _col, _formula, _format, _value
@@ -1505,7 +1553,7 @@ module Writexlsx
1505
1553
  else
1506
1554
  check_dimensions(_row, _col)
1507
1555
  store_row_col_max_min_values(_row, _col)
1508
- _formula = _formula.sub(/^=/, '')
1556
+ _formula = prepare_formula(_formula)
1509
1557
 
1510
1558
  store_data_to_table(FormulaCellData.new(_formula, _format, _value), _row, _col)
1511
1559
  end
@@ -1551,7 +1599,7 @@ module Writexlsx
1551
1599
  end
1552
1600
 
1553
1601
  # Modify the formula string, as needed.
1554
- formula = prepare_formula(formula)
1602
+ formula = prepare_formula(formula, 1)
1555
1603
 
1556
1604
  store_data_to_table(
1557
1605
  if type == 'a'
@@ -1590,7 +1638,7 @@ module Writexlsx
1590
1638
  #
1591
1639
  def write_dynamic_array_formula(row1, col1, row2 = nil, col2 = nil, formula = nil, format = nil, value = nil)
1592
1640
  write_array_formula_base('d', row1, col1, row2, col2, formula, format, value)
1593
- @has_dynamic_arrays = true
1641
+ @has_dynamic_functions = true
1594
1642
  end
1595
1643
 
1596
1644
  #
@@ -1738,21 +1786,23 @@ module Writexlsx
1738
1786
  # The label is written using the {#write()}[#method-i-write] method. Therefore it is
1739
1787
  # possible to write strings, numbers or formulas as labels.
1740
1788
  #
1741
- def write_url(row, col, url = nil, format = nil, str = nil, tip = nil)
1789
+ def write_url(row, col, url = nil, format = nil, str = nil, tip = nil, ignore_write_string = false)
1742
1790
  # Check for a cell reference in A1 notation and substitute row and column
1743
1791
  if (row_col_array = row_col_notation(row))
1744
- _row, _col = row_col_array
1745
- _url = col
1746
- _format = url
1747
- _str = format
1748
- _tip = str
1792
+ _row, _col = row_col_array
1793
+ _url = col
1794
+ _format = url
1795
+ _str = format
1796
+ _tip = str
1797
+ _ignore_write_string = tip
1749
1798
  else
1750
- _row = row
1751
- _col = col
1752
- _url = url
1753
- _format = format
1754
- _str = str
1755
- _tip = tip
1799
+ _row = row
1800
+ _col = col
1801
+ _url = url
1802
+ _format = format
1803
+ _str = str
1804
+ _tip = tip
1805
+ _ignore_write_string = ignore_write_string
1756
1806
  end
1757
1807
  _format, _str = _str, _format if _str.respond_to?(:xf_index) || !_format.respond_to?(:xf_index)
1758
1808
  raise WriteXLSXInsufficientArgumentError if [_row, _col, _url].include?(nil)
@@ -1770,7 +1820,7 @@ module Writexlsx
1770
1820
  _format ||= @default_url_format
1771
1821
 
1772
1822
  # Write the hyperlink string.
1773
- write_string(_row, _col, hyperlink.str, _format)
1823
+ write_string(_row, _col, hyperlink.str, _format) unless _ignore_write_string
1774
1824
  end
1775
1825
 
1776
1826
  #
@@ -1915,6 +1965,65 @@ module Writexlsx
1915
1965
  ]
1916
1966
  end
1917
1967
 
1968
+ #
1969
+ # Embed an image into the worksheet.
1970
+ #
1971
+ def embed_image(row, col, filename, options = nil)
1972
+ # Check for a cell reference in A1 notation and substitute row and column.
1973
+ if (row_col_array = row_col_notation(row))
1974
+ _row, _col = row_col_array
1975
+ image = col
1976
+ _options = filename
1977
+ else
1978
+ _row = row
1979
+ _col = col
1980
+ image = filename
1981
+ _options = options
1982
+ end
1983
+ xf, url, tip, description, decorative = []
1984
+
1985
+ raise WriteXLSXInsufficientArgumentError if [_row, _col, image].include?(nil)
1986
+ raise "Couldn't locate #{image}" unless File.exist?(image)
1987
+
1988
+ # Check that row and col are valid and store max and min values
1989
+ check_dimensions(_row, _col)
1990
+ store_row_col_max_min_values(_row, _col)
1991
+
1992
+ if options
1993
+ xf = options[:cell_format]
1994
+ url = options[:url]
1995
+ tip = options[:tip]
1996
+ description = options[:description]
1997
+ decorative = options[:decorative]
1998
+ end
1999
+
2000
+ # Write the url without writing a string.
2001
+ if url
2002
+ xf ||= @default_url_format
2003
+
2004
+ write_url(row, col, url, xf, nil, tip, true)
2005
+ end
2006
+
2007
+ # Get the image properties, mainly for the type and checksum.
2008
+ image_properties = get_image_properties(image)
2009
+ type = image_properties[0]
2010
+ md5 = image_properties[6]
2011
+
2012
+ # Check for duplicate images.
2013
+ image_index = @embedded_image_indexes[md5]
2014
+
2015
+ unless ptrue?(image_index)
2016
+ @workbook.embedded_images << [image, type, description, decorative]
2017
+
2018
+ image_index = @workbook.embedded_images.size
2019
+ @embedded_image_indexes[md5] = image_index
2020
+ end
2021
+
2022
+ # Write the cell placeholder.
2023
+ store_data_to_table(EmbedImageCellData.new(image_index, xf), _row, _col)
2024
+ @has_embedded_images = true
2025
+ end
2026
+
1918
2027
  #
1919
2028
  # :call-seq:
1920
2029
  # repeat_formula(row, column, formula [ , format ])
@@ -2755,8 +2864,12 @@ module Writexlsx
2755
2864
  end
2756
2865
  end
2757
2866
 
2758
- def has_dynamic_arrays?
2759
- @has_dynamic_arrays
2867
+ def has_dynamic_functions?
2868
+ @has_dynamic_functions
2869
+ end
2870
+
2871
+ def has_embedded_images?
2872
+ @has_embedded_images
2760
2873
  end
2761
2874
 
2762
2875
  private
@@ -2926,7 +3039,7 @@ module Writexlsx
2926
3039
  tokens.map! do |token|
2927
3040
  token.sub!(/^"/, '')
2928
3041
  token.sub!(/"$/, '')
2929
- token.gsub!(/""/, '"')
3042
+ token.gsub!('""', '"')
2930
3043
 
2931
3044
  # if token is number, convert to numeric.
2932
3045
  if token =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/
@@ -3208,13 +3321,13 @@ module Writexlsx
3208
3321
  target = escape_url(url.sub(/^external:/, ''))
3209
3322
 
3210
3323
  # Additional escape not required in worksheet hyperlinks
3211
- target = target.gsub(/#/, '%23')
3324
+ target = target.gsub("#", '%23')
3212
3325
 
3213
3326
  # Prefix absolute paths (not relative) with file:///
3214
3327
  target = if target =~ /^\w:/ || target =~ /^\\\\/
3215
3328
  "file:///#{target}"
3216
3329
  else
3217
- target.gsub(/\\/, '/')
3330
+ target.gsub("\\", '/')
3218
3331
  end
3219
3332
  end
3220
3333
 
@@ -3234,6 +3347,7 @@ EOS
3234
3347
  end
3235
3348
 
3236
3349
  @drawing_links << ['/image', "../media/image#{image_id}.#{image_type}"] unless @drawing_rels[md5]
3350
+
3237
3351
  drawing.rel_index = drawing_rel_index(md5)
3238
3352
  end
3239
3353
  public :prepare_image
@@ -3437,7 +3551,7 @@ EOS
3437
3551
  def encode_password(password) # :nodoc:
3438
3552
  hash = 0
3439
3553
 
3440
- password.reverse.split(//).each do |char|
3554
+ password.reverse.split("").each do |char|
3441
3555
  hash = ((hash >> 14) & 0x01) | ((hash << 1) & 0x7fff)
3442
3556
  hash ^= char.ord
3443
3557
  end
@@ -3559,16 +3673,27 @@ EOS
3559
3673
  attributes << ["showOutlineSymbols", 0] if @outline_on
3560
3674
 
3561
3675
  # Set the page view/layout mode if required.
3562
- # TODO. Add pageBreakPreview mode when requested.
3563
- attributes << %w[view pageLayout] if page_view?
3676
+ case @page_view
3677
+ when 1
3678
+ attributes << %w[view pageLayout]
3679
+ when 2
3680
+ attributes << %w[view pageBreakPreview]
3681
+ end
3564
3682
 
3565
3683
  # Set the first visible cell.
3566
3684
  attributes << ['topLeftCell', @top_left_cell] if ptrue?(@top_left_cell)
3567
3685
 
3568
3686
  # Set the zoom level.
3569
3687
  if @zoom != 100
3570
- attributes << ['zoomScale', @zoom] unless page_view?
3571
- attributes << ['zoomScaleNormal', @zoom] if zoom_scale_normal?
3688
+ attributes << ['zoomScale', @zoom]
3689
+
3690
+ if @page_view == 1
3691
+ attributes << ['zoomScalePageLayoutView', @zoom]
3692
+ elsif @page_view == 2
3693
+ attributes << ['zoomScaleSheetLayoutView', @zoom]
3694
+ elsif ptrue?(@zoom_scale_normal)
3695
+ attributes << ['zoomScaleNormal', @zoom]
3696
+ end
3572
3697
  end
3573
3698
 
3574
3699
  attributes << ['workbookViewId', 0]
@@ -3754,9 +3879,10 @@ EOS
3754
3879
 
3755
3880
  def write_cell_column_dimension(row_num) # :nodoc:
3756
3881
  row = @cell_data_table[row_num]
3882
+ row_name = (row_num + 1).to_s
3757
3883
  (@dim_colmin..@dim_colmax).each do |col_num|
3758
3884
  if (cell = row[col_num])
3759
- cell.write_cell(self, row_num, col_num)
3885
+ cell.write_cell(self, row_num, row_name, col_num)
3760
3886
  end
3761
3887
  end
3762
3888
  end
@@ -4200,9 +4326,10 @@ EOS
4200
4326
 
4201
4327
  # If the cell isn't a string then we have to add the url as
4202
4328
  # the string to display
4203
- if ptrue?(@cell_data_table) &&
4204
- ptrue?(@cell_data_table[row_num]) &&
4205
- ptrue?(@cell_data_table[row_num][col_num]) && @cell_data_table[row_num][col_num].display_url_string?
4329
+ if ptrue?(@cell_data_table) &&
4330
+ ptrue?(@cell_data_table[row_num]) &&
4331
+ ptrue?(@cell_data_table[row_num][col_num]) &&
4332
+ @cell_data_table[row_num][col_num].display_url_string?
4206
4333
  link.display_on
4207
4334
  end
4208
4335
 
@@ -4755,10 +4882,6 @@ EOS
4755
4882
  ptrue?(@zoom_scale_normal)
4756
4883
  end
4757
4884
 
4758
- def page_view? # :nodoc:
4759
- !!@page_view
4760
- end
4761
-
4762
4885
  def right_to_left? # :nodoc:
4763
4886
  !!@right_to_left
4764
4887
  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.1
4
+ version: 1.12.0
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-08-08 00:00:00.000000000 Z
11
+ date: 2024-04-12 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
@@ -238,6 +266,10 @@ files:
238
266
  - lib/write_xlsx/package/metadata.rb
239
267
  - lib/write_xlsx/package/packager.rb
240
268
  - lib/write_xlsx/package/relationships.rb
269
+ - lib/write_xlsx/package/rich_value.rb
270
+ - lib/write_xlsx/package/rich_value_rel.rb
271
+ - lib/write_xlsx/package/rich_value_structure.rb
272
+ - lib/write_xlsx/package/rich_value_types.rb
241
273
  - lib/write_xlsx/package/shared_strings.rb
242
274
  - lib/write_xlsx/package/styles.rb
243
275
  - lib/write_xlsx/package/table.rb
@@ -276,7 +308,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
276
308
  - !ruby/object:Gem::Version
277
309
  version: '0'
278
310
  requirements: []
279
- rubygems_version: 3.4.10
311
+ rubygems_version: 3.4.19
280
312
  signing_key:
281
313
  specification_version: 4
282
314
  summary: write_xlsx is a gem to create a new file in the Excel 2007+ XLSX format.