def self.read(file, options = {})
options = IndiferentHash.add_defaults options, :sep2 => /[,|]\s?/, :skip_rows => 0
sheet = IndiferentHash.process_options options, :sheet
header = IndiferentHash.process_options options, :header
text = IndiferentHash.process_options options, :text
skip_rows = IndiferentHash.process_options options, :skip_rows
skip_rows = skip_rows.to_i
header = true unless header == false
sheet ||= "0"
workbook = Spreadsheet.open Open.open(file)
if sheet && sheet.to_s =~ /^\d+$/
sheet = workbook.worksheets.collect{|s| s.name }[sheet.to_i]
end
sheet_name = sheet
Log.debug "Opening LSX #{file} sheet #{ sheet_name }"
TmpFile.with_file :extension => Path.sanitize_filename(sheet_name.to_s) do |filename|
sheet = workbook.worksheet sheet
rows = []
sheet.each do |row|
if skip_rows > 0
skip_rows -= 1
next
end
rows << row.values_at(0..(row.size - 1)).collect{|c| String === c ? c.gsub("\n", ' ') : c }
end
num_values = rows.first.length
File.open(filename, 'w') do |f|
if header
header = rows.shift
f.puts "#" + header * "\t"
end
rows.each do |row|
values = row.collect{|c| c.respond_to?(:value) ? c.value : c }
values[num_values-1] ||= nil
f.puts values * "\t"
end
end
text ? Open.read(filename) : TSV.open(filename, options)
end
end