在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)
参考博客:
rails导出excel插件 spreadsheet的标准使用
Ruby Spreadsheet 合并单元格方法
Getting Started with Spreadsheet