Skip to content

Instantly share code, notes, and snippets.

@rodrigovirgilio
Forked from jacaetevha/gist:557607
Created October 17, 2011 13:01
Show Gist options
  • Save rodrigovirgilio/1292555 to your computer and use it in GitHub Desktop.
Save rodrigovirgilio/1292555 to your computer and use it in GitHub Desktop.
require 'poi'
# given an Excel spreadsheet whose first sheet (Sheet 1) has this data:
# A B C D E
# 1 4 A 2010-01-04
# 2 3 B =DATE(YEAR($E$1), MONTH($E$1), A2)
# 3 2 C =DATE(YEAR($E$1), MONTH($E$1), A3)
# 4 1 D =DATE(YEAR($E$1), MONTH($E$1), A4)
workbook = POI::Workbook.open('spreadsheet.xlsx')
sheet = workbook.worksheets["Sheet 1"]
rows = sheet.rows
# get a cell's value -- returns the value as its proper type, evaluating formulas if need be
rows[0][0].value # => 4.0
rows[0][1].value # => nil
rows[0][2].value # => 'A'
rows[0][3].value # => nil
rows[0][4].value # => 2010-01-04 as a Date instance
rows[1][4].value # => 2010-01-03 as a Date instance
rows[2][4].value # => 2010-01-02 as a Date instance
rows[3][4].value # => 2010-01-01 as a Date instance
# you can access a cell in array style as well... these snippets are all equivalent
workbook.sheets[0][2][2] # => 'C'
workbook[0][2][2] # => 'C'
workbook.sheets['Sheet 1'][2][2] # => 'C'
workbook['Sheet 1'][2][2] # => 'C'
# you can access a cell in 3D cell format too
workbook['Sheet 1!A1'] # => 4.0
# you can even refer to ranges of cells
workbook['Sheet 1!A1:A3'] # => [4.0, 3.0, 2.0]
# if cells E1 - E4 were a named range, you could refer to those cells by its name
# eg. if the cells were named "dates"...
workbook['dates'] # => dates from E1 - E4
# to get the Cell instance, instead of its value, just use the Workbook#cell method
workbook.cell('dates') # => cells that contain dates from E1 to E4
workbook['Sheet 1!A1:A3'] # => cells that contain 4.0, 3.0, and 2.0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment