2014-12-06 23 views
0

我有一個包含146列和530行的電子表格。我想遍歷某些列,找到零值並根據類的類型更改值。我無法弄清楚如何做到這一點,現在我有這個打算對我來說:閱讀excel文件,解決或與零?值,編輯/格式個別列

require 'spreadsheet' 


Spreadsheet.client_encoding = 'UTF-8' 
raw_data = Spreadsheet.open '../October 2014.xls' 
raw_data_sheet = raw_data.worksheet 0 

designated_rows = raw_data_sheet.each {|row| [row[6], row[7], row[15], row[14], row[16], row[17], row[18], row[139], row[3], row[19]]} 

我已經嘗試了迭代像if row[3].nil? ? row[3] = "blank" : row[3].strip!; end但我只能得到這些運行,在此不實際更改列3的值文件。我希望在這些列中找到零值,並根據它們的類別將它們更改爲指定值,類別如下所示:

[String, String, Float, Float, Float, Float, Float, Date, String, Float]帶單元格引用它的["row[6]: String", "row[7]: String", "row[15]: Float", "row[14]: Float", "row[16]: Float", "row[17]: Float", "row[18]: Float", "row[139]: Date", "row[3]: String", "row[19]: Float"]如果這很重要。

任何人都可以協助這個嗎?你需要更多的信息嗎?謝謝你的回覆。

回答

1

designated_rows持有在內存中的整個電子表格,現在你有一個變量,你需要向下保存爲一個新的電子表格文件,或者你可以做到這一點,你已經修改後的一切:

raw_data = Spreadsheet.open '../October 2014.xls' 
raw_data_sheet = raw_data.worksheet 0 
keys = ["N/A", "N/A", 0.0, 0.0, 0.0, 0.0, 0.0, "N/A", "N/A", 0.0] 
raw_data_sheet.each do |row| 
    example_row.each_with_index { |val, i| example_row[i] = keys[i] if val.nil? } 
end 
raw_data.write '../October 2014.xls' 

nil邏輯示例:

[7] pry(main)> example_row = ["hi", nil, 9.9, 8.8, nil, 5.5, 1.2, nil, "hello", 1.1] 
=> ["hi", nil, 9.9, 8.8, nil, 5.5, 1.2, nil, "hello", 1.1] 
[8] pry(main)> example_row.each_with_index { |val, i| example_row[i] = keys[i] if val.nil? } 
=> ["hi", "N/A", 9.9, 8.8, 0.0, 5.5, 1.2, "N/A", "hello", 1.1] 
+0

您是否知道使用迭代並更改'nil'值的最佳邏輯? – heinztomato 2014-12-07 06:36:44

+0

更改爲什麼? – Anthony 2014-12-07 13:34:59

+0

如果column class = String或Date,則爲「N/A」,如果column class = Float,則爲0.0。感謝通過反饋方式,現在我可以如何應用更改。 – heinztomato 2014-12-07 15:48:29