0

私はルビーとレールのいくつかの分野では初心者のようなものです。だから私は拡張子に応じて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

そのコードを入力する必要がありますが、実際には...

ヘルプ?

4

1 に答える 1

0

eachクラスにメソッドを追加し、ExcelReadというこのクラスのインスタンスを作成した場合、 ではなくxlsを使用してアクセスする必要があります。前者を使用すると、コレクションのようにからメソッドを 呼び出します。 を反復するカスタムの方法が必要だとしか思えないので、次のようなものが達成しようとしているはずです。 xls.eachxls.book_rows.each
eachEnumeratorbook_rows
book_row

def iterate
  self.book_rows.each do |br|
    # do stuff
  end
end

そして、あなたはそれを次のように呼びます:

xls.iterate

しかし、これは勝手な推測にすぎません。

于 2013-09-13T14:22:19.347 に答える