lib/workbook/writers/xls_writer.rb in workbook-0.4.7 vs lib/workbook/writers/xls_writer.rb in workbook-0.4.8
- old
+ new
@@ -28,29 +28,37 @@
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))
+ remove_row(xls_sheet,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)
+ # 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 |sheet, si|
- sheet.visibility = self[si] ? :visible : :strong_hidden
+ 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'
+ xls_sheet.name = "RemovedSheet#{si}"
+ (xls_sheet.last_row_index + 1).times do |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
@@ -95,31 +103,10 @@
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
- def html_color_to_xls_color hex
- Workbook::Readers::XlsShared::XLS_COLORS.each do |k,v|
- return k if (v == hex or (hex and hex != "" and k == hex.to_sym))
- end
- return nil
- end
-
- # Converts standard (ruby/C++/unix/...) strftime formatting to MS's formatting
- #
- # @param [String, nil] numberformat (nil returns nil)
- # @return [String, nil]
- def strftime_to_ms_format numberformat
- return nil if numberformat.nil?
- return numberformat.gsub('%Y','yyyy').gsub('%A','dddd').gsub('%B','mmmm').gsub('%a','ddd').gsub('%b','mmm').gsub('%y','yy').gsub('%d','dd').gsub('%m','mm').gsub('%y','y').gsub('%y','%%y').gsub('%e','d')
- 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={}
@@ -147,9 +134,19 @@
else
t = Spreadsheet::Workbook.new
template.add_raw t
return t
end
+ end
+
+ private
+
+ 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
+ end
+ xls_sheet.delete_row(row_index)
+ xls_sheet.row_updated(row_index, xls_sheet.row(row_index))
end
end
end
end