summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorStefan Daschek <[email protected]>2012-05-03 17:44:29 +0200
committerStefan Daschek <[email protected]>2012-05-03 17:44:48 +0200
commitc87151a4bd740391b13d3fcf564e9fa7b0f21b29 (patch)
tree998f5fa0090a72dd7f522a10d0cb24bda38b180f /lib
parent03103965277963e3c62bb92ce8bb84a177b9d9bd (diff)
downloadcaxlsx-c87151a4bd740391b13d3fcf564e9fa7b0f21b29.tar.gz
caxlsx-c87151a4bd740391b13d3fcf564e9fa7b0f21b29.zip
Add support for printOptions
Diffstat (limited to 'lib')
-rw-r--r--lib/axlsx/workbook/workbook.rb1
-rw-r--r--lib/axlsx/workbook/worksheet/print_options.rb63
-rw-r--r--lib/axlsx/workbook/worksheet/worksheet.rb25
3 files changed, 89 insertions, 0 deletions
diff --git a/lib/axlsx/workbook/workbook.rb b/lib/axlsx/workbook/workbook.rb
index 5f849b2b..b9667648 100644
--- a/lib/axlsx/workbook/workbook.rb
+++ b/lib/axlsx/workbook/workbook.rb
@@ -4,6 +4,7 @@ module Axlsx
require 'axlsx/workbook/worksheet/date_time_converter.rb'
require 'axlsx/workbook/worksheet/cell.rb'
require 'axlsx/workbook/worksheet/page_margins.rb'
+require 'axlsx/workbook/worksheet/print_options.rb'
require 'axlsx/workbook/worksheet/cfvo.rb'
require 'axlsx/workbook/worksheet/color_scale.rb'
require 'axlsx/workbook/worksheet/data_bar.rb'
diff --git a/lib/axlsx/workbook/worksheet/print_options.rb b/lib/axlsx/workbook/worksheet/print_options.rb
new file mode 100644
index 00000000..bc177980
--- /dev/null
+++ b/lib/axlsx/workbook/worksheet/print_options.rb
@@ -0,0 +1,63 @@
+module Axlsx
+ # Options for printing a worksheet. All options are boolean and false by default.
+ #
+ # @note The recommended way to manage print options is via Worksheet#print_options
+ # @see Worksheet#print_options
+ # @see Worksheet#initialize
+ class PrintOptions
+
+ # Whether grid lines should be printed.
+ # @return [Boolean]
+ attr_reader :grid_lines
+
+ # Whether row and column headings should be printed.
+ # @return [Boolean]
+ attr_reader :headings
+
+ # Whether the content should be centered horizontally on the page.
+ # @return [Boolean]
+ attr_reader :horizontal_centered
+
+ # Whether the content should be centered vertically on the page.
+ # @return [Boolean]
+ attr_reader :vertical_centered
+
+ # Creates a new PrintOptions object
+ # @option options [Boolean] grid_lines Whether grid lines should be printed
+ # @option options [Boolean] headings Whether row and column headings should be printed
+ # @option options [Boolean] horizontal_centered Whether the content should be centered horizontally
+ # @option options [Boolean] vertical_centered Whether the content should be centered vertically
+ def initialize(options = {})
+ @grid_lines = @headings = @horizontal_centered = @vertical_centered = false
+ set(options)
+ end
+
+ # Set some or all options at once.
+ # @param [Hash] options The options to set (possible keys are :grid_lines, :headings, :horizontal_centered, and :vertical_centered).
+ def set(options)
+ options.each do |k, v|
+ send("#{k}=", v) if respond_to? "#{k}="
+ end
+ end
+
+ # @see grid_lines
+ def grid_lines=(v); Axlsx::validate_boolean(v); @grid_lines = v; end
+ # @see headings
+ def headings=(v); Axlsx::validate_boolean(v); @headings = v; end
+ # @see horizontal_centered
+ def horizontal_centered=(v); Axlsx::validate_boolean(v); @horizontal_centered = v; end
+ # @see vertical_centered
+ def vertical_centered=(v); Axlsx::validate_boolean(v); @vertical_centered = v; end
+
+ # Serializes the page options element.
+ # @note As all attributes default to "false" according to the xml schema definition, the generated xml includes only those attributes that are set to true.
+ # @param [String] str
+ # @return [String]
+ def to_xml_string(str = '')
+ str << '<printOptions '
+ #
+ str << instance_values.select{ |k,v| v == true }.map{ |k,v| k.gsub(/_(.)/){ $1.upcase } << %{="#{v}"} }.join(' ')
+ str << '/>'
+ end
+ end
+end
diff --git a/lib/axlsx/workbook/worksheet/worksheet.rb b/lib/axlsx/workbook/worksheet/worksheet.rb
index 862ceada..de5183aa 100644
--- a/lib/axlsx/workbook/worksheet/worksheet.rb
+++ b/lib/axlsx/workbook/worksheet/worksheet.rb
@@ -81,6 +81,28 @@ module Axlsx
end
+ # Options for printing the worksheet.
+ # @example
+ # wb = Axlsx::Package.new.workbook
+ # # using options when creating the worksheet.
+ # ws = wb.add_worksheet :print_options => {:gridLines => true, :horizontalCentered => true}
+ #
+ # # use the set method of the page_margins object
+ # ws.print_options.set(:headings => true)
+ #
+ # # set page margins in a block
+ # ws.print_options do |options|
+ # options.horizontalCentered = true
+ # options.verticalCentered = true
+ # end
+ # @see PrintOptions#initialize
+ # @return [PrintOptions]
+ def print_options
+ @print_options ||= PrintOptions.new
+ yield @print_options if block_given?
+ @print_options
+ end
+
# definition of characters which are less than the maximum width of 0-9 in the default font for use in String#count.
# This is used for autowidth calculations
# @return [String]
@@ -93,6 +115,7 @@ module Axlsx
# @see Workbook#add_worksheet
# @option options [String] name The name of this worksheet.
# @option options [Hash] page_margins A hash containing page margins for this worksheet. @see PageMargins
+ # @option options [Hash] print_options A hash containing print options for this worksheet. @see PrintOptions
# @option options [Boolean] show_gridlines indicates if gridlines should be shown for this sheet.
def initialize(wb, options={})
self.workbook = wb
@@ -107,6 +130,7 @@ module Axlsx
@show_gridlines = true
self.name = "Sheet" + (index+1).to_s
@page_margins = PageMargins.new options[:page_margins] if options[:page_margins]
+ @print_options = PrintOptions.new options[:print_options] if options[:print_options]
@rows = SimpleTypedList.new Row
@column_info = SimpleTypedList.new Col
@@ -423,6 +447,7 @@ module Axlsx
str.concat '</sheetData>'
str.concat "<autoFilter ref='%s'></autoFilter>" % @auto_filter if @auto_filter
str.concat "<mergeCells count='%s'>%s</mergeCells>" % [@merged_cells.size, @merged_cells.reduce('') { |memo, obj| memo += "<mergeCell ref='%s'></mergeCell>" % obj } ] unless @merged_cells.empty?
+ print_options.to_xml_string(str) if @print_options
page_margins.to_xml_string(str) if @page_margins
str.concat "<drawing r:id='rId1'></drawing>" if @drawing
unless @tables.empty?