Skip to content

Instantly share code, notes, and snippets.

@esbanarango
Created December 12, 2014 18:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save esbanarango/4e58d5933190e7854190 to your computer and use it in GitHub Desktop.
Save esbanarango/4e58d5933190e7854190 to your computer and use it in GitHub Desktop.
require 'roo'
require 'axlsx'
require 'fileutils'
class XlsScript
attr_accessor :file_path
def initialize(file_path)
@file_path = file_path
@processed = {}
FileUtils::mkdir_p 'generated_files'
end
def run
process_spreadsheet
@processed.each do |key, value|
create_file(key, value)
end
end
def process_spreadsheet
(2..spreadsheet.last_row).map do |i|
row = spreadsheet.row(i)
@processed[row[2]] ||= []
@processed[row[2]] << row.take(2)
end
end
def create_file(file_name, rows)
p = Axlsx::Package.new
p.workbook.add_worksheet(name: 'Sheet1') do |sheet|
rows.each do |row|
sheet.add_row row
end
end
p.serialize("generated_files/#{file_name}.xls")
end
private
def file
@file ||= File.open(file_path, "r")
end
def open_spreadsheet
case File.extname(file_path)
when ".csv" then Roo::Csv.new(file.path, {packed: nil,file_warning: :ignore})
when ".xls" then Roo::Excel.new(file.path, {packed: nil,file_warning: :ignore})
when ".xlsx" then Roo::Excelx.new(file.path, {packed: nil,file_warning: :ignore})
else raise "Unknown file type: #{file.original_filename}"
end
end
def spreadsheet
@spreadsheet ||= open_spreadsheet
end
end
if ARGV.size < 1
puts "Usage: ruby #{__FILE__} [file_path]"
else
script = XlsScript.new(ARGV[0])
script.run
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment