2

我是编程的新手......提前感谢所有回答我的人......我正在尝试从搜索开始打印列。实际上我的excel是这样组成的:

|      | Header | Header | Header | Header |
|Header|Server 1|Server 2|Server 3|Server 4|
|Header|  Data  |  Data  |  Data  |  Data  |
|Header|  Data  |  Data  |  Data  |  Data  |
|Header|  Data  |  Data  |  Data  |  Data  |

这是我的代码,但输出不是我要找的......

fo_set_parse = xls.parse(:header_search => ['Server'], :clean => true)
fo_set_parse.each do |row|
row.each do |key,value| 
    if value != nil 
        puts "#{value}"
    end
  end
end

我想从“服务器”搜索开始以相同的 excel 样式打印。“服务器”的数量每次都在变化,所以我不能使用类似的东西

1.upto(xls.last_column) do |col|
   server1 = xls.cell(2,col)
   server2 = xls.cell(3,col)
   server3 = xls.cell(4,col)
   server4 = xls.cell(5,col)
   puts "#{server1}\t #{server2}\t #{server3}\t #{server4}\t"
end

有什么帮助吗?

4

1 回答 1

0

我对 roo 不熟悉(乍一看,似乎没有很多示例可供参考),但是如何:

data_row_definitions = {
  :data_a => 2,                          # i.e. data_a is stored in row 2 for all servers
  :data_b => 3,
  :data_c => 4,
}
server_columns = 2.upto(xls.last_column) # or whatever columns the servers are listed

server_columns.map do |server_col|
  data_for_server = Hash[
    data_row_definitions.map do |data_name, row|
      cell_value = xls.cell(row, server_col)
      [data_name, cell_value]
    end
  ]
end

使用如下表格:

|       |Server 1|Server 2|Server N|
| dataA |       1|       3|       7|
| dataB |      10|      35|      14|
| dataC |     100|      95|      28|

(我想)你会得到数据结构:

[
  {
    "dataA" => 1,
    "dataB" => 10,
    "dataC" => 100,
  },
  {
    "dataA" => 3,
    "dataB" => 35,
    "dataC" => 95,
  },
  {
    "dataA" => 7,
    "dataB" => 14,
    "dataC" => 28,
  },
]

并且应该适用于N您拥有的任何服务器/列,因为每个服务器/列都在server_columns变量中枚举。

于 2014-04-22T03:21:05.850 回答