12/08/2018, 13:12

Gem RubyXL

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 ...

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_awidth(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_awidth(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

0