0

次のような配列の配列があります。

arr_all = [arr_1, arr_2, arr_3, arr_r]

どこ:

arr_1 = [2015-08-19 17:30:24 -0700, 2015-08-19 17:30:34 -0700, 2015-08-19 17:30:55 -0700]
arr_2 = ...
arr_3 = ...

変更するファイルがあります。配列を行として追加する方法は知っていますが、各配列を@@ar_data列として挿入するには助けが必要です。データを挿入するを見つけて、次にセルRowに挿入したい、次にatなどに挿入したいです。アドバイスをお願いします。データを埋める行数は、各配列のサイズです。、、のサイズはです。arr_1(next_empty_row, B)arr_2(next_empty_row, C)arr_1arr_2arr_33

def performance_report
  Spreadsheet.client_encoding = 'UTF-8'
  f = "PerformanceTest_S.xls"
  if File.exist? (f)
    # Open the previously created Workbook
    book = Spreadsheet.open(f)
    sheet_1_row_index = book.worksheet(0).last_row_index + 1
    sheet_2_row_index = book.worksheet(1).last_row_index + 1
    # Indicate the row index to the user
    print "Inserting new row at index: #{sheet_2_row_index}\n"
    # Insert array as column - I need help with the below code to insert data in arr_data which is array of arrays. 
    column = 1
    row
    @@ar_data.each do |time|
      len = time.size
      book.worksheet(0).cell(sheet_1_row_index, )
      book.worksheet(0).Column.size
    end
    # This insert row is for worksheet 2 and works fine.
    book.worksheet(1).insert_row(sheet_2_row_index, @@ar_calc)
    # Delete the file so that it can be re-written
    File.delete(f)
    # puts @@ar_calc
    # Write out the Workbook again
    book.write(f)
4

2 に答える 2

0

何を達成しようとしたのかよくわかりません。これは、配列をファイルの最後に書き込む方法の例です。

require 'spreadsheet'

arrays = [
['Text 1','Text 2','Text 3'],
['Text 4','Text 5','Text 6'],
['Text 7','Text 8','Text 9']]

f = '/your/file/path.xls'
Spreadsheet.client_encoding = 'UTF-8'
if File.exist? f
    book = Spreadsheet.open(f)
    sheet = book.worksheet(0)

    lastRow = sheet.last_row_index + 1
    arrays.each_with_index do |row, rowNum|
          row.each_with_index do |cell, cellNum|
              sheet[ rowNum + lastRow, cellNum ] = cell
          end
    end
    File.delete f
    book.write f
end
于 2015-08-21T00:12:07.760 に答える
0

私はあなたが何について話しているのかさえ知りませんが、おそらくあなたがすべきことは、その xls を csvs (シートごとに 1 つ) に変換し、次のように解析することです。ハッシュを使用して、プラットフォームに依存しないようにします (ただし、通常は、Rails を使用してスプレッドシート データをデータベースに直接追加するだけです)。

require 'csv' #not necessary in newer versions of ruby
rows = CSV.open("filename.csv").read
column_names = rows.shift
records = []
rows.each do |row|
  this_record = {}
  column_names.each_with_index do |col, i|
    this_record[col] = row[i]
  end
  records << this_record
end

各シートを手動で CSV に変換したくない場合は、Spreadsheet gem などを使用して各シートを配列の配列に変換することができます。これは基本的に CSV ファイルです。

ruby では、ハッシュはEnumerable配列と同じようにクラスから継承します。したがって、ハッシュをタプルの配列 (それぞれのキーと値を持つ 2 つの要素の配列) に変換するには、次のようにするだけです。

records = records.map(&:to_a)

しかし、それは必須ではありません。配列の配列と同じように、ハッシュを直接反復して同時に割り当てることができます

records.each_with_index do |hsh, i|
  hsh.each do |k,v|
    puts "record #{i}: #{k}='#{v}'"
  end
end
于 2015-08-20T23:39:21.387 に答える