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