2012-06-04 2 views
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가 인수가됩니다 (데이터 만). 그것을 배열로 반환하는 방법? 루아가 배열을 반환 할 수 없다면, 다른 어떤 보석이 있나요?나는 xlsx 파일을 읽기 위해 루비 보석 "roo"를 사용하고 있는데, 하나의 열의 내용을 배열로 반환하는 방법은 무엇입니까?

답변

1

주어진 열의 값을 배열로 반환하는 column 메서드가 있습니다. oo.column(2)을 호출하면 B 열의 값이 반환됩니다. oo.column('B')도 사용할 수 있습니다. 그것을 테스트하지 않았습니다.

+0

테스트를 통과했으나 작동하지 않았습니다. 'column'은 클래스 'Excelx'의 메소드가 아닙니다. – khakistone

+0

http://roo.rubyforge.org/rdoc/index.html - 문서에 따르면 ... 문서의 열 메서드를 살펴 봅니다. 다른 모든 유형의 스프레드 시트에 대한 기본 클래스 인 GenericSpreadsheet에 있습니다. 틀린 물건에 부르면 어쩌면? –

+0

v1.2.3을 사용하고 계십니까? –

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