我在某些红宝石和铁轨领域是个新手。所以我正在编写一个类,根据扩展名读取excel并返回每个例程中的行。像这样:
class ExcelRead
(dependencies)
def initialize(path, sheet_n = 0)
type = File.extname(path)
if type == JitExcelRead::XLS
Spreadsheet.client_encoding = 'UTF-8'
book = Spreadsheet.open path
book_sheet = book.worksheet sheet_n
elsif type == JitExcelRead::XLSX
book = Creek::Book.new path
book_sheet = book.sheets[sheet_n]
end
@book = book
@book_sheet = book_sheet
@book_rows = book_sheet.rows
@path = path
@type = type
end
end
所以这意味着我打电话给我的申请
xls = ExcelRead.new(uploaded_file.filename_path)
一切顺利。我有我需要的物品供我使用。我现在的问题是如何迭代它们。我认为可以像这样添加一个类的方法
def each
binding.pry
end
并在我的应用上正常调用
xls.book_rows.each do |row|
end
会让我输入该代码,但不是真的......
帮助?
答案 0 :(得分:0)
如果您向each
类添加了ExcelRead
方法,并且创建了此类名为xls
的实例,那么您必须使用xls.each
访问它,不是xls.book_rows.each
使用前者,您从each
调用Enumerator
方法,因为book_rows
是一个集合。
我只能猜测你想要一种自定义方式迭代你的book_row
,所以我认为这样的事情应该是你想要实现的目标:
def iterate
self.book_rows.each do |br|
# do stuff
end
end
你称之为:
xls.iterate
但这只是一个疯狂的猜测。