欢迎来到cool的博客
7

Music box

Click to Start

点击头像播放音乐
新博客链接

rubyXL, 用于 reading/writing/modifying. xlsx 和. xlsm 文件的ruby lib

 

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,版本或者历史混淆。 如果你想有自己的版本或者是必要的,那么很好,但是请隔离它自己的提交。

 

https://www.helplib.com/GitHub/article_60200 

返回列表