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とかも変更が必要かもしれないけど、今は試してないです。