Spreadsheet是一个Ruby实现的gem,它可以使我们很方便的使用它对excel进行操作。
如何安装
gem install spreadsheet #你懂得
简单使用
Spreadsheet基本使用的包括以下几部分(C表示类,M表示模块):
- Column: ©用来指定列的格式化和提供了以列的形式遍历所有单元格的方法。
- Datatypes: (M)定义了可以将参数转换为Spreadsheet常用的属性的方法(boolean,colors,enum),
- Encoding: ©定义了编码转换的方法,基本用不到。
- Row: ©定义了对行为单位对Excel进行处理的方法,它是Array的子类,所以很多Array的方法它都可以使用。
- Workbook: ©主要来操作Excel的标签页,每个标签页就是一个Workbook.
- Worksheet: ©一个新的实例就是一个Excel。
- Format: ©定义Cell的格式的。 :font=>Spreadsheet::Font :number_format=>"GENERAL", :rotation=>0, :pattern=>1, :bottom_color=>:builtin_black, :top_color=>:builtin_black, :left_color=>:builtin_black, :right_color=>:builtin_black, :diagonal_color=>:builtin_black, :pattern_fg_color=>:yellow, :pattern_bg_color=>:border, :regexes=>{:date⇒>/[YMD]/, :date_or_time⇒>/[hmsYMD]/, :datetime⇒>/([YMD].[HS])|([HS].[YMD])/, :time⇒>/[hms]/}, :used_merge=>0, :horizontal_align=>:center, :text_wrap=>false, :vertical_align=>:bottom, :rotation_stacked=>false, :indent_level=>0, :shrink=>false, :text_direction=>:context, :left=>:none, :right=>:none, :top=>:none, :bottom=>:none, :cross_down=>false, :cross_up=>false
- Font: ©看名字就知道这个字体。 :name=>"Arial", :color=>:text, :weight=>700, :size=>14, :italic=>false, :strikeout=>false, :outline=>false, :shadow=>false, :escapement=>:normal, :underline=>:none, :family=>:swiss, :encoding=>:iso_latin1
操作一个Spreadsheet
# 引入spreadsheet插件 require "spreadsheet" # 声明Spreadsheet处理Excel文件组时的编码 Spreadsheet.client_encoding = "UTF-8" # 创建一个Spreadsheet对象,它相当于Excel文件 book = Spreadsheet::Workbook.new # 创建Excel文件中的一个表格,并命名为 "Test Excel" sheet1 = book.create_worksheet :name => "Test Excel" # 设置一个Excel文件的格式 default_format = Spreadsheet::Format.new(:weight => :bold,#字体加粗 :size => 14, :horizontal_align: => :merge, #表格合并 :color=>"red", :border=>1, :border_color=>"black", :pattern => 1 , :pattern_fg_color => "yellow" )#这里需要注意,如果pattern不手动处理,会导致pattern_fg_color无实际效果 data = "测试" # 指定一个在表格中的第一行对象 test_row = sheet1.row(0) # 为第一行的前5个列指定格式 5.times do |i| test_row.set_format(i, default_format) end # 为第一行的第一列指定值 test_row[0] = data # 将创建的Spreadsheet对象写入文件,形成电子表格 book.write 'book2.xls'
如果需要合并某些列,建议使用merge_cells(begin_row,begin_col,end_row,end_col)。i
格式化时间
当设置某个cell为时间时,Spreadsheet将会尝试将cell的number_format到一个相关的值。如果自己定义了时间的格式,Spreadsheet将会使用程序员定义的。如果一个Cell已经被格式化,Spreadsheet将会保留原有的格式。
row[4] = Date.new 1975, 8, 21 # -> assigns the builtin Date-Format: 'M/D/YY' book.add_format Format.new(:number_format => 'DD.MM.YYYY hh:mm:ss') row[5] = DateTime.new 2008, 10, 12, 11, 59 # -> assigns the added DateTime-Format: 'DD.MM.YYYY hh:mm:ss' row.set_format 6, Format.new(:number_format => 'D-MMM-YYYY') row[6] = Time.new 2008, 10, 12 # -> the Format of cell 6 is left unchanged.
参考资料:
- http://blog.csdn.net/xianqiang1/article/details/7298389
- http://stackoverflow.com/questions/7730112/ruby-spreadsheet-row-background-color 3.http://stackoverflow.com/questions/11603216/merging-cells-with-ruby-gem-spreadsheet
- Spreadsheet Guide