ユーザーがCSV/ExcelドキュメントをアップロードしてRooを使って解析できるようにしようとしていますが、それを理解する問題のビット。Rooを使ってRuby(Rails)を使ってExcelを解析する
現在のスクリプト
require 'roo'
xlsx = Roo::Excelx.new("./TestAppXL.xlsx")
xlsx.each_row_streaming do |row|
puts row.inspect # Array of Excelx::Cell objects
end
これは私が仕事を得ることができただけだった - それはJSONBように見えるものを返します。
私は何をしようとしていることは、いくつかの部分のプロセスです:
A)ユーザーが自分のウェブサイトに「カード」のリストをアップロードします(できるだけ多くの選択肢を許可しようとするとCSVやExcelなど。 )
B)即座にヘッダーのリストを返し、「どのヘッダーが名前、数量などですか」と尋ねます。
C)特定のヘッダーのデータを解析し、 'X'を実行します。
Bは私が主に援助する必要があります。私はRooを正確に理解するのに苦労している。ヘッダーを制御することはできないので、数値の列番号は使用できません。
(これは、最後にコントローラでそれを行うには、多分もっと簡単な方法になりますので、Railsのタグに追加する。)
スクリプトに
を更新しました、私は実際に進歩をたくさん作りました。まだ私の元の要求に近づこうとしている。
require 'roo'
require 'roo-xls'
xlsx = Roo::Spreadsheet.open('Demo.xls')
headers = xlsx.first_row
puts xlsx.row(headers)
puts "Which number header is the Card Name?"
CardName = gets
puts xlsx.column(CardName.to_i)
# => Returns basic info about the spreadsheet file
取得にもっと多くのロジックが必要ですが、現在は '3'を入力すると 'CardName'列のすべての内容が返されます。行を繰り返し処理するようになりました。
擬作業スクリプト
require 'roo'
require 'roo-xls'
xlsx = Roo::Spreadsheet.open('Demo.xls')
headers = xlsx.first_row
puts xlsx.row(headers)
puts "Which number header is the Card Name?"
CardName = gets.to_i
specHeader = xlsx.cell(headers,CardName)
xlsx.column(CardName).drop(0).each_with_index do |item, index|
if index == 0
else
puts item
end
end
予想通りこれは、実際に実行している、と私は今、レイク仕事にファイルを送り始めることができます。まだいくつかの反復作業を行っていますが、これは非常に近いです。
ヘッダーを制御できません。ユーザーにヘッダーの名前と数量などの名前を付けてもらうことはできませんか?彼らにとってはより簡単になり、あなたはその慣習を守ることが確実になります – peter
@peter私の代わりに貧しい言い回しがあるかもしれません。私は彼らに "CardName"を特に指定するように要求することができましたが、 'xlsx.row(1)'を取り込み、選択肢を返し、具体的に 'which is which'を教えたり、もし 'name'のようなものであれば、おそらく 'CardName'でしょう。 – DNorthrup
Excelでテキストファイルをインポートすると、私はいつも嫌いなことがあります。また、ヘッダーローの行数はカウントされず、2行目から5行目タイトルの付いた一般的なヘッダーです。私は正しいヘッドネームで読み上げる例を挙げることができますが、あなたに選択させることではなく、あなたの例におけるputsやgetsがRailsサイト上で動作しないことを認識していますか? – peter