Электронная таблица Ruby: неверный файловый дескриптор — test.xls (Errno::EBADF)

У меня проблема со скриптом, который создает простой файл .xls и записывает данные в одну ячейку. Вот простой код:

require 'spreadsheet'

class Filter
  def filter
    @excel = Spreadsheet::Workbook.new
    @sheet = @excel.create_worksheet

    @sheet[0, 0] = "test"
        @excel.write 'test.xls'
  end
end

f = Filter.new
f.filter

Но это вызывает ошибку:

C:/Ruby193/lib/ruby/gems/1.9.1/gems/ruby-ole-1.2.11.5/lib/ole/storage/base.rb:62:in write_nonblock': Bad file descriptor - test.xls (Errno::EBADF) from C:/Ruby193/lib/ruby/gems/1.9.1/gems/ruby-ole-1.2.11.5/lib/ole/storage/base.rb:62:in initialize'

    from C:/Ruby193/lib/ruby/gems/1.9.1/gems/ruby-ole-1.2.11.5/lib/ole/storage/base.rb:78:in

new' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/ruby-ole-1.2.11.5/lib/ole/storage/base.rb:78:in open' из C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet/excel/writer/workbook.rb:4 53:in write_from_scratch' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet/excel/writer/workbook.rb:6 31:inwrite_workbook' из C:/Ruby193/ lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet/writer.rb:15:in block in write' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet/writer.rb:14:in open' из C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet -0.7.4/lib/spreadsheet/writer.rb:14:in write' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet/workbook.rb:116:in write'

    from filter.rb:10:in `filter'
    from filter.rb:15:in `<main>'

person Иван Бишевац    schedule 08.11.2012    source источник


Ответы (2)


поскольку ruby-ole 1.2.11.5 не поддерживает платформу Windows, подробнее: проблема с ruby-ole

вы можете использовать ruby-ole 1.2.11.4, чтобы избежать этой проблемы.

require 'rubygems'
gem 'ruby-ole','1.2.11.4'
require 'spreadsheet'
person comme    schedule 09.11.2012

Я видел это раньше. Сначала убедитесь, что вы можете писать в расположение этого файла. Я предполагаю, что либо файл уже открыт в Excel, либо ваш антивирус блокирует «угрозу».

person pguardiario    schedule 09.11.2012