rubyXL, 用于 reading/writing/modifying. xlsx 和. xlsm 文件的ruby lib
- 源代码名称:rubyXL
- 源代码网址:http://www.github.com/weshatheleopard/rubyXL
- rubyXL源代码文档
- rubyXL源代码下载
- Git URL:
git://www.github.com/weshatheleopard/rubyXL.git
- Git Clone代码到本地:
git clone http://www.github.com/weshatheleopard/rubyXL
- Subversion代码到本地:
$ svn co --depth empty http://www.github.com/weshatheleopard/rubyXL Checked out revision 1. $ cd repo $ svn up trunk
rubyXL
这里 gem 支持在xlsx文件( 打开XML格式) 上运行。 尽管它能够正确解析整个ioctl结构,但是目前主要重点是读取Excel的文件。
请注意,专有二进制xls格式不受支持。
要安装的插件:
gem install rubyXL
要使用的:
require 'rubyXL' # Assuming rubygems is already required
解析现有工作簿
workbook = RubyXL::Parser.parse("path/to/Excel/file.xlsx")
创建新工作簿
workbook = RubyXL::Workbook.new
电子邮件访问
访问工作表
workbook.worksheets[0] # Returns first worksheet
workbook[0] # Returns first worksheet
workbook['Sheet1'] # Finds and returns worksheet titled"Sheet1"
访问一行( 单元格的array )
请注意,工作表是一个的稀疏的行,行。 代码必须期望它从中的任何行都可能为零。
worksheet = workbook[0]
worksheet.sheet_data[0] # Returns first row of the worksheet
worksheet[0] # Returns first row of the worksheet
访问单元格对象
请注意,行是一个的稀疏 array 。 你的代码必须预期任何plucks从 array 中的单元格都可以能为零。
worksheet = workbook[0]
worksheet.sheet_data[0][0] # Returns cell A1 in the worksheet
worksheet[0][0] # Returns cell A1 in the worksheet
用于访问单元格属性的包装
cell = workbook[0][0][0]
cell.is_struckthrough # Returns +true+ if the cell is struckthrough, other boolean properties have same syntax
cell.font_name
cell.font_size
cell.font_color
cell.fill_color
cell.horizontal_alignment
cell.vertical_alignment
cell.get_border(:top)
cell.get_border_color(:top)
用于访问行属性的包装
请注意:这些方法正逐步被淘汰,有利于OOXML对象模型。
worksheet = workbook[0]
worksheet.get_row_fill(0)
worksheet.get_row_font_name(0)
worksheet.get_row_font_size(0)
worksheet.get_row_font_color(0)
worksheet.is_row_underlined(0)
worksheet.get_row_height(0)
worksheet.get_row_alignment(0, true)
worksheet.get_row_alignment(0, false)
worksheet.get_row_border(0, :right)
worksheet.get_row_border_color(0, :right)
访问列属性
请注意:这些方法正逐步被淘汰,有利于OOXML对象模型。
worksheet = workbook[0]
worksheet.get_column_fill(0)
worksheet.get_column_font_name(0)
worksheet.get_column_font_size(0)
worksheet.get_column_font_color(0)
worksheet.is_column_underlined(0)
worksheet.get_column_width(0)
worksheet.get_column_alignment(0, :horizontal)
worksheet.get_column_alignment(0, :vertical)
worksheet.get_column_border(0, :right)
worksheet.get_column_border_color(0, :right)
table-读取
为了阻止内存中不必要的数据 reshuffling,方法extract_data和get_table被废弃了。 你应该直接访问行和单元格并进行迭代:
worksheet.each { |row|
row && row.cells.each { |cell|
val = cell && cell.value
do_whatever_you_want(val)
}
}
修改
添加工作表
worksheet = workbook.add_worksheet('Sheet2')
重命名工作表
worksheet.sheet_name = 'Cool New Name'
添加单元格
worksheet.add_cell(0, 0, 'A1') # Sets cell A1 to string"A1"
worksheet.add_cell(0, 1, '', 'A1') # Sets formula in the cell B1 to '=A1'
更改单元格
worksheet[0][0].change_contents("", worksheet[0][0].formula) # Sets value of cell A1 to empty string, preserves formula
更改字体
worksheet.sheet_data[0][0].change_font_bold(true) # Makes A1 bold
worksheet.change_row_italics(0,true) # Makes first row italicized
worksheet.change_column_font_name(0, 'Courier') # Makes first column have font Courier
正在更改填充
worksheet.sheet_data[0][0].change_fill('0ba53d') # Sets A1 to have fill #0ba53d
worksheet.change_row_fill(0, '0ba53d') # Sets first row to have fill #0ba53d
worksheet.change_column_fill(0, '0ba53d') # Sets first column to have fill #0ba53d
更改边框
# Possible weights: hairline, thin, medium, thick
# Possible"directions": top, bottom, left, right, diagonal
worksheet.sheet_data[0][0].change_border(:top, 'thin') # Sets A1 to have a top, thin border
worksheet.change_row_border(0, :left, 'hairline') # Sets first row to have a left, hairline border
worksheet.change_column_border(0, :diagonal, 'medium') # Sets first column to have diagonal, medium border
# Set the border style first so there's something to color.
worksheet.change_row_border_color(0, :top, '0ba53d') # Sets first row to have a green top border
worksheet.change_column_border_color(0, :top, '0ba53d') # Sets first column to have a green top border
更改对齐方式水平
中心,分布式,justify,左,右
worksheet.sheet_data[0][0].change_horizontal_alignment('center') # Sets A1 to be centered
worksheet.change_row_horizontal_alignment(0, 'justify') # Sets first row to be justified
worksheet.change_column_horizontal_alignment(0, 'right') # Sets first column to be right-aligned
垂直
底部,居中,分布,顶部
worksheet.sheet_data[0][0].change_vertical_alignment('bottom') # Sets A1 to be bottom aligned
worksheet.change_row_vertical_alignment(0, 'distributed') # Sets first row to be distributed vertically
worksheet.change_column_vertical_alignment(0, 'top') # Sets first column to be top aligned
更改行高
worksheet.change_row_height(0, 30) # Sets first row height to 30
更改列宽
worksheet.change_column_width(0, 30) # Sets first column width to 30
合并单元格
worksheet.merge_cells(0, 0, 1, 1) # Merges A1:B2
插入行
这里方法将在指定索引处插入一行,将所有行按 below 键向下推。 它还从上面的行复制样式。
警告:使用这里方法将断开引用已经移动的单元格的公式,因为公式不适用于移动的行。
worksheet.insert_row(1)
插入列
这里方法将在指定索引处插入列,将所有列的右侧都推到右侧。 它还将样式从列复制到左边
警告:使用这里方法将断开引用已经移动的单元格的公式,因为公式不适用于移动的列。
worksheet.insert_column(1)
删除行
这里方法将删除指定索引处的行,将所有行按 below 键向上推。
警告:使用这里方法将断开引用已经移动的单元格的公式,因为公式不适用于移动的行。
worksheet.delete_row(1)
删除列
这里方法将删除指定索引处的列,将所有列按左侧的左侧。
警告:使用这里方法将断开引用已经移动的单元格的公式,因为公式不适用于移动的列。
worksheet.delete_column(1)
插入单元格
这里方法将在指定位置插入单元格。 它接受 :right 或者:选项,在插入时向左或者向下移动单元格( 零意味着替换单元格)
警告:使用这里方法将断开引用已经移动的单元格的公式,因为公式不适用于移动单元格。
worksheet.insert_cell(0, 0,"blah", formula = nil, :right) # Inserts cell at A1, shifts cells in first row right
worksheet.insert_cell(0, 0,"blah", formula = nil, :down) # Inserts cell at A1, shifts cells in first column down
worksheet.insert_cell(0, 0,"blah") # Inserts cell at A1, shifts nothing
删除单元格
这里方法将删除指定位置的单元格。 它接受 :left 或者:向上选项,在删除时向上或者向上移动单元格( 零意味着删除单元格内容)
警告:使用这里方法将断开引用已经移动的单元格的公式,因为公式不适用于移动单元格。
worksheet.delete_cell(0, 0, :left) # Deletes A1, shifts contents of first row left
worksheet.delete_cell(0, 0, :up) # Deletes A1, shifts contents of first column up
worksheet.delete_cell(0, 0) # Deletes A1, does not shift cells
修改单元格格式
cell = worksheet[0][0]
cell.set_number_format '0.0000%' # For formats, see https://support.office.com/en-us/article/5026bbd6-04bc-48cd-bf33-80f18b4eae68
i/o
默认情况下,gem 在本地 文件系统 上操作文件:
workbook = RubyXL::Parser.parse("path/to/Excel/file.xlsx")
workbook.write("path/to/desired/Excel/file.xlsx")
它还可以操作StringIO对象,从而避免了将xlsx文件保存到磁盘的需要。 这种功能对于web服务器来说非常方便。
workbook = RubyXL::Parser.parse_buffer(buffer)
workbook.stream
杂项
RubyXL::Reference.ind2ref(0,0) == 'A1' # Converts row and column index to Excel-style cell reference
RubyXL::Reference.ref2ind('A1') == [0, 0] # Converts Excel-style cell reference to row and column index
更多信息
在大多数方法中,查看 spec/lib/中rspecs的文件
提供 rubyXL
-
检查最新的主机,确保功能没有实现,或者者 Bug 尚未被修复。
-
查看问题跟踪程序以确保某人已经没有请求它并/或者贡献它
-
fork 项目
-
启动特征/修正分支
-
提交并推送直到你对自己的贡献满意
-
一定要为它添加测试。 这很重要,所以我不会在以后的版本中无意中。
-
请不要与 Rakefile,版本或者历史混淆。 如果你想有自己的版本或者是必要的,那么很好,但是请隔离它自己的提交。