lib/workbook/writers/xls_writer.rb in workbook-0.4.6.0 vs lib/workbook/writers/xls_writer.rb in workbook-0.4.7

- old
+ new

@@ -3,19 +3,20 @@ module Workbook module Writers module XlsWriter - # Generates an Spreadsheet (from the spreadsheet gem) in order to build an XlS + # 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={} book = init_spreadsheet_template self.each_with_index do |s,si| - xls_sheet = book.worksheet si - xls_sheet = book.create_worksheet if xls_sheet == nil + 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 r.each_with_index do |c, ci| if c if r.first? @@ -25,11 +26,28 @@ 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 + xls_sheet.row(row_to_remove).each_with_index do |c, ci| + xls_sheet.row(row_to_remove)[ci]=nil + end + + xls_sheet.delete_row(row_to_remove) + xls_sheet.row_updated(row_to_remove, xls_sheet.row(row_to_remove)) + end + xls_sheet.updated_from(s.table.count) + xls_sheet.dimensions + end + # kind of a hack, delting by popping from xls worksheet results in Excel-errors (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 |sheet, si| + sheet.visibility = self[si] ? :visible : :strong_hidden + end book end # Generates an Spreadsheet (from the spreadsheet gem) in order to build an XlS # @@ -47,15 +65,39 @@ 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] xlsfmt.font.name = f[:font_family].split.first if f[:font_family] - xlsfmt.font.family = f[:font_family].split.last if f[:font_family] - xlsfmt.font.color = html_color_to_xls_color(f[:color]) if f[:color] + 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 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] + if valid_values.include?(font) + return font + elsif valid_values.include?(font.to_s.downcase.to_sym) + return font.to_s.downcase.to_sym + else + font = font.to_s.downcase.strip + translation = { + "arial"=>:swiss, + "times"=>:roman, + "times new roman"=>:roman + } + tfont = translation[font] + return tfont ? tfont : :none + end + end + # Attempt to convert html-hex color value to xls color number # # @param [String] hex color # @return [String] xls color