画像付きのシートをコピーする
画像付きのシートをコピーする
RubyXLでExcelに画像を挿入する - Qiita
RubyXLのxmlオブジェクトを自前で追加する例
リンク先ほどオブジェクトを扱えてないが一応成功した
オートシェイプの場合、画像本体のファイルがない
重要なオブジェクトは
code:ruby
sheet.drawing
sheet.generic_storage0 drawing.xml本体の情報
sheet.generic_storage0.xlsx_path
sheet.relationship_container.relationships0.target シートと画像ファイルの関連
code:ruby
# coding: utf-8
require 'rubyXL'
# ワークブックの読込
template = RubyXL::Parser.parse('excels/hand_copy2.xlsx')
workbook = RubyXL::Parser.parse('excels/hand_copy2.xlsx')
# コピー元シート
add_sheet = template'その2'
add_sheet.sheet_name = 'その2_Copy'
add_sheet.workbook = workbook
# worksheetの番号を取得する
add_sheet.sheet_id = workbook.worksheets.map(&:sheet_id).max + 1
#add_sheet.printer_settings0.xlsx_path = ::Pathname.new("/xl/printerSettings/printerSettings#{add_sheet.sheet_id}.bin")
#コピーしたときにコピー元のオブジェクトが入っているので、xlsx_pathを改変する
add_sheet.generic_storage0.xlsx_path = ::Pathname.new("/xl/drawings/drawing#{add_sheet.sheet_id}.xml")
#コピーしたときにコピー元のdrawing.xmlのオブジェクトが入っているので、targetを改変する
#ちゃんとRubyXL::Relationship.newしたほうがいいがtypeとかridを探すのが大変だった
add_sheet.relationship_container.relationships0.target = "../drawings/drawing#{add_sheet.sheet_id}.xml"
# テストシートをコピーしてブックに追加
workbook.worksheets << add_sheet
workbook.relationship_container.relationships << RubyXL::Relationship.new(
:id => "rId#{workbook.relationship_container.relationships.size + 1}",
:type => add_sheet.class::REL_TYPE,
:target => "worksheets/sheet#{add_sheet.sheet_id}.xml")
# ブックの内容を列挙する
workbook.worksheets.each do |worksheet|
p "シートのクラス名:#{worksheet.class.name}"
p "シート名:#{worksheet.sheet_name}"
end
# outputsディレクトリに保存する
file_name = "プレーンExcelサンプル_画像_#{Time.now.strftime('%Y%m%d%H%M%s')}.xlsx"
workbook.write("/Users/kkanazaw/Dropbox/member_share/ssr/reports/#{file_name}")
#workbook.write("./#{file_name}")
困ったこと
sheet_idがずれる
workbookを読み込んだ時点で、sheet_idが2から始まっていた
元ファイルがどういう条件でそうなるのか不明
sheet5に対し、drawing6.xmlと番号がずれてしまう
#RubyXL