我使用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错误 这些值不会添加到下拉列表中。
可替换地,
:formula1 => "B1:B2"
工作正常,它将B1和B2的内容添加到下拉列表中。在我的用例中,我需要添加自定义值,它们不会存储在Excel工作表中。
在数据验证下拉列表中添加自定义值的正确方法是什么?请帮助。
答案 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。