1
require 'gchart'
require 'rubygems'
require 'roo'

oo = Excelx.new("datav.xlsx")
oo.default_sheet = oo.sheets.first
2.upto(47) do |line|
  data_a = [oo.cell(line,'B')]
  data_b = [oo.cell(line,'E')]

  chart_a = Gchart.new( :type => 'line',
                        :title => "A",
                        :theme => :keynote,
                        :width => 600,
                        :height => 500,
                        :data => data_a, 
                        :line_colors => 'e0440e',
                        :axis_with_labels => ['x', 'y'], 
                        :axis_range => [[0,50,20], [0,3000,500]],
                        :filename => "tmp/chart_a.png")

  chart_b = Gchart.new( :type => 'line',
                        :title => "B",
                        :theme => :keynote,
                        :width => 600,
                        :height => 500,
                        :data => data_b, 
                        :line_colors => 'e62ae5',
                        :axis_with_labels => ['x', 'y'], 
                        :axis_range => [[0,50,20], [0,3000,500]],
                        :filename => "tmp/chart_b.png")

  # Record file in filesystem
  chart_a.file
  chart_b.file

end

这将使 B 列和 E 列的每个单元格的内容成为参数 :data 单独。如何将其作为数组返回?如果 roo 不能返回数组,那么还有其他 gem 这样做吗?

4

2 回答 2

1

有一种column方法可以将给定列的值作为数组返回。调用oo.column(2)应该返回 B 列的值。oo.column('B')也可能有效。没有测试过。

于 2012-06-04T14:00:51.417 回答
0

我需要将行作为哈希返回以与我用于 FasterCSV 的逻辑兼容。这将为您提供第一行的哈希作为键和当前行作为值。

def row_from_excel(s, line)
  row = {}
  s.first_column.upto(s.last_column) do |col|
    cell_name = s.cell(1, col)
    logger.debug "************* #{col} => #{cell_name} => #{s.cell(line, col)}"
    row[cell_name] = s.cell(line, col)      
  end

  row    
end

s = Excelx.new(path_to_file) # or Excel.new(path_to_file)
2.upto(s.last_row) do |line|
  row = row_from_excel(s, line)
end
于 2012-11-27T14:44:57.280 回答