write_xlsx 1.11.1 → 1.12.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.