Axlsx Ruby Gem - 使用自定义值创建下拉列表

时间:2017-02-23 16:44:34

标签: ruby axlsx

我使用axlsx gem将数据从Ruby / Rails导出到excel中。

我需要添加一个包含自定义值的下拉列表 - value1,value2,value3等。以下是我试过的代码

excel = Axlsx::Package.new
wb = excel.workbook

wb.add_worksheet(name: "sample_sheet") do |sheet|
  sheet.add_data_validation("A1:A100", {
      :type => :list,
      :formula1 => "value1 value2 value3",
      :showDropDown => false,
      :showErrorMessage => true,
      :errorTitle => '',
      :error => 'Please use the dropdown selector to choose the value',
      :errorStyle => :stop,
      :showInputMessage => true,
      :prompt => 'Choose the value from the dropdown'
  })
end

excel.serialize('sample_excel.xlsx')

代码创建了excel,但是当我打开它时,我得到了这个excel错误excel error 这些值不会添加到下拉列表中。

可替换地,

:formula1 => "B1:B2"

工作正常,它将B1和B2的内容添加到下拉列表中。在我的用例中,我需要添加自定义值,它们不会存储在Excel工作表中。

在数据验证下拉列表中添加自定义值的正确方法是什么?请帮助。

2 个答案:

答案 0 :(得分:2)

您需要将formula1更改为以下内容:

'"My, List, Of, Values"'

注意单引号内的双引号。

这里有一个如何做到这一点的例子: https://github.com/randym/axlsx/blob/master/examples/data_validation.rb#L54

答案 1 :(得分:1)

似乎无法在公式中指定值,但以下解决方案适用于您的情况。

.axlsx文件上添加另一个工作表以保留自定义值:

months_sheet = wb.add_worksheet(:name => 'DropDown Values') { |ws| ws.sheet_protection.password = 'pa55w0rd' } 
months_sheet.add_row ['value1', 'value2', 'value3'] 

然后将您的代码更改为:

wb.add_worksheet(name: "sample_sheet") do |sheet|
  sheet.add_data_validation("A1:A100", {
      :type => :list,
      :formula1 => "'DropDown Values'!A$1:C$1",
      :showDropDown => false,
      :showErrorMessage => true,
      :errorTitle => '',
      :error => 'Please use the dropdown selector to choose the value',
      :errorStyle => :stop,
      :showInputMessage => true,
      :prompt => 'Choose the value from the dropdown'
  })
end

$的{​​{1}}为necessary