From f93ac348f13b9cdc8df48e7d566aec1bf03b5ddd Mon Sep 17 00:00:00 2001 From: Randy Morgan Date: Thu, 23 Feb 2012 19:50:16 +0900 Subject: worksheet names need to be limited to 31 characters --- lib/axlsx/util/constants.rb | 3 +++ lib/axlsx/workbook/worksheet/worksheet.rb | 2 ++ test/workbook/worksheet/tc_worksheet.rb | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/lib/axlsx/util/constants.rb b/lib/axlsx/util/constants.rb index b2cbad26..e9a0a02a 100644 --- a/lib/axlsx/util/constants.rb +++ b/lib/axlsx/util/constants.rb @@ -224,6 +224,9 @@ module Axlsx # error message for RegexValidator ERR_REGEX = "Invalid Data. %s does not match %s." + # error message for sheets that use a name which is longer than 31 bytes + ERR_SHEET_NAME_TOO_LONG = "Your worksheet name '%s' is too long. Worksheet names must be 31 characters (bytes) or less" + # error message for duplicate sheet names ERR_DUPLICATE_SHEET_NAME = "There is already a worksheet in this workbook named '%s'. Please use a unique name" end diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb index 5284c475..a8846913 100644 --- a/lib/axlsx/workbook/worksheet/worksheet.rb +++ b/lib/axlsx/workbook/worksheet/worksheet.rb @@ -116,9 +116,11 @@ module Axlsx end # The name of the worksheet + # The name of a worksheet must be unique in the workbook, and must not exceed 31 characters # @param [String] v def name=(v) DataTypeValidator.validate "Worksheet.name", String, v + raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % v) if v.size > 31 sheet_names = @workbook.worksheets.map { |s| s.name } raise ArgumentError, (ERR_DUPLICATE_SHEET_NAME % v) if sheet_names.include?(v) @name=v diff --git a/test/workbook/worksheet/tc_worksheet.rb b/test/workbook/worksheet/tc_worksheet.rb index 4a358c2c..a3d146c4 100644 --- a/test/workbook/worksheet/tc_worksheet.rb +++ b/test/workbook/worksheet/tc_worksheet.rb @@ -129,6 +129,11 @@ class TestWorksheet < Test::Unit::TestCase assert_raise(ArgumentError, "worksheet name must be unique") { n = @ws.name; @ws.workbook.add_worksheet(:name=> @ws) } end + def test_name_size + assert_raise(ArgumentError, "name too long!") { @ws.name = Array.new(32, "A").to_s } + assert_nothing_raised { @ws.name = Array.new(31, "A").to_s } + end + def test_update_auto_with_data small = @ws.workbook.styles.add_style(:sz=>2) big = @ws.workbook.styles.add_style(:sz=>10) -- cgit v1.2.3