2018/3/8
skypeで通話しているとキーボードが暴走するのに悩まされていた 一旦アプリを消して再インストールしてみたけど変わらなかった
ただ重いのは変わらない
あとでちょっと調べる
オフィスファイルの解凍
dom組み立てるの久しぶりにやったら忘れちゃってて全然進まなかった
RubyXLでページをコピーするの制約はあるもののなんとか動いた Githubのissue見る感じ、公式にはサポートしなさそう
ファイル通しの関連が壊れる
前提
セルの幅、結合がある
フォントの指定がある
式や画像、マクロはない
ページの印刷設定が必要
xlsxを解凍すると /xl/printerSettings/printerSettings1.binみたいなファイルがある
プリンター固有の設定ファイルらしい
これがページごとに生成されている必要があった
印刷範囲の指定は別のファイルにかかれている
上記の前提だと
.binファイルと
relationship_container.relationshipsにシートのオブジェクトを追加してあげるとExcelで開けるファイルができた
code:ruby
# coding: utf-8
require 'rubyXL'
# ワークブックの読込
template = RubyXL::Parser.parse('excels/プレーンExcelサンプル.xlsx')
workbook = RubyXL::Parser.parse('excels/プレーンExcelサンプル.xlsx')
# コピー元シート
add_sheet.sheet_name = 'Sheet1_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") # テストシートをコピーしてブックに追加
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}")