title: Ruby save Excel as CSV
body: <p>I am trying to go through each .xls file in a directory and save a .csv for each file. I am working with the 'roo' gem and am seeing some errors. Totally open to other approaches, I just need to keep this in Ruby without moving to Ruby on Rails. I am running Ruby 1.9.2 and executing in terminal on a Mac.</p>
  
  <p>Code so far: </p>
  
  <pre><code>#! /usr/bin/ruby
  
  require 'roo'
  
  
  # change excel files to csv
  begin
      Dir["/tmp/*.xls"].each do |file|  
        file_path = "#{file}"
        file_basename = File.basename(file, ".xls")
        xls = Excel.new(file_path)
        xls.to_csv = ("/tmp/#{file_basename}.csv")
      end
  end
  </code></pre>
  
  <p>And here is the error I get: (line numbers are not the same as example, line 27 is begin statement)</p>
  
  <pre><code>/Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/roo-1.10.1/lib/roo/excel.rb:284:in `platform_specific_iconv': uninitialized constant Excel::Iconv (NameError)
      from /Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/roo-1.10.1/lib/roo/excel.rb:277:in `normalize_string'
      from /Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/roo-1.10.1/lib/roo/excel.rb:139:in `block in sheets'
      from /Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/roo-1.10.1/lib/roo/excel.rb:139:in `collect'
      from /Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/roo-1.10.1/lib/roo/excel.rb:139:in `sheets'
      from /Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/roo-1.10.1/lib/roo/excel.rb:123:in `initialize'
      from excel_conversion_test.rb:32:in `new'
      from excel_conversion_test.rb:32:in `block in &lt;main&gt;'
      from excel_conversion_test.rb:28:in `each'
      from excel_conversion_test.rb:28:in `&lt;main&gt;'
  </code></pre>
  
  <p>As suggested I tried to install inconv and got the following errors:</p>
  
  <pre><code>ERROR:  Error installing iconv:
      ERROR: Failed to build gem native extension.
  
          /Users/pierce/.rbenv/versions/1.9.2-p290/bin/ruby extconf.rb
  checking for iconv() in iconv.h... no
  checking for iconv() in -liconv... yes
  checking for const of iconv() 2nd argument... no
  creating Makefile
  
  make
  /usr/bin/gcc-4.2 -I. -I/Users/pierce/.rbenv/versions/1.9.2-p290/include/ruby-1.9.1/x86_64-darwin11.2.0 -I/Users/pierce/.rbenv/versions/1.9.2-p290/include/ruby-1.9.1/ruby/backward -I/Users/pierce/.rbenv/versions/1.9.2-p290/include/ruby-1.9.1 -I. -I'/Users/pierce/.rbenv/versions/1.9.2-p290/include'  -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE   -fno-common -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long  -pipe  -o iconv.o -c iconv.c
  In file included from iconv.c:21:
  /Users/pierce/.rbenv/versions/1.9.2-p290/include/ruby-1.9.1/ruby/backward/st.h:2:2: warning: #warning use "ruby/st.h" instead of bare "st.h"
  iconv.c:22:20: error: intern.h: No such file or directory
  iconv.c: In function ‘map_charset’:
  iconv.c:139: error: ‘struct RHash’ has no member named ‘tbl’
  iconv.c:139: error: ‘struct RHash’ has no member named ‘tbl’
  iconv.c:142: error: ‘struct RHash’ has no member named ‘tbl’
  iconv.c: In function ‘iconv_create’:
  iconv.c:187: error: ‘struct RString’ has no member named ‘len’
  iconv.c:188: error: ‘struct RString’ has no member named ‘len’
  iconv.c:190: error: ‘struct RString’ has no member named ‘ptr’
  iconv.c:190: error: ‘struct RString’ has no member named ‘ptr’
  iconv.c:190: error: ‘struct RString’ has no member named ‘ptr’
  iconv.c:190: error: ‘struct RString’ has no member named ‘ptr’
  iconv.c:192: error: ‘struct RString’ has no member named ‘ptr’
  iconv.c:193: error: ‘struct RString’ has no member named ‘len’
  iconv.c: In function ‘iconv_fail’:
  iconv.c:328: error: ‘struct RString’ has no member named ‘len’
  iconv.c: In function ‘iconv_fail_retry’:
  iconv.c:352: error: ‘ruby_errinfo’ undeclared (first use in this function)
  iconv.c:352: error: (Each undeclared identifier is reported only once
  iconv.c:352: error: for each function it appears in.)
  iconv.c: In function ‘rb_str_derive’:
  iconv.c:371: error: ‘struct RString’ has no member named ‘ptr’
  iconv.c:371: error: ‘struct RString’ has no member named ‘len’
  iconv.c:373: error: ‘struct RString’ has no member named ‘ptr’
  iconv.c:373: error: ‘struct RString’ has no member named ‘len’
  iconv.c:374: error: ‘struct RString’ has no member named ‘ptr’
  iconv.c: In function ‘iconv_convert’:
  iconv.c:418: error: ‘struct RArray’ has no member named ‘len’
  iconv.c:418: error: ‘struct RArray’ has no member named ‘ptr’
  iconv.c:436: error: ‘struct RString’ has no member named ‘len’
  iconv.c:437: error: ‘struct RString’ has no member named ‘ptr’
  iconv.c:455: warning: comparison of unsigned expression &gt;= 0 is always true
  iconv.c:458: warning: comparison between signed and unsigned
  iconv.c:459: warning: comparison between signed and unsigned
  iconv.c:491: warning: implicit conversion shortens 64-bit value into a 32-bit value
  iconv.c:494: warning: implicit conversion shortens 64-bit value into a 32-bit value
  iconv.c:497: error: ‘struct RArray’ has no member named ‘len’
  iconv.c:498: error: ‘struct RArray’ has no member named ‘ptr’
  iconv.c:499: error: ‘struct RArray’ has no member named ‘ptr’
  iconv.c:501: error: ‘struct RString’ has no member named ‘len’
  iconv.c:502: error: ‘struct RString’ has no member named ‘ptr’
  iconv.c:514: warning: implicit conversion shortens 64-bit value into a 32-bit value
  iconv.c: In function ‘iconv_s_convert’:
  iconv.c:615: error: ‘struct RString’ has no member named ‘len’
  make: *** [iconv.o] Error 1
  
  
  Gem files will remain installed in /Users/pierce/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/iconv-0.1 for inspection.
  </code></pre>