write_xlsx 1.08.0 → 1.08.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0bce1d8cc8f140d38ac7d9149e644d8b1d5133c80933fc2faa2a33d25dcbd168
4
- data.tar.gz: 4edf0897d13ec8cee0b545177fe4117286067ba2e14b89c2866192885414633b
3
+ metadata.gz: 9ab3f33d51239105a5d5c8e0765ada850496c199a370e713353c56d0e0764e4b
4
+ data.tar.gz: 4b379953050d7a9a5c4151742825c7672c66e60b7c37146531f8d0075d32b634
5
5
  SHA512:
6
- metadata.gz: 267233a3a8222f817bc455b5d8723bf29808854a7b5410c090becd44baee604201b53792f03b29db84c2fa82f9a4085e11175893abb11bab50b1a74c9f0526e8
7
- data.tar.gz: bc5138fcae79f92aaa9a5d6d708575e9615cec51e4c229ec46e0e75e45bc1eca37056f27466f321c8ad6376119bd37c61754b8809c991fd2352ca8a1108089f0
6
+ metadata.gz: 128e52ae31ef667b30e8c6649c1747abf75750e48bd1a7a9a95cedd69ab3699f55755c9ef2686da4252642c662ed871b41ebb90cabe6d23e56f319b958db89b9
7
+ data.tar.gz: 31b68e29186266b216aaf8dc2035619292999146e79a9388c1d46dcbdd4704d17688586733dc8bb2b6284865340a68d62c7de6cd738a1ed9f6e68c83f388e94e
@@ -189,6 +189,14 @@ module Writexlsx
189
189
  param[:header_row] ||= 1
190
190
  param[:autofilter] ||= 1
191
191
 
192
+ # Check that there are enough rows.
193
+ num_rows = row2 - row1
194
+ num_rows -= 1 if ptrue?(param[:header_row])
195
+
196
+ if num_rows < 0
197
+ raise "Must have at least one data row in in add_table()"
198
+ end
199
+
192
200
  # If the header row if off the default is to turn autofilter off.
193
201
  param[:autofilter] = 0 if param[:header_row] == 0
194
202
 
@@ -1 +1 @@
1
- WriteXLSX_VERSION = "1.08.0"
1
+ WriteXLSX_VERSION = "1.08.1"
@@ -381,6 +381,7 @@ module Writexlsx
381
381
  @comments = Package::Comments.new(self)
382
382
  @buttons_array = []
383
383
  @header_images_array = []
384
+ @ignore_errors = nil
384
385
 
385
386
  @validations = []
386
387
 
@@ -431,6 +432,7 @@ module Writexlsx
431
432
  write_header_footer
432
433
  write_row_breaks
433
434
  write_col_breaks
435
+ write_ignored_errors
434
436
  write_drawings
435
437
  write_legacy_drawing
436
438
  write_legacy_drawing_hf
@@ -1224,14 +1226,10 @@ module Writexlsx
1224
1226
  # distribution.
1225
1227
  #
1226
1228
  def set_header(string = '', margin = 0.3, options = {})
1227
- raise 'Header string must be less than 255 characters' if string.length >= 255
1229
+ raise 'Header string must be less than 255 characters' if string.length > 255
1228
1230
  # Replace the Excel placeholder &[Picture] with the internal &G.
1229
1231
  @page_setup.header = string.gsub(/&\[Picture\]/, '&G')
1230
1232
 
1231
- if string.size >= 255
1232
- raise 'Header string must be less than 255 characters'
1233
- end
1234
-
1235
1233
  if options[:align_with_margins]
1236
1234
  @page_setup.header_footer_aligns = options[:align_with_margins]
1237
1235
  end
@@ -1272,17 +1270,13 @@ module Writexlsx
1272
1270
  # The syntax of the set_footer() method is the same as set_header()
1273
1271
  #
1274
1272
  def set_footer(string = '', margin = 0.3, options = {})
1275
- raise 'Footer string must be less than 255 characters' if string.length >= 255
1273
+ raise 'Footer string must be less than 255 characters' if string.length > 255
1276
1274
 
1277
1275
  @page_setup.footer = string.dup
1278
1276
 
1279
1277
  # Replace the Excel placeholder &[Picture] with the internal &G.
1280
1278
  @page_setup.footer = string.gsub(/&\[Picture\]/, '&G')
1281
1279
 
1282
- if string.size >= 255
1283
- raise 'Header string must be less than 255 characters'
1284
- end
1285
-
1286
1280
  if options[:align_with_margins]
1287
1281
  @page_setup.header_footer_aligns = options[:align_with_margins]
1288
1282
  end
@@ -6087,6 +6081,30 @@ module Writexlsx
6087
6081
  end
6088
6082
  end
6089
6083
 
6084
+ #
6085
+ # Ignore worksheet errors/warnings in user defined ranges.
6086
+ #
6087
+ def ignore_errors(ignores)
6088
+ # List of valid input parameters.
6089
+ valid_parameter_keys = [
6090
+ :number_stored_as_text,
6091
+ :eval_error,
6092
+ :formula_differs,
6093
+ :formula_range,
6094
+ :formula_unlocked,
6095
+ :empty_cell_reference,
6096
+ :list_data_validation,
6097
+ :calculated_column,
6098
+ :two_digit_text_year
6099
+ ]
6100
+
6101
+ unless (ignores.keys - valid_parameter_keys).empty?
6102
+ raise "Unknown parameter '#{ignores.key - valid_parameter_keys}' in ignore_errors()."
6103
+ end
6104
+
6105
+ @ignore_errors = ignores
6106
+ end
6107
+
6090
6108
  def write_ext(url)
6091
6109
  attributes = [
6092
6110
  ['xmlns:x14', "#{OFFICE_URL}spreadsheetml/2009/9/main"],
@@ -6528,10 +6546,19 @@ module Writexlsx
6528
6546
  target = escape_url(url)
6529
6547
  end
6530
6548
  if url =~ /^external:/
6531
- target = escape_url(url.sub(/^external:/, 'file:///'))
6549
+ target = escape_url(url.sub(/^external:/, ''))
6550
+
6532
6551
  # Additional escape not required in worksheet hyperlinks
6533
6552
  target = target.gsub(/#/, '%23')
6553
+
6554
+ # Prefix absolute paths (not relative) with file:///
6555
+ if target =~ /^\w:/ || target =~ /^\\\\/
6556
+ target = "file:///#{target}"
6557
+ else
6558
+ target = target.gsub(/\\/, '/')
6559
+ end
6534
6560
  end
6561
+
6535
6562
  if url =~ /^internal:/
6536
6563
  target = url.sub(/^internal:/, '#')
6537
6564
  target_mode = nil
@@ -8139,5 +8166,44 @@ EOS
8139
8166
  end
8140
8167
  col
8141
8168
  end
8169
+
8170
+ #
8171
+ # Write the <ignoredErrors> element.
8172
+ #
8173
+ def write_ignored_errors
8174
+ return unless @ignore_errors
8175
+
8176
+ ignore = @ignore_errors
8177
+
8178
+ @writer.tag_elements('ignoredErrors' ) do
8179
+ {
8180
+ :number_stored_as_text => 'numberStoredAsText',
8181
+ :eval_error => 'evalError',
8182
+ :formula_differs => 'formula',
8183
+ :formula_range => 'formulaRange',
8184
+ :formula_unlocked => 'unlockedFormula',
8185
+ :empty_cell_reference => 'emptyCellReference',
8186
+ :list_data_validation => 'listDataValidation',
8187
+ :calculated_column => 'calculatedColumn',
8188
+ :two_digit_text_year => 'twoDigitTextYear'
8189
+ }.each do |key, value|
8190
+ if ignore[key]
8191
+ write_ignored_error(value, ignore[key])
8192
+ end
8193
+ end
8194
+ end
8195
+ end
8196
+
8197
+ #
8198
+ # Write the <ignoredError> element.
8199
+ #
8200
+ def write_ignored_error(type, sqref)
8201
+ attributes = {
8202
+ 'sqref' => sqref,
8203
+ type => 1
8204
+ }
8205
+
8206
+ @writer.empty_tag('ignoredError', attributes)
8207
+ end
8142
8208
  end
8143
8209
  end
@@ -0,0 +1,30 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionHeader04 < 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_header04
14
+ @xlsx = 'header04.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.set_header(
19
+ '&CŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽŽ'
20
+ )
21
+
22
+ workbook.close
23
+
24
+ compare_for_regression(
25
+ [],
26
+ {
27
+ 'xl/worksheets/sheet1.xml' => [ '<pageMargins', '<pageSetup' ]
28
+ })
29
+ end
30
+ end
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionHyperlink50 < 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_hyperlink50
14
+ @xlsx = 'hyperlink50.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.insert_image(
19
+ 'E9', 'test/regression/images/red.png',
20
+ :url => 'external:..\Book1.xlsx'
21
+ )
22
+
23
+ workbook.close
24
+
25
+ compare_for_regression
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionHyperlink51 < 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_hyperlink51
14
+ @xlsx = 'hyperlink51.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.insert_image(
19
+ 'E9', 'test/regression/images/red.png',
20
+ :url => 'external:C:\Temp\Book1.xlsx'
21
+ )
22
+
23
+ workbook.close
24
+
25
+ compare_for_regression
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionIgnoreError01 < 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_ignore_error01
14
+ @xlsx = 'ignore_error01.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.write_string('A1', '123')
19
+
20
+ workbook.close
21
+ compare_for_regression
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionIgnoreError02 < 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_ignore_error02
14
+ @xlsx = 'ignore_error02.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.write_string('A1', '123')
19
+ worksheet.ignore_errors(number_stored_as_text: 'A1')
20
+
21
+ workbook.close
22
+ compare_for_regression
23
+ end
24
+ end
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionIgnoreError03 < 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_ignore_error03
14
+ @xlsx = 'ignore_error03.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ (0..9).each do |row|
19
+ worksheet.write_string(row, 0, '123')
20
+ end
21
+ worksheet.ignore_errors(number_stored_as_text: 'A1:A10')
22
+
23
+ workbook.close
24
+ compare_for_regression
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionIgnoreError04 < 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_ignore_error04
14
+ @xlsx = 'ignore_error04.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.write_string('A1', '123')
19
+ worksheet.write_string('C3', '123')
20
+ worksheet.write_string('E5', '123')
21
+ worksheet.ignore_errors(number_stored_as_text: 'A1 C3 E5')
22
+
23
+ workbook.close
24
+ compare_for_regression
25
+ end
26
+ end
@@ -0,0 +1,32 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionIgnoreError05 < 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_ignore_error05
14
+ @xlsx = 'ignore_error05.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.write_string('A1', '123')
19
+ worksheet.write_formula('A2', '=1/0', nil, '#DIV/0!')
20
+
21
+ worksheet.ignore_errors(
22
+ number_stored_as_text: 'A1',
23
+ eval_error: 'A2'
24
+ )
25
+
26
+ workbook.close
27
+ compare_for_regression(
28
+ ['xl/calcChain.xml', '[Content_Types].xml', 'xl/_rels/workbook.xml.rels'],
29
+ {}
30
+ )
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'helper'
3
+
4
+ class TestRegressionIgnoreError06 < 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_ignore_error06
14
+ @xlsx = 'ignore_error06.xlsx'
15
+ workbook = WriteXLSX.new(@io)
16
+ worksheet = workbook.add_worksheet
17
+
18
+ worksheet.write_formula('A1', '=B1')
19
+ worksheet.write_formula('A2', '=B1')
20
+ worksheet.write_formula('A3', '=B3')
21
+
22
+ worksheet.ignore_errors(
23
+ :formula_differs => 'A2'
24
+ )
25
+
26
+ workbook.close
27
+ compare_for_regression(
28
+ ['xl/calcChain.xml', '[Content_Types].xml', 'xl/_rels/workbook.xml.rels'],
29
+ {}
30
+ )
31
+ end
32
+ 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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: write_xlsx
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.08.0
4
+ version: 1.08.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hideo NAKAMURA
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-19 00:00:00.000000000 Z
11
+ date: 2021-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip
@@ -907,6 +907,7 @@ files:
907
907
  - test/regression/test_header01.rb
908
908
  - test/regression/test_header02.rb
909
909
  - test/regression/test_header03.rb
910
+ - test/regression/test_header04.rb
910
911
  - test/regression/test_header_image01.rb
911
912
  - test/regression/test_header_image02.rb
912
913
  - test/regression/test_header_image03.rb
@@ -973,6 +974,14 @@ files:
973
974
  - test/regression/test_hyperlink47.rb
974
975
  - test/regression/test_hyperlink48.rb
975
976
  - test/regression/test_hyperlink49.rb
977
+ - test/regression/test_hyperlink50.rb
978
+ - test/regression/test_hyperlink51.rb
979
+ - test/regression/test_ignore_error01.rb
980
+ - test/regression/test_ignore_error02.rb
981
+ - test/regression/test_ignore_error03.rb
982
+ - test/regression/test_ignore_error04.rb
983
+ - test/regression/test_ignore_error05.rb
984
+ - test/regression/test_ignore_error06.rb
976
985
  - test/regression/test_image01.rb
977
986
  - test/regression/test_image02.rb
978
987
  - test/regression/test_image03.rb
@@ -1178,6 +1187,7 @@ files:
1178
1187
  - test/regression/test_table23.rb
1179
1188
  - test/regression/test_table24.rb
1180
1189
  - test/regression/test_table25.rb
1190
+ - test/regression/test_table26.rb
1181
1191
  - test/regression/test_tutorial01.rb
1182
1192
  - test/regression/test_tutorial02.rb
1183
1193
  - test/regression/test_tutorial03.rb
@@ -1670,6 +1680,7 @@ files:
1670
1680
  - test/regression/xlsx_files/header01.xlsx
1671
1681
  - test/regression/xlsx_files/header02.xlsx
1672
1682
  - test/regression/xlsx_files/header03.xlsx
1683
+ - test/regression/xlsx_files/header04.xlsx
1673
1684
  - test/regression/xlsx_files/header_image01.xlsx
1674
1685
  - test/regression/xlsx_files/header_image02.xlsx
1675
1686
  - test/regression/xlsx_files/header_image03.xlsx
@@ -1738,6 +1749,14 @@ files:
1738
1749
  - test/regression/xlsx_files/hyperlink47.xlsx
1739
1750
  - test/regression/xlsx_files/hyperlink48.xlsx
1740
1751
  - test/regression/xlsx_files/hyperlink49.xlsx
1752
+ - test/regression/xlsx_files/hyperlink50.xlsx
1753
+ - test/regression/xlsx_files/hyperlink51.xlsx
1754
+ - test/regression/xlsx_files/ignore_error01.xlsx
1755
+ - test/regression/xlsx_files/ignore_error02.xlsx
1756
+ - test/regression/xlsx_files/ignore_error03.xlsx
1757
+ - test/regression/xlsx_files/ignore_error04.xlsx
1758
+ - test/regression/xlsx_files/ignore_error05.xlsx
1759
+ - test/regression/xlsx_files/ignore_error06.xlsx
1741
1760
  - test/regression/xlsx_files/image01.xlsx
1742
1761
  - test/regression/xlsx_files/image02.xlsx
1743
1762
  - test/regression/xlsx_files/image03.xlsx
@@ -1943,6 +1962,7 @@ files:
1943
1962
  - test/regression/xlsx_files/table23.xlsx
1944
1963
  - test/regression/xlsx_files/table24.xlsx
1945
1964
  - test/regression/xlsx_files/table25.xlsx
1965
+ - test/regression/xlsx_files/table26.xlsx
1946
1966
  - test/regression/xlsx_files/tutorial01.xlsx
1947
1967
  - test/regression/xlsx_files/tutorial02.xlsx
1948
1968
  - test/regression/xlsx_files/tutorial03.xlsx
@@ -2807,6 +2827,7 @@ test_files:
2807
2827
  - test/regression/test_header01.rb
2808
2828
  - test/regression/test_header02.rb
2809
2829
  - test/regression/test_header03.rb
2830
+ - test/regression/test_header04.rb
2810
2831
  - test/regression/test_header_image01.rb
2811
2832
  - test/regression/test_header_image02.rb
2812
2833
  - test/regression/test_header_image03.rb
@@ -2873,6 +2894,14 @@ test_files:
2873
2894
  - test/regression/test_hyperlink47.rb
2874
2895
  - test/regression/test_hyperlink48.rb
2875
2896
  - test/regression/test_hyperlink49.rb
2897
+ - test/regression/test_hyperlink50.rb
2898
+ - test/regression/test_hyperlink51.rb
2899
+ - test/regression/test_ignore_error01.rb
2900
+ - test/regression/test_ignore_error02.rb
2901
+ - test/regression/test_ignore_error03.rb
2902
+ - test/regression/test_ignore_error04.rb
2903
+ - test/regression/test_ignore_error05.rb
2904
+ - test/regression/test_ignore_error06.rb
2876
2905
  - test/regression/test_image01.rb
2877
2906
  - test/regression/test_image02.rb
2878
2907
  - test/regression/test_image03.rb
@@ -3078,6 +3107,7 @@ test_files:
3078
3107
  - test/regression/test_table23.rb
3079
3108
  - test/regression/test_table24.rb
3080
3109
  - test/regression/test_table25.rb
3110
+ - test/regression/test_table26.rb
3081
3111
  - test/regression/test_tutorial01.rb
3082
3112
  - test/regression/test_tutorial02.rb
3083
3113
  - test/regression/test_tutorial03.rb
@@ -3570,6 +3600,7 @@ test_files:
3570
3600
  - test/regression/xlsx_files/header01.xlsx
3571
3601
  - test/regression/xlsx_files/header02.xlsx
3572
3602
  - test/regression/xlsx_files/header03.xlsx
3603
+ - test/regression/xlsx_files/header04.xlsx
3573
3604
  - test/regression/xlsx_files/header_image01.xlsx
3574
3605
  - test/regression/xlsx_files/header_image02.xlsx
3575
3606
  - test/regression/xlsx_files/header_image03.xlsx
@@ -3638,6 +3669,14 @@ test_files:
3638
3669
  - test/regression/xlsx_files/hyperlink47.xlsx
3639
3670
  - test/regression/xlsx_files/hyperlink48.xlsx
3640
3671
  - test/regression/xlsx_files/hyperlink49.xlsx
3672
+ - test/regression/xlsx_files/hyperlink50.xlsx
3673
+ - test/regression/xlsx_files/hyperlink51.xlsx
3674
+ - test/regression/xlsx_files/ignore_error01.xlsx
3675
+ - test/regression/xlsx_files/ignore_error02.xlsx
3676
+ - test/regression/xlsx_files/ignore_error03.xlsx
3677
+ - test/regression/xlsx_files/ignore_error04.xlsx
3678
+ - test/regression/xlsx_files/ignore_error05.xlsx
3679
+ - test/regression/xlsx_files/ignore_error06.xlsx
3641
3680
  - test/regression/xlsx_files/image01.xlsx
3642
3681
  - test/regression/xlsx_files/image02.xlsx
3643
3682
  - test/regression/xlsx_files/image03.xlsx
@@ -3843,6 +3882,7 @@ test_files:
3843
3882
  - test/regression/xlsx_files/table23.xlsx
3844
3883
  - test/regression/xlsx_files/table24.xlsx
3845
3884
  - test/regression/xlsx_files/table25.xlsx
3885
+ - test/regression/xlsx_files/table26.xlsx
3846
3886
  - test/regression/xlsx_files/tutorial01.xlsx
3847
3887
  - test/regression/xlsx_files/tutorial02.xlsx
3848
3888
  - test/regression/xlsx_files/tutorial03.xlsx