summaryrefslogtreecommitdiffhomepage
path: root/lib/axlsx/workbook/worksheet/worksheet.rb
diff options
context:
space:
mode:
authorLuka Lüdicke <[email protected]>2020-11-26 19:48:33 +0100
committerLuka Lüdicke <[email protected]>2020-12-10 13:13:54 +0100
commite859d267e9e4239a8f85253f1e303dc27ece0cb6 (patch)
tree7a63936d4ecddb1048228e778f14ff01fb3b693c /lib/axlsx/workbook/worksheet/worksheet.rb
parentca03954f007ec4d7a7eabe900b609dc906e5c884 (diff)
downloadcaxlsx-e859d267e9e4239a8f85253f1e303dc27ece0cb6.tar.gz
caxlsx-e859d267e9e4239a8f85253f1e303dc27ece0cb6.zip
Fix calculation of worksheet name length
- The previous change caused unnecessary issues - We approximate that Excel calculates the character length with UTF-16 - Fixes https://github.com/caxlsx/caxlsx/issues/67
Diffstat (limited to 'lib/axlsx/workbook/worksheet/worksheet.rb')
-rw-r--r--lib/axlsx/workbook/worksheet/worksheet.rb4
1 files changed, 3 insertions, 1 deletions
diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb
index aae91947..9f3966f8 100644
--- a/lib/axlsx/workbook/worksheet/worksheet.rb
+++ b/lib/axlsx/workbook/worksheet/worksheet.rb
@@ -663,7 +663,9 @@ module Axlsx
def validate_sheet_name(name)
DataTypeValidator.validate :worksheet_name, String, name
- raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if name.bytesize > 31
+ # ignore first character (BOM) after encoding to utf16 because Excel does so, too.
+ character_length = name.encode("utf-16")[1..-1].encode("utf-16").bytesize / 2
+ raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % name) if character_length > 31
raise ArgumentError, (ERR_SHEET_NAME_CHARACTER_FORBIDDEN % name) if '[]*/\?:'.chars.any? { |char| name.include? char }
name = Axlsx::coder.encode(name)
sheet_names = @workbook.worksheets.reject { |s| s == self }.map { |s| s.name }