lib/workbook/writers/xls_writer.rb in workbook-0.8.1 vs lib/workbook/writers/xls_writer.rb in workbook-0.8.2
- old
+ new
@@ -1,79 +1,73 @@
# frozen_string_literal: true
-
-# -*- encoding : utf-8 -*-
# frozen_string_literal: true
-require 'spreadsheet'
+require "spreadsheet"
+
module Workbook
module Writers
module XlsWriter
-
# Generates an Spreadsheet (from the spreadsheet gem) in order to build an xls
#
# @param [Hash] options A hash with options (unused so far)
# @return [Spreadsheet] A Spreadsheet object, ready for writing or more lower level operations
- def to_xls options={}
+ def to_xls options = {}
book = init_spreadsheet_template
- self.each_with_index do |s,si|
+ each_with_index do |s, si|
xls_sheet = xls_sheet(si)
xls_sheet.name = s.name
s.table.each_with_index do |r, ri|
- xls_sheet.row(ri).height= r.format[:height] if r.format
+ xls_sheet.row(ri).height = r.format[:height] if r.format
r.each_with_index do |c, ci|
if c
if r.first?
- xls_sheet.columns[ci] ||= Spreadsheet::Column.new(ci,nil)
- xls_sheet.columns[ci].width= c.format[:width]
+ xls_sheet.columns[ci] ||= Spreadsheet::Column.new(ci, nil)
+ xls_sheet.columns[ci].width = c.format[:width]
end
xls_sheet.row(ri)[ci] = c.value
xls_sheet.row(ri).set_format(ci, format_to_xls_format(c.format))
end
end
end
(xls_sheet.last_row_index + 1 - s.table.count).times do |time|
- row_to_remove = s.table.count+time
- remove_row(xls_sheet,row_to_remove)
+ row_to_remove = s.table.count + time
+ remove_row(xls_sheet, row_to_remove)
end
xls_sheet.updated_from(s.table.count)
xls_sheet.dimensions
-
end
# kind of a hack, deleting by popping from xls worksheet results in errors in MS Excel (not LibreOffice)
# book.worksheets.pop(book.worksheets.count - self.count) if book.worksheets and book.worksheets.count > self.count
book.worksheets.each_with_index do |xls_sheet, si|
if self[si]
xls_sheet.visibility = :visible
else
xls_sheet.visibility = :strong_hidden
- #also make sure all data is removed, in case someone finds out about this 'trick'
+ # also make sure all data is removed, in case someone finds out about this 'trick'
xls_sheet.name = "RemovedSheet#{si}"
(xls_sheet.last_row_index + 1).times do |row_index|
- remove_row(xls_sheet,row_index)
+ remove_row(xls_sheet, row_index)
end
end
end
# even after removing the worksheet's content... which solved some incompatibilities, but not for popping worksheets
# book.worksheets.pop(book.worksheets.count - self.count) if book.worksheets and book.worksheets.count > self.count
book
end
-
-
# Generates an Spreadsheet (from the spreadsheet gem) in order to build an XlS
#
# @param [Workbook::Format, Hash] f A Workbook::Format or hash with format-options (:font_weight, :rotation, :background_color, :number_format, :text_direction, :color, :font_family)
# @return [Spreadsheet::Format] A Spreadsheet format-object, ready for writing or more lower level operations
def format_to_xls_format f
- xlsfmt = nil
unless f.is_a? Workbook::Format
f = Workbook::Format.new f
end
xlsfmt = f.return_raw_for Spreadsheet::Format
unless xlsfmt
- xlsfmt=Spreadsheet::Format.new :weight=>f[:font_weight]
+ xlsfmt = Spreadsheet::Format.new weight: f[:font_weight]
xlsfmt.rotation = f[:rotation] if f[:rotation]
xlsfmt.pattern_fg_color = html_color_to_xls_color(f[:background_color]) if html_color_to_xls_color(f[:background_color])
xlsfmt.pattern = 1 if html_color_to_xls_color(f[:background_color])
xlsfmt.number_format = strftime_to_ms_format(f[:number_format]) if f[:number_format]
xlsfmt.text_direction = f[:text_direction] if f[:text_direction]
@@ -81,72 +75,72 @@
xlsfmt.font.family = parse_font_family(f) if f[:font_family]
color = html_color_to_xls_color(f[:color])
xlsfmt.font.color = color if color
f.add_raw xlsfmt
end
- return xlsfmt
+ xlsfmt
end
# Parses right font-family name
#
# @param [Workbook::Format, hash] format to parse
def parse_font_family(format)
font = format[:font_family].to_s.split.last
- valid_values = [:none,:roman,:swiss,:modern,:script,:decorative]
+ valid_values = [:none, :roman, :swiss, :modern, :script, :decorative]
if valid_values.include?(font)
- return font
+ font
elsif valid_values.include?(font.to_s.downcase.to_sym)
- return font.to_s.downcase.to_sym
+ font.to_s.downcase.to_sym
else
font = font.to_s.downcase.strip
translation = {
- "arial"=>:swiss,
- "times"=>:roman,
- "times new roman"=>:roman
+ "arial" => :swiss,
+ "times" => :roman,
+ "times new roman" => :roman
}
tfont = translation[font]
- return tfont ? tfont : :none
+ tfont || :none
end
end
# Write the current workbook to Microsoft Excel format (using the spreadsheet gem)
#
# @param [String] filename
# @param [Hash] options see #to_xls
- def write_to_xls filename="#{title}.xls", options={}
+ def write_to_xls filename = "#{title}.xls", options = {}
if to_xls(options).write(filename)
- return filename
+ filename
end
end
def xls_sheet a
if xls_template.worksheet(a)
- return xls_template.worksheet(a)
+ xls_template.worksheet(a)
else
xls_template.create_worksheet
- self.xls_sheet a
+ xls_sheet a
end
end
def xls_template
- return template.raws[Spreadsheet::Excel::Workbook] ? template.raws[Spreadsheet::Excel::Workbook] : template.raws[Spreadsheet::Workbook]
+ template.raws[Spreadsheet::Excel::Workbook] || template.raws[Spreadsheet::Workbook]
end
def init_spreadsheet_template
- if self.xls_template.is_a? Spreadsheet::Workbook
- return self.xls_template
+ if xls_template.is_a? Spreadsheet::Workbook
+ xls_template
else
t = Spreadsheet::Workbook.new
template.add_raw t
- return t
+ t
end
end
private
- def remove_row(xls_sheet,row_index)
+ def remove_row(xls_sheet, row_index)
xls_sheet.row(row_index).each_with_index do |c, ci|
- xls_sheet.row(row_index)[ci]=nil
+ xls_sheet.row(row_index)[ci] = nil
end
xls_sheet.delete_row(row_index)
xls_sheet.row_updated(row_index, xls_sheet.row(row_index))
end
end