12/08/2018, 16:36

Tạo Dropdown list khi dùng gem axlsx trong rails

Thật thuận tiện khi bạn sử dụng file excel và có giá trị để lựa chọn, ví dụ trong một file quản lý product, sẽ có các trường như category, ... để tránh nhầm tên khi nhập bằng tay bạn sẽ tạo ra một dropdown list để thuận tiện cho việc lựa chọn, hay bạn có một danh sách các thành viên trong nhóm, bạn ...

Thật thuận tiện khi bạn sử dụng file excel và có giá trị để lựa chọn, ví dụ trong một file quản lý product, sẽ có các trường như category, ... để tránh nhầm tên khi nhập bằng tay bạn sẽ tạo ra một dropdown list để thuận tiện cho việc lựa chọn, hay bạn có một danh sách các thành viên trong nhóm, bạn không muốn cứ chọn tới ai là phải gõ lại tên người đó, hoặc copy tên họ nên thuận tiện nhất là bạn sử dụng một dropdown list cho việc đó. việc export ra một mẫu để người dùng có thể điền thông tin vào đó thì cũng không phải là một yêu cầu gì quá khắt khe, và file excel đó có sử dụng data validation là một dropdown list thì cũng không hề khó. với việc bạn sử dụng gem axlsx thì nó lại càng đơn giản hơn nữa. các bươc thực hiện: B1: Cài đặt gem (cái này bạn tự tìm trên google nhé) B2: Tạo file:

require 'axlsx'

Axlsx::Package.new do |p|
  wb = p.workbook
    wb.add_worksheet(name: 'list') do |sheet|
      1.upto(10){|i| sheet.add_row([i])}
    end
    // tạo dropdown list cho ô A1
    wb.add_worksheet(name: 'Report') do |sheet|
      sheet.add_data_validation("A1", {
        :type => :list,
        :formula1 => 'list!A1:A9',
        :showDropDown => false,
        :showInputMessage => true,
        :promptTitle => 'thông báo khi chọn',
        :prompt => 'Please select a valid blah'
        })
    end
    send_excel_file p
end

  def send_excel_file book
    book.serialize  "test.xlsx"
    filename = "#{Time.zone.now}.xlsx"
    file_content = File.read("test.xlsx")
    send_data file_content, filename: filename
  end

bạn có thể thay đổi là toàn bộ cột có dropdown list bằng việc sử dụng "A1:A100" thay cho "A1" ở vị trí hiển thị dropdown list Cảm ơn bạn đã đọc bài viết!

0