Axlsx,构建动态列

The*_*end 1 excel report axlsx

我受委托为这里的一个系统制作动态报告构建插件.问题是这些报告非常复杂,每个报告有19个工作表,每个工作表包含多个表,这些表将填充各种数量和类型的数据,包括数据验证(下拉列表).

我最初的想法是让我们找到一颗红宝石.因为它是一个rails应用程序.没有多少可以选择,但我确实找到了Axlsx,这看起来是我最后的希望.

其中一个表有6列,其中4列需要数据验证.

现在我已经看到你可以设置每个列的样式,甚至可以通过该.add_style方法更改格式,

p.workbook do |wb|
  # define your regular styles
  styles = wb.styles
  title = styles.add_style :sz => 15, :b => true, :u => true
  default = styles.add_style :border => Axlsx::STYLE_THIN_BORDER
  header = styles.add_style :bg_color => '00', :fg_color => 'FF', :b => true
  profit = styles.add_style :border => Axlsx::STYLE_THIN_BORDER
  percent = styles.add_style :num_fmt => Axlsx::NUM_FMT_PERCENT, :border => Axlsx::STYLE_THIN_BORDER
Run Code Online (Sandbox Code Playgroud)

并在创建行时应用这些样式.

ws.add_row ['Quarter', 'Profit', '% of Total'], :style => header
ws.add_row ['Q1-2010', 'yes', '=B4/SUM(B4:B7)'], :style => [default, profit, percent]
Run Code Online (Sandbox Code Playgroud)

我已经看到有一种验证数据的方法.

p.workbook.add_worksheet(name: "dropdown") do |ws|
  ws.add_row ["rank_type"]
  ws.add_data_validation("A2:A1000", {
    :type => :list,
    :formula1 => 'lists!A2:A4',
    :showDropDown => false,
    :showErrorMessage => true,
    :errorTitle => '',
    :error => 'Please use the dropdown selector to choose a valid rank type',
    :errorStyle => :stop,
    :showInputMessage => true,
    :promptTitle => 'Rank type',
    :prompt => 'Please select a valid rank type'})
end
Run Code Online (Sandbox Code Playgroud)

但有没有办法在添加行时指定需要验证的单元格.或者将它们添加到各种大小的表中?

我认为如果您能够以与样式相同的方式指定数据验证将会很酷.这样的事情.

 boolean_validation = format.add_data_validation :type => list, :formula => 'lists!A2:A4'... (rest of the options)
Run Code Online (Sandbox Code Playgroud)

然后在创建行时

 ws.add_row ['Q1-2010', 'yes', '=B4/SUM(B4:B7)'], :style => [default, profit, percent], :format => [nil, boolean_validation, nil]
Run Code Online (Sandbox Code Playgroud)

有没有人试图这样的事情甚至可能?或者任何人都知道如何建立这样的

ran*_*dym 7

由于库现在存在,您需要与行插入分开指定数据验证.

我建议具有一个对象,它是负责生成您需要的可以计算和针对需要验证的范围内添加引用每个表类型.

我想你可能会发现Axlsx.cell_range方法方便,因为它可以采取单元阵列,并返回Excel的样式"A1:A9"类型的参考.

不幸的是,OOXML对象树的结构使得它很难对通过细胞的基础细胞指定验证,但随意的问题添加到GitHub的仓库.

https://github.com/randym/axlsx

最好

randym