Gem RubyXL
Bài đăng này đã không được cập nhật trong 8 năm
Gem RubyXL cung cấp các phương thức tính toán trên file xlsx
.
Nó có khả năng đọc cấu trúc các tập tin định dạng Excel, thay đổi giá trị, thuộc tính các ô/hàng/cột trong đó.
I. Cài đặt:
Thêm dòng sau vào file Gemfile
sau đó bundle install
:
gem install rubyXL
II. Cách dùng:
Thêm require
vào ứng dụng:
require 'rubyXL'
1. Tạo một workbook với file excel có sẵn
workbook = RubyXL::Parser.parse("path/to/Excel/file.xlsx")
2. Tạo mới một Workbook
workbook = RubyXL::Workbook.new
3. Truy cập
- Truy cập vào một Worksheet
workbook.worksheets[0] # Trả về worksheet đầu tiên
workbook[0] # Trả về worksheet đầu tiên
workbook['Sheet1'] # Trả về worksheet có tên là 'Sheet1'
- Truy cập vào một hàng (gồm nhiều ô)
worksheet = workbook[0]
worksheet.sheet_data[0] # Trả về hàng đầu tiên của worksheet
worksheet[0] # Trả về hàng đầu tiên của worksheet
- Truy cập vào một ô
worksheet = workbook[0]
worksheet.sheet_data[0][0] # Trả về ô A1 trong worksheet
worksheet[0][0] # Trả về ô A1 trong worksheet
- Lấy ra các thuộc tính của ô/hàng/cột
worksheet = workbook[0]
cell = workbook[0][0][0]
cell.is_struckthrough
cell.font_name
cell.font_size
cell.font_color
cell.fill_color
cell.horizontal_alignment
cell.vertical_alignment
cell.border_top
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_horizontal_alignment(0)
worksheet.get_row_vertical_alignment(0)
worksheet.get_row_border_right(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_horizontal_alignment(0)
worksheet.get_column_vertical_alignment(0)
worksheet.get_column_border_right(0)
- Đọc worksheet
Để không bị lận lộn giữa các hàng, cột, ô, có thể đọc lần lượt theo từng hàng, từng ô trong hàng đó:
worksheet.each { |row|
row && row.cells.each { |cell|
val = cell && cell.value
do_whatever_you_want(val)
}
}
4. Sửa đổi
- Thêm Worksheets
worksheet = workbook.add_worksheet('Sheet2')
- Đổi tên Worksheets
worksheet.sheet_name = 'Cool New Name'
- Thiết lập giá trị cho từng ô
worksheet.add_cell(0, 0, 'A1') # Thiết lập giá trị ô A1 bằng "A1"
worksheet.add_cell(0, 1, '', 'A1') # Thiết lập công thức tính toán của ô B1 giống ô A1
- Thay đổi giá trị của ô
worksheet[0][0].change_contents("", worksheet[0][0].formula) # Thay đổi giá trị của ô A1 về rỗng
- Thay đổi Fonts
worksheet.sheet_data[0][0].change_font_bold(true) # Thiết lập ô A1 font là bold
worksheet.change_row_italics(0,true) # Thiết lập hàng đầu tiên font là italics
worksheet.change_column_font_name(0, 'Courier') # Thiết lập cột đầu tiên font chữ là Courier
- Thay đổi Fills
worksheet.sheet_data[0][0].change_fill('0ba53d') # Thiết lập ô A1 fill: '0ba53d'
worksheet.change_row_fill(0, '0ba53d') # Thiết lập hàng đầu tiên fill: '0ba53d'
worksheet.change_column_fill(0, '0ba53d') # Thiết lập cột đầu tiên fill: '0ba53d'
- Thay đổi Borders
# Các loại: hairline, thin, medium, thick
# Vị trị: top, bottom, left, right, diagonal
worksheet.sheet_data[0][0].change_border(:top, 'thin') # Thiết lập ô A1 có boder: top, thin
worksheet.change_row_border(0, :left, 'hairline') # Thiết lập hàng đầu tiên có boder: left, hairline
worksheet.change_column_border(0, :diagonal, 'medium') # Thiết lập cột đầu tiên có boder: diagonal, medium
- Căn lề
# Các kiểu:
# Horizontal: center, distributed, justify, left, right
# Vertical: bottom, center, distributed, top
worksheet.sheet_data[0][0].change_horizontal_alignment('center')
worksheet.change_row_horizontal_alignment(0, 'justify')
worksheet.change_row_vertical_alignment(0, 'distributed')
worksheet.change_column_vertical_alignment(0, 'top')
- Thay đổi chiều cao của hàng
worksheet.change_row_height(0, 30) # Thiết lập hàng đầu tiên có chiều cao là 30
- Thay đổi chiều rộng cửa cột
worksheet.change_column_width(0, 30) # Thiết lập cột đầu tiên có chiều cao là 30
- Gộp các ô
worksheet.merge_cells(0, 0, 1, 1) # Gộp 2 ô A1:B2
- Chèn thêm hàng/cột
Phương thức này sẽ chèn một hàng/cột vào vị trí chỉ định, đẩy tất cả các hàng/cột từ vị trí đó xuống dưới/về phía bên phải nó. Hàng/cột này có style giống với hàng bên trên/cột phía bên trái của nó.
worksheet.insert_row(1)
worksheet.insert_column(1)
- Xóa hàng/cột
Phương thức này sẽ xóa một hàng/cột ở vị trí chỉ định, dồn tất cả các hàng/cột từ vị trí đó lên trên/về phía bên trái nó.
worksheet.delete_row(1)
worksheet.delete_column(1)
- Chèn thêm ô
Phương thức này chèn thêm 1 ô ở vị trí chỉ định. Tùy theo :right hoặc :down mà những ô cùng hàng ở phía bên phải sẽ dồn về phía bên phải hoặc những ô cùng cột ở phía dưới sẽ dồn xuống dưới.
worksheet.insert_cell(0, 0, "blah", formula = nil, :right) # Thêm 1 ô ở vị trí A1, đẩy các ô cùng hàng về phía bên phải
worksheet.insert_cell(0, 0, "blah", formula = nil, :down) # Thêm 1 ô ở vị trí A1, đẩy các ô cùng cột xuống dưới
worksheet.insert_cell(0, 0, "blah")
- Xóa ô
Phương thức này xóa 1 ô ở vị trí chỉ định. Tùy theo :left hoặc :up mà những ô cùng hàng ở phía bên phải sẽ dồn về phía bên trái hoặc những ô cùng cột ở phía dưới sẽ dồn lên trên, không có gì nghĩa là chỉ xóa nội dung ô đó đi thôi.
worksheet.delete_cell(0, 0, :left) # Xóa ô A1, dồn các ô cùng hàng về phía bên trái
worksheet.delete_cell(0, 0, :up) # Xóa ô A1, dồn các ô cùng cột lên trên
worksheet.delete_cell(0, 0) # Xóa nội dung ô A1
- Thay đổi format của ô
cell = worksheet[0][0]
cell.set_number_format '0.0000%'
Tài liệu dịch: https://github.com/weshatheleopard/rubyXL
All rights reserved