summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRandy Morgan <[email protected]>2012-07-14 13:25:52 +0900
committerRandy Morgan <[email protected]>2012-07-14 13:25:52 +0900
commitbcebd1714a5224a36e331a47880ae94dbc32054c (patch)
treef6283a0beeb98c42c8fe96d0b4e4e3e071ddf1cc
parentb24833c496e84177ef1f20ea04abdfa3bc26d51c (diff)
downloadcaxlsx-bcebd1714a5224a36e331a47880ae94dbc32054c.tar.gz
caxlsx-bcebd1714a5224a36e331a47880ae94dbc32054c.zip
Additional validations for excel sheet name and example updates
-rwxr-xr-xexamples/example.rb8
-rw-r--r--lib/axlsx/util/constants.rb4
-rw-r--r--lib/axlsx/workbook/worksheet/worksheet.rb1
-rw-r--r--test/workbook/worksheet/tc_worksheet.rb3
4 files changed, 12 insertions, 4 deletions
diff --git a/examples/example.rb b/examples/example.rb
index feec1a08..3ff220db 100755
--- a/examples/example.rb
+++ b/examples/example.rb
@@ -365,7 +365,7 @@ money = wb.styles.add_style(:format_code => '0,000', :border => Axlsx::STYLE_THI
profitable = wb.styles.add_style( :fg_color=>"FF428751",
:type => :dxf)
-wb.add_worksheet(:name => "Conditional Formatting: Cell Is") do |ws|
+wb.add_worksheet(:name => "Conditional Cell Is") do |ws|
# Generate 20 rows of data
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
@@ -380,7 +380,7 @@ wb.add_worksheet(:name => "Conditional Formatting: Cell Is") do |ws|
ws.add_conditional_formatting("B3:B100", { :type => :cellIs, :operator => :greaterThan, :formula => "100000", :dxfId => profitable, :priority => 1 })
end
-wb.add_worksheet(:name => "Conditional Formatting: Color Scale") do |ws|
+wb.add_worksheet(:name => "Conditional Color Scale") do |ws|
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
ws.add_row ["Quarter", "Profit", "% of Total"]
offset = 3
@@ -394,7 +394,7 @@ wb.add_worksheet(:name => "Conditional Formatting: Color Scale") do |ws|
end
-wb.add_worksheet(:name => "Conditional Formatting: Data Bar") do |ws|
+wb.add_worksheet(:name => "Conditional Data Bar") do |ws|
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
ws.add_row ["Quarter", "Profit", "% of Total"]
offset = 3
@@ -407,7 +407,7 @@ wb.add_worksheet(:name => "Conditional Formatting: Data Bar") do |ws|
ws.add_conditional_formatting("B3:B100", { :type => :dataBar, :dxfId => profitable, :priority => 1, :data_bar => data_bar })
end
-wb.add_worksheet(:name => "Conditional Formatting: Icon Set") do |ws|
+wb.add_worksheet(:name => "Conditional Format Icon Set") do |ws|
ws.add_row ["Previous Year Quarterly Profits (JPY)"]
ws.add_row ["Quarter", "Profit", "% of Total"]
offset = 3
diff --git a/lib/axlsx/util/constants.rb b/lib/axlsx/util/constants.rb
index 0a2b5499..e5fb08f1 100644
--- a/lib/axlsx/util/constants.rb
+++ b/lib/axlsx/util/constants.rb
@@ -249,6 +249,10 @@ module Axlsx
# 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 sheets that use a name which includes a colon
+
+ ERR_SHEET_NAME_COLON_FORBIDDEN = "Your worksheet name '%s' contains a colon, which is not allowed by MS Excel and will cause repair warnings. Please change the name of your sheet."
# 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"
diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb
index 93eb010b..68ae2e03 100644
--- a/lib/axlsx/workbook/worksheet/worksheet.rb
+++ b/lib/axlsx/workbook/worksheet/worksheet.rb
@@ -322,6 +322,7 @@ module Axlsx
def name=(v)
DataTypeValidator.validate "Worksheet.name", String, v
raise ArgumentError, (ERR_SHEET_NAME_TOO_LONG % v) if v.size > 31
+ raise ArgumentError, (ERR_SHEET_NAME_COLON_FORBIDDEN % v) if v.include? ':'
v = Axlsx::coder.encode(v)
sheet_names = @workbook.worksheets.map { |s| s.name }
raise ArgumentError, (ERR_DUPLICATE_SHEET_NAME % v) if sheet_names.include?(v)
diff --git a/test/workbook/worksheet/tc_worksheet.rb b/test/workbook/worksheet/tc_worksheet.rb
index a7e35ba5..3ab80ed2 100644
--- a/test/workbook/worksheet/tc_worksheet.rb
+++ b/test/workbook/worksheet/tc_worksheet.rb
@@ -19,6 +19,9 @@ class TestWorksheet < Test::Unit::TestCase
assert_equal(@ws.name, '&lt;foo&gt; &amp; &lt;bar&gt;')
end
+ def test_name_exception_on_colon
+ assert_raises(ArgumentError) { @ws.name = 'foo:bar' }
+ end
def test_page_margins
assert(@ws.page_margins.is_a? Axlsx::PageMargins)
end