2

私は、現在稼働中のシステムの 1 つに使用する動的レポート作成プラグインの作成を依頼されました。これらのレポートは非​​常に複雑で、レポートごとに 19 のワークシートがあり、各シートには複数のテーブルが含まれており、データ検証 (ドロップダウン) を含むさまざまな量と種類のデータが入力されます。

私の最初の考えは、ルビーの宝石を見つけようというものでした。Railsアプリなので。選ぶべきものはあまりありませんが、私の最後の希望のように見えるAxlsxを見つけました。

テーブルの 1 つには 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]

このようなことを試みた人はいますか? または、そのようなものを構築する方法についてアイデアを得た人

4

1 に答える 1

8

現在ライブラリが存在するため、行の挿入とは別にデータ検証を指定する必要があります。

検証が必要な範囲の参照を計算して追加できる、必要な各テーブルタイプの生成を担当するオブジェクトを用意することをお勧めします。

Axlsx.cell_range メソッドは、セルの配列を取り、Excel スタイルの 'A1:A9' タイプ参照を返すことができるので、便利だと思うかもしれません。

残念ながら、OOXML オブジェクト ツリーの構造上、セルごとに検証を指定することは非常に困難ですが、気軽に github リポジトリに問題を追加してください。

https://github.com/randym/axlsx

一番

ランダム

于 2013-06-27T06:26:47.980 に答える