在ruby中操作Excel电子表格的方法有很多,在windows下就可以使用win32ole库来调用系统本身的DOM进行操作,但如果离开windows环境,我们就需要使用其它的一些gem包了,如Spreadsheet。
首安装Spreadsheet,使用命令gem install Spreadsheet:
如果网络不好,就要先将spreadsheet包下载于本地,注意上面的信息可知,spreadsheet包依赖于ruby-ole包,故你在手动下载安装时不要忘了先安装它。
下面帖出代码:
读:
require "rubygems"
require "spreadsheet"
Spreadsheet.client_encoding = "UTF-8"
book = Spreadsheet.open("test.xls")
# 得到第一个表格
sheet1 = book.worksheet(0)
test_file = File.open("test.txt", "w")
sheet1.each do |row|
row.collect do |value|
test_file.write("#{value}\t")
end
test_file.write("\r\n")
end
test_file.close()
写:
# 引入spreadsheet插件
require "rubygems"
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,
:align => :merge, :color=>"red", :border=>1,
:border_color=>"black", :pattern => 1 ,
:pattern_fg_color => "yellow" )
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'
效果图:
在使用SpreadSheet这个包时,有点遗憾的是,它不能正真的实现单元格合并。
今天看了yingjie_xiao的方法实现合并,不知行不行,附上方法,出处http://blog.csdn.net/yingjie_xiao/article/details/8557007:
sheet1.merge_cells(start_row, start_col, end_row, end_col)
参考博客: