Question

Goal for my code is to process all the .xls files in a directory and convert them all to .csv. This has worked in the past but after updating Ruby and Roo it is showing the error below. I am using Ruby 1.9.3-p362 and Roo 1.11.2.

require 'rubygems'
require 'csv'
require 'iconv'
require 'mysql2'
require 'mysql'
require 'roo'

begin
    Dir["#{@work_path}/*.xls"].each do |file|  
        begin
          file_path = "#{file}"
          file_basename = File.basename(file, ".xls")
          xls = Excel.new(file_path)
          xls.to_csv("#{@kenshoo_work_path}#{file_basename}.csv")
          @log.info("Converted file #{file}")
          FileUtils.remove(file)
          @log.info("Deleted file #{file}")
        rescue Exception => e
          @log.warn("Unable to convert file: #{file_basename} into csv because #{e.message}")
        end
    end
end

For every file I get the following error message:

Unable to convert file: #{file} into csv because uninitialized constant Excel

Any help is appreciated. Thanks.

Was it helpful?

Solution

roo has Excel class within the Roo:: namespace. You need to replace all instances of Excel with Roo::Excel

The older versions did not namespace classes under Roo::, so that would explain why your code broke after update.

The new repository is here: https://github.com/Empact/roo

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top