4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rubyXLでページ設定のヘッダー/フッターの設定が消えてしまう

Posted at

headerfooter.png

rubyXLを使っていてハマった。。。

エクセルテンプレートのページ設定で、ヘッダー/フッターを設定しても
出力されたエクセルからヘッダー/フッターの設定が消えている。

調べていったところ、HeaderFooterSettingsのoddFooterに設定すればいけそう!
ってことでまずは値を設定してみた。

※「&P/&N」の部分はちょっと違うかも。忘れたw

worksheet.header_footer.odd_footer = RubyXL::StringValue.new(val: "&P/&N")

xlsxをzip化し解凍して中身を確認

<headerFooter><oddFooter val="&P/&N"/></headerFooter>

テンプレートファイルの中身はこうなので失敗・・・

<headerFooter><oddFooter>&P/&N</oddFooter></headerFooter>

あれこれ試してみたけどどれもうまくいかず、、、
RubyXL::StringValue
ではなくて、ただのStringならうまくいきそうなのに!
って思ってStringをいろいろ試してみた結果
HeaderFooterSettingsクラスの中を変更したら解決した!

    #define_child_node(RubyXL::StringValue, :node_name => :oddFooter)
    define_child_node(RubyXL::StringNode, :node_name => :oddFooter)

最終的には
config/initializers/rubyXL_header_footer_settings_extension.rb
というファイルを作成し、こんな中身を書いて解決しました。

require "rubyXL"

module RubyXL

  # http://www.schemacentral.com/sc/ooxml/e-ssml_headerFooter-1.html
  class HeaderFooterSettings < OOXMLObject
    define_attribute(:differentOddEven, :bool, :default => false)
    define_attribute(:differentFirst,   :bool, :default => false)
    define_attribute(:scaleWithDoc,     :bool, :default => true)
    define_attribute(:alignWithMargins, :bool, :default => true)
    # これではページ設定のヘッダー、フッターが機能しなかったのでStringNodeに修正
    #define_child_node(RubyXL::StringValue, :node_name => :oddHeader)
    #define_child_node(RubyXL::StringValue, :node_name => :oddFooter)
    define_child_node(RubyXL::StringNode, :node_name => :oddHeader)
    define_child_node(RubyXL::StringNode, :node_name => :oddFooter)
    define_child_node(RubyXL::StringValue, :node_name => :evenHeader)
    define_child_node(RubyXL::StringValue, :node_name => :evenFooter)
    define_child_node(RubyXL::StringValue, :node_name => :firstHeader)
    define_child_node(RubyXL::StringValue, :node_name => :firstFooter)
    define_element_name 'headerFooter'
  end

end

※evenHeaderとかfirstHeaderとかも変更が必要かもしれないけど、今は試してないです。

4
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?