尝试解析 Excel 文件时获取 "Not a valid file format"
Getting "Not a valid file format" when trying to parse an Excel file
我正在使用 Ruby 2.3 w 和 Rails 4.2.7。我的 GEmfile 中有这个……
gem 'creek'
我正在尝试解析一个 Excel(“.xls” 而不是 “.xlsx”)文件,就像这样
sheet = creek.sheets[0]
sheet.rows.each do |row|
my_object_time = service.create_my_object_time_obj(row, race_id)
if my_object_time.valid?
results.push(my_object_time)
else
puts "#{my_object_time.errors.full_messages}"
end
但我收到错误...
RuntimeError: Not a valid file format.
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/creek-1.1.2/lib/creek/book.rb:20:in `initialize'
from /Users/davea/Documents/workspace/myproject/app/services/xls_to_my_object_times_converter_service.rb:13:in `new'
from /Users/davea/Documents/workspace/myproject/app/services/xls_to_my_object_times_converter_service.rb:13:in `get_my_object_times'
from /Users/davea/Documents/workspace/myproject/app/services/xls_processor_service.rb:15:in `process_page_data'
from /Users/davea/Documents/workspace/myproject/app/services/abstract_import_service.rb:83:in `process_race_data'
from (irb):2
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.7.1/lib/rails/commands/console.rb:110:in `start'
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.7.1/lib/rails/commands/console.rb:9:in `start'
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.7.1/lib/rails/commands/commands_tasks.rb:68:in `console'
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.7.1/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.7.1/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
在“creek = Creek::Book.new file_location”这一行。是什么赋予了?我愿意使用另一个 gem 来解析 Excel 文件,如果它可以解析 sheet 并以哈希格式给我单元格和值。
好吧,Not a valid file format
不言自明。
Creek documentation 在标题中告诉你这是一个
Stream parser for large Excel(xlsx and xlsm) files.
我对 spreadsheet gem 有很好的体验。
由于其他人可能会在没有简单解释该文件不是 xlsx 文件的情况下以相同的方式结束,我想我会补充说 "Not a valid file format" 是根据文件扩展名抛出的,并且有一个忽略所述扩展的选项,如下所示:
Creek::Book.new path, check_file_extension: false
(取自小溪的示例 test_spec)
我正在使用 Ruby 2.3 w 和 Rails 4.2.7。我的 GEmfile 中有这个……
gem 'creek'
我正在尝试解析一个 Excel(“.xls” 而不是 “.xlsx”)文件,就像这样
sheet = creek.sheets[0]
sheet.rows.each do |row|
my_object_time = service.create_my_object_time_obj(row, race_id)
if my_object_time.valid?
results.push(my_object_time)
else
puts "#{my_object_time.errors.full_messages}"
end
但我收到错误...
RuntimeError: Not a valid file format.
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/creek-1.1.2/lib/creek/book.rb:20:in `initialize'
from /Users/davea/Documents/workspace/myproject/app/services/xls_to_my_object_times_converter_service.rb:13:in `new'
from /Users/davea/Documents/workspace/myproject/app/services/xls_to_my_object_times_converter_service.rb:13:in `get_my_object_times'
from /Users/davea/Documents/workspace/myproject/app/services/xls_processor_service.rb:15:in `process_page_data'
from /Users/davea/Documents/workspace/myproject/app/services/abstract_import_service.rb:83:in `process_race_data'
from (irb):2
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.7.1/lib/rails/commands/console.rb:110:in `start'
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.7.1/lib/rails/commands/console.rb:9:in `start'
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.7.1/lib/rails/commands/commands_tasks.rb:68:in `console'
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.7.1/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /Users/davea/.rvm/gems/ruby-2.3.0/gems/railties-4.2.7.1/lib/rails/commands.rb:17:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
在“creek = Creek::Book.new file_location”这一行。是什么赋予了?我愿意使用另一个 gem 来解析 Excel 文件,如果它可以解析 sheet 并以哈希格式给我单元格和值。
好吧,Not a valid file format
不言自明。
Creek documentation 在标题中告诉你这是一个
Stream parser for large Excel(xlsx and xlsm) files.
我对 spreadsheet gem 有很好的体验。
由于其他人可能会在没有简单解释该文件不是 xlsx 文件的情况下以相同的方式结束,我想我会补充说 "Not a valid file format" 是根据文件扩展名抛出的,并且有一个忽略所述扩展的选项,如下所示:
Creek::Book.new path, check_file_extension: false
(取自小溪的示例 test_spec)