2017-05-30 7 views
0

Roo gemを使用してExcelスプレッドシートからDateTimeオブジェクトを読み込もうとしています。 * 3/14/15タイプの日付としてフォーマットされたセルを正常に読み取ることができました(アスタリスクは、地域の日付と時刻の設定に基づいてフォーマットされていることを示しています)。これらのセルをインポートするときにcell_typeを確認すると、タイプは[:numeric_or_formula, "mm-dd-yy"]になります。私はこれらのタイプが[:datetime]であることを期待していますが、まだmm-dd-yyフォーマットの値をcell.formatted_valueから得ることができます。どのようにExcelセルはRooによってcell_type [:datetime]として読み込まれるようにフォーマットする必要がありますか?

タイプ3/14/15の日付としてフォーマットされたセルを読み込もうとすると(つまり、フォーマットは地域の日付と時刻の設定に基づいていません)、3/14/15 13:30になりますcell_type[:numeric_or_formula, "m/d/yy;@"]です。私がcell.formatted_valueと呼ぶとき、私は"0/d/yy;@"を得る。

Excelは、Rooがタイプ:datetimeであると読み込まれるようにフォーマットする方法はありますか?そうでない場合、なぜRooが地域の日時設定に依存して作成するセルのタイプですか?

は参考のため、ここでは、スプレッドシートからのセルを読み取るための私が今持っているコードです:私はより良いclassではなくcell_typeをチェックすることで、細胞のタイプを判定することができるように

xlsx = Roo::Spreadsheet.open(self.file) 

raw_key_list = xlsx.sheet('index_upload').row(4) 
key_list = raw_key_list[4..raw_key_list.length].compact 

xlsx.sheet('index_upload').each_row_streaming(offset: 6, pad_cells: true) do |row| 

    key_list.each_with_index do |key, idx| 

    next unless row[idx + 4].try(:cell_value) 

    if row[idx + 4].cell_type == [:numeric_or_formula, "mm-dd-yy"] 
     context_lookup.context_value_date = row[idx + 4].formatted_value 
    end 
    end 
end 
+0

私は(つまりテキスト)、 '数値のためのN '(または式)、またはExcelでcell_type'sは、ラベルの' L 'に限定されている'考えます空白のセルには 'b'を使います。日付は実際には、Excelと関係がある特定の方法でフォーマットされた数字です。 – Skippy

答えて

0

が見えます。私が設定した値についても、formatted_valueではなく、valueというセルを使用するだけで、DateTimeの書式付き文字列ではなく、DateTimeオブジェクト自体が返されることがわかりました。ここで

は、コードが今のようになります。

xlsx = Roo::Spreadsheet.open(self.file) 

raw_key_list = xlsx.sheet('index_upload').row(4) 
key_list = raw_key_list[4..raw_key_list.length].compact 

xlsx.sheet('index_upload').each_row_streaming(offset: 6, pad_cells: true) do |row| 
key_list.each_with_index do |key, idx| 

     next unless row[idx + 4].try(:cell_value) 

     if row[idx + 4].class == Roo::Excelx::Cell::DateTime 
     context_lookup.context_value_date = row[idx + 4].value 
     end 
end 
関連する問題