rubyXL
To Install:
gem install rubyXL
To Use:
require 'rubyXL' #assuming rubygems is already required
Parsing an existing workbook
workbook = RubyXL::Parser.parse("path/to/Excel/file.xlsx")
Creating a new Workbook
workbook = RubyXL::Workbook.new
Accessing
Accessing a Worksheet
workbook.worksheets[0] #returns first worksheet
workbook[0] #returns first worksheet
Accessing a Row (Array of Cells)
workbook[0].sheet_data[0] #returns first row in first worksheet
workbook[0][0] #returns first row in first worksheet
Accessing a Cell
workbook[0].sheet_data[0][0] #returns A1 in first worksheet
workbook[0][0][0] #returns A1 in first worksheet
Accessing Cell properties
workbook[0][0][0].is_struckthrough() #returns if A1 is struckthrough, other boolean properties have same syntax
workbook[0][0][0].font_name #returns font name for A1
workbook[0][0][0].font_size #returns font size for A1
workbook[0][0][0].font_color #returns font color for A1
workbook[0][0][0].fill_color #returns fill color for A1
workbook[0][0][0].horizontal_alignment #returns horizontal alignment for A1 (or nil if it does not exist)
workbook[0][0][0].vertical_alignment #returns vertical alignment for A1 (or nil if it does not exist)
workbook[0][0][0].border_top #returns type of border on top of A1 (nil if none exists), other directions have same syntax
Accessing row properties
workbook[0].get_row_fill(0) #returns fill color for first row
workbook[0].get_row_font_name(0) #returns font name for first row
workbook[0].get_row_font_size(0) #returns font size for first row
workbook[0].get_row_font_color(0) #returns font color for first row
workbook[0].is_row_underlined(0) #returns if first row is italicized, other boolean properties have same syntax
workbook[0].get_row_height(0) #returns height of first row
workbook[0].get_row_horizontal_alignment(0) #returns horizontal alignment of first row (nil if none exists)
workbook[0].get_row_vertical_alignment(0) #returns vertical alignment of first row (nil if none exists)
workbook[0].get_row_border_right(0) #returns weight of right border of first row (nil if none exists), other directions have the same syntax
Accessing column properties
workbook[0].get_column_fill(0) #returns fill color for first column
workbook[0].get_column_font_name(0) #returns font name for first column
workbook[0].get_column_font_size(0) #returns font size for first column
workbook[0].get_column_font_color(0) #returns font color for first column
workbook[0].is_column_underlined(0) #returns if first column is italicized, other boolean properties have same syntax
workbook[0].get_column_height(0) #returns height of first column
workbook[0].get_column_horizontal_alignment(0) #returns horizontal alignment of first column (nil if none exists)
workbook[0].get_column_vertical_alignment(0) #returns vertical alignment of first column (nil if none exists)
workbook[0].get_column_border_right(0) #returns weight of right border of first column (nil if none exists), other directions have the same syntax
Table identification
#get table
Modifying
Adding Worksheets
workbook.worksheets << Worksheet.new('Sheet2')
Adding Cells
workbook.worksheets[0].add_cell(0,0,'A1') #sets A1 to string "A1"
workbook.worksheets[0].add_cell(0,1,'','A1') #sets B1 to value of A1
workbook.worksheets[0].add_cell_obj(Cell.new(1,0,'blah')) #sets A2 to 'blah'
Changing Fonts
workbook.worksheets[0].sheet_data[0][0].change_font_bold(true) #sets A1 to bold
workbook.worksheets[0].change_row_font_italics(0,true) #makes first row italicized
workbook.worksheets[0].change_column_font_name(0,'Courier') #makes first column have font Courier
Changing Fills
workbook.worksheets[0].sheet_data[0][0].change_fill('0ba53d') #sets A1 to have fill #0ba53d
workbook.worksheets[0].change_row_fill(0, '0ba53d') #sets first row to have fill #0ba53d
workbook.worksheets[0].change_column_fill(0, '0ba53d') #sets first column to have fill #0ba53d
Changing Borders
# Possible weights: hairline, thin, medium, thick
# Possible "directions": top, bottom, left, right, diagonal
workbook.worksheets[0].sheet_data[0][0].change_border_top('thin') #sets A1 to have a top, thin border
workbook.worksheets[0].change_row_border_left(0, 'hairline') #sets first row to have a left, hairline border
workbook.worksheets[0].change_column_border_diagonal(0, 'medium') #sets first column to have diagonal, medium border
Changing Alignment
Horizontal
center, distributed, justify, left, right
workbook.worksheets[0].sheet_data[0][0].change_horizontal_alignment('center') #sets A1 to be centered
workbook.worksheets[0].change_row_horizontal_alignment(0,'justify') #sets first row to be justified
workbook.worksheets[0].change_column_horizontal_alignment(0,'right'), #sets first column to be right-aligned
Vertical
bottom, center, distributed, top
workbook.worksheets[0].sheet_data[0][0].change_vertical_alignment('bottom') #sets A1 to be bottom aligned
workbook.worksheets[0].change_row_vertical_alignment(0,'distributed') #sets first row to be distributed vertically
workbook.worksheets[0].change_column_vertical_alignment(0,'top') #sets first column to be top aligned
Changing Row Height
workbook.worksheets[0].change_row_height(0,30) #sets first row to be of height 30
Changing Column Width
workbook.worksheets[0].change_column_width(0,30) #sets first column to be of width 30
Merging Cells
workbook.worksheets[0].merge_cells(0,0,1,1) #merges A1:B2
Insert Row
#insert row
Insert Column
#insert column
Delete Row
#delete row
Delete Column
#delete column
Writing
workbook.write("path/to/desired/Excel/file.xlsx")
Miscellaneous
Cell.convert_to_cell(0,0) == 'A1' #converts row and column index to Excel-style index
Parser.convert_to_index('A1') == [0,0] #converts Excel-style index to row and column index
For more information
Take a look at the files in spec/lib/ for rspecs on most methods
Contributing to rubyXL
-
Check out the latest master to make sure the feature hasn’t been implemented or the bug hasn’t been fixed yet
-
Check out the issue tracker to make sure someone already hasn’t requested it and/or contributed it
-
Fork the project
-
Start a feature/bugfix branch
-
Commit and push until you are happy with your contribution
-
Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.
-
Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
Copyright
Copyright © 2011 Vivek Bhagwat. See LICENSE.txt for further details.