2

これはRubyで行われます。これまでに試みたことを提供しました。

エクセルのワークブック(複数のシートになる)を繰り返し処理し、基本的にすべてが配置されている場所にインデックスを付けて記録することが可能かどうかについて興味があります。10枚のワークブックがあるとしましょう。最初のシートを取得し、そのシート名を記録してから、最初のセルに移動して、そのシートのデータのインデックス作成を開始します(正しい単語かどうかはわかりません)。最初の(1、A)とその中にあるデータについて、セルの場所を記録します。CSVファイルなどの形式でデータを出力しようとしています。ここに画像の説明を入力してください

私が書いたいくつかのコードは、基本的にワークブック内のすべてのシートとすべてのセルを繰り返し(空白を削除)、そのデータを取得してCSVに入れます...シート名やセル番号はありません。私はrooとcsvの宝石を使用しています:

require 'rubygems'
require 'roo'

#Classes Used
class ArrayIterator
  def initialize(array)
    @array = array
    @index = 0
  end

  def has_next?
    @index < @array.length
  end

  def item
    @array[@index]
  end

  def next_item
    value = @array[@index]
    @index += 1
    value
  end
end

#Open up files to compare
w1 = Excelx.new ( "C:/Ruby/myworkbook.xlsx" )

$values = Array.new
i = 0.to_i
# Continue until no worksheets left
num_sheets = w1.sheets().size

while  (i < num_sheets)
      puts "i is currently : #{i}"
      puts "length of sheet array is : #{num_sheets}"

#Grab first sheet of each workbook
  w1.default_sheet = w1.sheets[i]
 1.upto(w1.last_row) do | row |
    1.upto(w1.last_column) do | column |
        string = w1.cell(row, column).to_s
        if (string.strip.empty?) 
          puts "Whitespace!"
                else
                  $values << string
        end
    end
 end
   i = i + 1.to_i
end  

count = 0.to_i
CSV.open('C:/Ruby/results.csv', "w") do |csv|   
 csv << ['String']
i = ArrayIterator.new($values)
   while i.has_next?
      csv << [i.next_item]
      count += 1
     end
end
4

1 に答える 1

2

エラーが発生した空のシートにチェックを追加しながら、自由にスクリプトを短縮しました。

require 'roo'

w1 = Excelx.new ( "C:/Ruby193/test/roo/book1.xlsx" )
CSV.open("book1.csv", "w") do |csv|   
  w1.sheets.each do |sheet|
    w1.default_sheet = sheet
    if w1.first_row && w1.first_column
      eval(w1.to_s).each do |index, value|
        csv << [sheet, index, value]
      end
    end
  end
end

これはbook1.csvで提供されます

Sheet1,"[1, 1]",a1
Sheet1,"[1, 2]",b1
Sheet1,"[2, 1]",a2
Sheet1,"[2, 2]",b2
Sheet2,"[1, 1]",aa1
Sheet2,"[1, 2]",bb1
Sheet2,"[2, 1]",aa2
Sheet2,"[2, 2]",bb2
于 2012-08-21T21:26:42.057 に答える