2

現在、次のコードを使用してファイルシステムクローラーを構築しています。

require 'find'
require 'spreadsheet'
Spreadsheet.client_encoding = 'UTF-8'

count = 0

Find.find('/Users/Anconia/crawler/') do |file|           
  if file =~ /\b.xls$/                                            # check if filename ends in desired format
    contents =  Spreadsheet.open(file).worksheets
    contents.each do |row|
      if row =~ /regex/
        puts file
        count += 1
      end
    end
  end
end

puts "#{count} files were found"

そして、次の出力を受け取っています。 0 files were found

正規表現はテストされており、正しいです。現在、動作する別のクローラーで使用しています。

の出力row.inspect

#<Spreadsheet::Excel::Worksheet:0x003ffa5d418538 @row_addresses= @default_format= @selected= @dimensions= @name=Sheet1 @workbook=#<Spreadsheet::Excel::Workbook:0x007ff4bb147140> @rows=[] @columns=[] @links={} @merged_cells=[] @protected=false @password_hash=0 @changes={} @offsets={} @reader=#<Spreadsheet::Excel::Reader:0x007ff4bb1f3b98> @ole=#<Ole::Storage::RangesIOMigrateable:0x007ff4bb126fa8> @offset=15341 @guts={} @rows[3]>-確かに、繰り返すことは何もありません。

4

2 に答える 2

0

これを試して:

content = Spreadsheet.open(file)
sheet = content.worksheet 0 
sheet.each do |row|
...
于 2012-12-26T23:17:37.313 に答える
0

ディエゴが言ったように、私は内容を繰り返すべきでした-明確化に本当に感謝します!rowまた、反復を行う前に文字列に変換する必要があることにも注意してください。

于 2012-12-26T23:30:35.580 に答える