<< Masa.20101208-update-spreadsheet-gem-debug-ebook | 2010 | Masa.20101206-update-outline-spreadsheet >>
Problem
Experiment
create_new_file.rb
require 'spreadsheet'
book = Spreadsheet::Workbook.new
sheet = book.create_worksheet
5.times {|j| 5.times {|i| sheet[j,i] = (i+1)*10**j}}
# col
sheet.column(2).hidden = true
sheet.column(2).outline_level = 1
sheet.column(3).hidden = true
sheet.column(3).outline_level = 1
# row
sheet.row(2).hidden = true
sheet.row(2).outline_level = 1
sheet.row(3).hidden = true
sheet.row(3).outline_level = 1
book.write 'out.xls'
Run
masa@masa ~/ywesee/spreadsheet $ ruby -I lib create_new_file.rb
Result
But
edit_little.rb
require 'spreadsheet'
file = ARGV[0]
book = Spreadsheet.open(file, 'rb')
sheet= book.worksheet(0)
5.times {|i| sheet[0,i] = i}
# col
sheet.column(2).hidden = true
sheet.column(3).hidden = true
sheet.column(2).outline_level = 1
sheet.column(3).outline_level = 1
# row
sheet.row(2).hidden = true
sheet.row(3).hidden = true
sheet.row(2).outline_level = 1
sheet.row(3).outline_level = 1
book.write "out.xls"
Run
masa@masa ~/ywesee/spreadsheet $ ruby -I lib edit_little.rb normal.xls
Note
Result
Notes
Memo
##
# The main writer method. Calls #write_from_scratch or #write_changes
# depending on the class and state of _workbook_.
def write_workbook workbook, io
unless workbook.is_a?(Excel::Workbook) && workbook.io
@date_base = Date.new 1899, 12, 31
write_from_scratch workbook, io
else
@date_base = workbook.date_base
if workbook.changes.empty?
super
else
write_changes workbook, io
end
end
ensure
cleanup workbook
end
So
Memo
Memo
Experiment
edit_little.rb
require 'spreadsheet' file = ARGV[0] book = Spreadsheet.open(file, 'rb') sheet= book.worksheet(0) # col sheet.column(2).hidden = true sheet.column(3).hidden = true sheet.column(2).outline_level = 1 sheet.column(3).outline_level = 1 # row sheet.row(2).hidden = true sheet.row(3).hidden = true sheet.row(2).outline_level = 1 sheet.row(3).outline_level = 1 book.write "out.xls"
Notes
Notes
Test1: ruby -I lib edit_littlr.rb normal.xls

Test2: ruby -I lib edit_littlr.rb outline_col.xls

Test3: ruby -I lib edit_littlr.rb outline_row.xls

Notes
Experiment
lib/spreadsheet/excel/writer/worksheet.rb#write_changes
def write_changes reader, endpos, sst_status
...
work.each do |key, (pos, len)|
@io.write reader.read(pos - lastpos) if pos > lastpos
if key.is_a?(Integer)
if block = blocks.find do |rows| rows.any? do |row| row.idx == key end end
write_rowblock block
blocks.delete block
end
else
send "write_#{key}"
write_colinfos
write_guts
end
lastpos = pos + len
reader.seek lastpos
end
@io.write reader.read(endpos - lastpos)
end
Run
masa@masa ~/ywesee/spreadsheet $ ruby -I lib edit_little.rb normal.xls masa@masa ~/ywesee/spreadsheet $ ruby -I lib edit_little.rb outline_col.xls masa@masa ~/ywesee/spreadsheet $ ruby -I lib edit_little.rb outline_row.xls
Result

Notes
Next
Commit