excel - Axlsx,构建动态列

标签 excel report axlsx

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

我最初的想法是让我们找到一颗 ruby 。因为它是一个 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

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

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

而且我已经看到有一种验证数据的方法。

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

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

我在想,如果您可以像设置样式一样指定数据验证,那会很酷。像这样。

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

然后在创建行时

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

有没有人尝试过这样的事情,这甚至可能吗?或者有人知道如何构建这样的

最佳答案

由于该库目前已存在,因此您需要将数据验证与行插入分开指定。

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

我想您可能会发现 Axlsx.cell_range 方法很方便,因为它可以获取单元格数组并返回 excel 样式“A1:A9”类型引用。

不幸的是,OOXML 对象树的结构使得很难在逐个单元格的基础上指定验证,但请随时向 github 存储库添加问题。

https://github.com/randym/axlsx

最好的

随机数

关于excel - Axlsx,构建动态列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17320645/

相关文章:

javascript - 如何将 JavaScript 图表导出到 Excel 文件 (HighCharts)

excel - 如何使用另一个宏停止自动刷新单元格的宏?

c# - 如何从 ComboBox C# Winforms 获取 ValueMember 值?

ruby-on-rails - Ruby AXLSX gem 合并多于一组单元格

yard - axslx : undefined method for yard

ruby - 在 axlsx 中设置超链接文本颜色

excel - vba 删除逗号而不删除删除线

excel - 如何在 VBA 中使用 Excel 的内置模函数 (MOD)?

sql-server - Crystal Reports 与 Microsoft SQL Server Reporting Services

machine-learning - scikit learn 中的分类报告