首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Axlsx,构建动态列

Axlsx,构建动态列
EN

Stack Overflow用户
提问于 2013-06-26 20:55:32
回答 1查看 2.8K关注 0票数 1

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

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

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

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

代码语言:javascript
复制
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

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

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

我已经看到有一种方法可以验证数据。

代码语言:javascript
复制
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

但是,是否有一种方法可以指定在添加行时需要验证的单元格。或者将它们添加到不同大小的表中?

我在想,如果你能像设计样式一样指定数据验证,那就太酷了。就像这样。

代码语言:javascript
复制
 boolean_validation = format.add_data_validation :type => list, :formula => 'lists!A2:A4'... (rest of the options)

然后在创建行时

代码语言:javascript
复制
 ws.add_row ['Q1-2010', 'yes', '=B4/SUM(B4:B7)'], :style => [default, profit, percent], :format => [nil, boolean_validation, nil]

有没有人尝试过这样的事情,这有可能吗?或者任何人都有关于如何构建这样一个

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-27 14:26:48

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

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

我想您可能会发现Axlsx.cell_range方法很方便,因为它可以接受一个单元格数组并返回excel样式'A1:A9‘类型引用。

不幸的是,OOXML对象树的结构使得在每个单元的基础上指定验证变得非常困难,但是可以随意向github存储库添加问题。

https://github.com/randym/axlsx

最好的

randym

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17320645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档