lib/write_xlsx/package/table.rb in write_xlsx-0.90.0 vs lib/write_xlsx/package/table.rb in write_xlsx-0.97.0
- old
+ new
@@ -30,12 +30,13 @@
def initialize(worksheet, *args)
@worksheet = worksheet
@writer = Package::XMLWriterSimple.new
@row1, @row2, @col1, @col2, @param = handle_args(*args)
- @columns = []
+ @columns = []
@col_formats = []
+ @seen_name = {}
# Set the data range rows (without the header and footer).
@first_data_row = @row1
@first_data_row += 1 if ptrue?(@param[:header_row])
@last_data_row = @row2
@@ -93,13 +94,19 @@
# Map user defined values to internal values.
if user_data[:header] && !user_data[:header].empty?
col_data.name = user_data[:header]
end
+ # Excel requires unique case insensitive header names.
+ if @seen_name[col_data.name.downcase]
+ raise "add_table() contains duplicate name: '#{col_data.name}'"
+ else
+ @seen_name[col_data.name.downcase] = true
+ end
# Get the header format if defined.
col_data.name_format = user_data[:header_format]
-
+
# Handle the column formula.
handle_the_column_formula(
col_data, col_num, user_data[:formula], user_data[:format]
)
@@ -289,11 +296,11 @@
end
# Raise if the name looks like a R1C1.
if name =~ /^[rcRC]$/ || name =~ /^[rcRC]\d+[rcRC]\d+$/
raise "Invalid name '#{name}' like a RC cell ref in add_table()"
- end
-
+ end
+
@name = @param[:name]
end
end
def set_the_table_and_autofilter_ranges