Module: TSV::XLSX

Defined in:
lib/rbbt/tsv/excel.rb

Class Method Summary collapse

Class Method Details

.read(file, options = {}) ⇒ Object



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'lib/rbbt/tsv/excel.rb', line 149

def self.read(file, options = {})
  options = Misc.add_defaults options, :sep2 => /[,|]\s?/
  sheet = Misc.process_options options, :sheet
  header = Misc.process_options options, :header

  header = true unless header == false
  TmpFile.with_file do |filename|
    workbook = RubyXL::Parser.parse file
    sheet    = sheet ? workbook[sheet] : workbook.worksheets.first

    rows = []

    sheet.each do |row|
      next if row.nil?
      rows << row.cells.collect{|c| c.nil? ? nil : c.value}.collect{|c| String === c ? c.gsub("\n", ' ') : c }
    end

    File.open(filename, 'w') do |f|
      if header
        header = rows.shift
        f.puts "#" + header * "\t"
      end

      rows.each do |row| f.puts row * "\t" end
    end

    TSV.open(filename, options)
  end
end

.write(tsv, file, options = {}) ⇒ Object



179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
# File 'lib/rbbt/tsv/excel.rb', line 179

def self.write(tsv, file, options = {})
  sheet = Misc.process_options options, :sheet

  fields, rows = TSV._excel_data(tsv, options)

  book = RubyXL::Workbook.new
  sheet1 = book.worksheets.first
  sheet1.sheet_name = sheet if sheet

  fields.each_with_index do |e,i|
    sheet1.add_cell(0, i, e)
  end

  rows.each_with_index do |cells,i|
    cells.each_with_index do |e,j|
      sheet1.add_cell(i+1, j, e)
    end
  end

  book.write file
end