Class: GenSheet
- Inherits:
-
Object
- Object
- GenSheet
- Defined in:
- lib/GenSheet.rb
Instance Method Summary collapse
-
#initialize(roo) ⇒ GenSheet
constructor
A new instance of GenSheet.
- #pre_sheet_ods(tables, sheets) ⇒ Object
- #pre_sheet_xls(outsheets, originalsheets, names) ⇒ Object
- #set_cell_ods(row, ob_row) ⇒ Object
- #set_cell_xls(outsheet, cell, x, y, font, merge) ⇒ Object
- #set_format(font) ⇒ Object
- #set_mergedcell(outsheet, merge) ⇒ Object
- #set_mergedcell_format(format) ⇒ Object
- #set_mergedcell_sheet(worksheets, outsheets, merges) ⇒ Object
- #set_sheet_ods(tables, sheets) ⇒ Object
- #set_sheet_xls(outsheets, originalsheets, names, merges) ⇒ Object
- #to_ods(filename) ⇒ Object
- #to_xls(filename) ⇒ Object
Constructor Details
#initialize(roo) ⇒ GenSheet
Returns a new instance of GenSheet.
163 164 165 |
# File 'lib/GenSheet.rb', line 163 def initialize(roo) @roo = roo end |
Instance Method Details
#pre_sheet_ods(tables, sheets) ⇒ Object
132 133 134 135 136 137 138 139 140 |
# File 'lib/GenSheet.rb', line 132 def pre_sheet_ods(tables, sheets) @roo.each_with_pagename do |name, sheet| # シート作成 tables << (@outbook_ods.table name) sheets << sheet.clone end set_sheet_ods(tables, sheets) end |
#pre_sheet_xls(outsheets, originalsheets, names) ⇒ Object
39 40 41 42 43 44 45 |
# File 'lib/GenSheet.rb', line 39 def pre_sheet_xls(outsheets, originalsheets, names) @roo.each_with_pagename do |name, sheet| outsheets << @outbook_xls.add_worksheet(name) originalsheets << sheet.clone names << name end end |
#set_cell_ods(row, ob_row) ⇒ Object
152 153 154 155 156 157 158 159 160 161 |
# File 'lib/GenSheet.rb', line 152 def set_cell_ods(row, ob_row) row.each_with_index do |cell, x| # スタイル作成 @outbook_ods.style 'font-style', :family => :cell do #property :text, 'font-weight' => 'bold', 'color' => '#ff0000' end # セル作成、スタイル適用 ob_cell = ob_row.cell(cell, :style => 'font-style') end end |
#set_cell_xls(outsheet, cell, x, y, font, merge) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/GenSheet.rb', line 76 def set_cell_xls(outsheet, cell, x, y, font, merge) # cellが空の場合は何もしない return if cell == nil # 各フォントフォーマットのセット format = set_format(font) # mergeしてあるセルの場合フォーマット追加 for i in 0..merge.size - 1 if y == merge[i][0] && x == merge[i][2] set_mergedcell_format(format) end end outsheet.write(y, x, cell, format) end |
#set_format(font) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/GenSheet.rb', line 93 def set_format(font) format = @outbook_xls.add_format( #:bottom => 1, # #:top => 1, # border #:left => 1, # #:right => 1, # :color => font.instance_variable_get('@color'), :italic => font.instance_variable_get('@italic') ? 1 : 0, :font => font.instance_variable_get('@name'), :outline => font.instance_variable_get('@outline'), :shadow => font.instance_variable_get('@shadow'), :size => font.instance_variable_get('@size'), :strikeout => font.instance_variable_get('@strikeout'), :underline => font..instance_variable_get('@underline') == :none ? 0 : 1, # アンダーラインの種類は4つだけどとりあえず :bold => font.instance_variable_get('@weight') > 400 ? 1 : 0 # weightが普通だと400、boldだと700になるようなのでとりあえず #:encoding => font.encoding, # #:escapement => font.escapement, # fontにまとめて入っていたけど #:family => font.family, # どれに対応するのか.. #:previous_fast_key => font.previous_fast_key, # ) return format end |
#set_mergedcell(outsheet, merge) ⇒ Object
56 57 58 59 60 61 |
# File 'lib/GenSheet.rb', line 56 def set_mergedcell(outsheet, merge) format = @outbook_xls.add_format(:align => 'merge') for j in 0..merge.size - 1 outsheet.merge_range(merge[j][0], merge[j][2], merge[j][1], merge[j][3], '', format) end end |
#set_mergedcell_format(format) ⇒ Object
117 118 119 120 |
# File 'lib/GenSheet.rb', line 117 def set_mergedcell_format(format) format.set_align('center') format.set_valign('vcenter') end |
#set_mergedcell_sheet(worksheets, outsheets, merges) ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/GenSheet.rb', line 47 def set_mergedcell_sheet(worksheets, outsheets, merges) for i in 0..worksheets.size - 1 merges << worksheets[i].instance_variable_get('@merged_cells') if merges[i] != nil && merges[i] != [] set_mergedcell(outsheets[i], merges[i]) end end end |
#set_sheet_ods(tables, sheets) ⇒ Object
142 143 144 145 146 147 148 149 150 |
# File 'lib/GenSheet.rb', line 142 def set_sheet_ods(tables, sheets) for i in 0..sheets.size - 1 sheets[i].each_with_index do |row, y| # 行作成 ob_row = tables[i].row set_cell_ods(row, ob_row) end end end |
#set_sheet_xls(outsheets, originalsheets, names, merges) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/GenSheet.rb', line 63 def set_sheet_xls(outsheets, originalsheets, names, merges) #@getformat = @formats[(x + 1) * (y + 1) - 1] # fontもborderも入ってるけどもインデックスがわからない fonts = @roo.instance_variable_get('@fonts') for i in 0..originalsheets.size - 1 originalsheets[i].each_with_index do |row, y| row.each_with_index do |cell, x| font = fonts[names[i]][[y + 1, x + 1]] set_cell_xls(outsheets[i], cell, x, y, font, merges[i]) end end end end |
#to_ods(filename) ⇒ Object
122 123 124 125 126 127 128 129 130 |
# File 'lib/GenSheet.rb', line 122 def to_ods(filename) @outbook_ods = ODF::SpreadSheet.new tables = Array.new sheets = Array.new pre_sheet_ods(tables, sheets) @outbook_ods.write_to filename end |
#to_xls(filename) ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/GenSheet.rb', line 9 def to_xls(filename) @outbook_xls = WriteExcel.new(filename) workbook = @roo.instance_variable_get('@workbook') formats = workbook.instance_variable_get('@formats') worksheets = workbook.instance_variable_get('@worksheets') # 出力シート準備、元シート分解 outsheets = Array.new originalsheets = Array.new names = Array.new pre_sheet_xls(outsheets, originalsheets, names) # mergeしてあるセルのセット merges = Array.new set_mergedcell_sheet(worksheets, outsheets, merges) # シートのセット set_sheet_xls(outsheets, originalsheets, names, merges) # # 出力 # for i in 0..originalsheets.size - 1 # originalsheets[i].parse do |row| # puts row # end # end @outbook_xls.close end |