summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rwxr-xr-x[-rw-r--r--]examples/example.rb8
-rw-r--r--lib/axlsx/util/validators.rb16
-rw-r--r--lib/axlsx/workbook/workbook.rb2
-rw-r--r--lib/axlsx/workbook/worksheet/page_setup.rb90
-rw-r--r--lib/axlsx/workbook/worksheet/print_options.rb63
-rw-r--r--lib/axlsx/workbook/worksheet/worksheet.rb50
-rw-r--r--test/util/tc_validators.rb29
-rw-r--r--test/workbook/worksheet/tc_page_setup.rb103
-rw-r--r--test/workbook/worksheet/tc_print_options.rb72
-rw-r--r--test/workbook/worksheet/tc_worksheet.rb61
10 files changed, 484 insertions, 10 deletions
diff --git a/examples/example.rb b/examples/example.rb
index e1fc945e..0027c797 100644..100755
--- a/examples/example.rb
+++ b/examples/example.rb
@@ -333,12 +333,14 @@ end
#```
-##Specify Page Margins for printing
+##Specify page margins and other options for printing
#```ruby
margins = {:left => 3, :right => 3, :top => 1.2, :bottom => 1.2, :header => 0.7, :footer => 0.7}
-wb.add_worksheet(:name => "print margins", :page_margins => margins) do |sheet|
- sheet.add_row ["this sheet uses customized page margins for printing"]
+setup = {:fit_to_width => 1, :orientation => :landscape, :paper_width => "297mm", :paper_height => "210mm"}
+options = {:grid_lines => true, :headings => true, :horizontal_centered => true}
+wb.add_worksheet(:name => "print margins", :page_margins => margins, :page_setup => setup, :print_options => options) do |sheet|
+ sheet.add_row ["this sheet uses customized print settings"]
end
#```
diff --git a/lib/axlsx/util/validators.rb b/lib/axlsx/util/validators.rb
index 7b0a74a6..1ee0d75e 100644
--- a/lib/axlsx/util/validators.rb
+++ b/lib/axlsx/util/validators.rb
@@ -90,6 +90,22 @@ module Axlsx
DataTypeValidator.validate :float, Float, v
end
+ # Requires that the value is a string containing a positive decimal number followed by one of the following units:
+ # "mm", "cm", "in", "pt", "pc", "pi"
+ def self.validate_number_with_unit(v)
+ RegexValidator.validate "number_with_unit", /\A[0-9]+(\.[0-9]+)?(mm|cm|in|pt|pc|pi)\Z/, v
+ end
+
+ # Requires that the value is an integer ranging from 10 to 400.
+ def self.validate_page_scale(v)
+ DataTypeValidator.validate "page_scale", [Fixnum, Integer], v, lambda { |arg| arg >= 10 && arg <= 400 }
+ end
+
+ # Requires that the value is one of :default, :landscape, or :portrait.
+ def self.validate_page_orientation(v)
+ RestrictionValidator.validate "page_orientation", [:default, :landscape, :portrait], v
+ end
+
# Requires that the value is valid pattern type.
# valid pattern types must be one of :none, :solid, :mediumGray, :darkGray, :lightGray, :darkHorizontal, :darkVertical, :darkDown,
# :darkUp, :darkGrid, :darkTrellis, :lightHorizontal, :lightVertical, :lightDown, :lightUp, :lightGrid, :lightTrellis, :gray125, or :gray0625.
diff --git a/lib/axlsx/workbook/workbook.rb b/lib/axlsx/workbook/workbook.rb
index 60bee011..38336af3 100644
--- a/lib/axlsx/workbook/workbook.rb
+++ b/lib/axlsx/workbook/workbook.rb
@@ -4,6 +4,8 @@ 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/page_setup.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/page_setup.rb b/lib/axlsx/workbook/worksheet/page_setup.rb
new file mode 100644
index 00000000..93ba0dd4
--- /dev/null
+++ b/lib/axlsx/workbook/worksheet/page_setup.rb
@@ -0,0 +1,90 @@
+module Axlsx
+ # Page setup settings for printing a worksheet. All settings are optional.
+ #
+ # @note The recommended way to manage print options is via Worksheet#page_setup
+ # @see Worksheet#print_options
+ # @see Worksheet#initialize
+ class PageSetup
+
+ # TODO: Attributes defined by Open XML spec that are not implemented yet:
+ #
+ # * blackAndWhite
+ # * cellComments
+ # * copies
+ # * draft
+ # * errors
+ # * firstPageNumber
+ # * horizontalDpi
+ # * pageOrder
+ # * paperSize
+ # * useFirstPageNumber
+ # * usePrinterDefaults
+ # * verticalDpi
+
+ # Number of vertical pages to fit on.
+ # @return [Integer]
+ attr_reader :fit_to_height
+
+ # Number of horizontal pages to fit on.
+ # @return [Integer]
+ attr_reader :fit_to_width
+
+ # Orientation of the page (:default, :landscape, :portrait)
+ # @return [Symbol]
+ attr_reader :orientation
+
+ # Height of paper (string containing a number followed by a unit identifier: "297mm", "11in")
+ # @return [String]
+ attr_reader :paper_height
+
+ # Width of paper (string containing a number followed by a unit identifier: "210mm", "8.5in")
+ # @return [String]
+ attr_reader :paper_width
+
+ # Print scaling (percent value, given as integer ranging from 10 to 400)
+ # @return [Integer]
+ attr_reader :scale
+
+
+ # Creates a new PageSetup object
+ # @option options [Integer] fit_to_height Number of vertical pages to fit on
+ # @option options [Integer] fit_to_width Number of horizontal pages to fit on
+ # @option options [Symbol] orientation Orientation of the page (:default, :landscape, :portrait)
+ # @option options [String] paper_height Height of paper (number followed by unit identifier: "297mm", "11in")
+ # @option options [String] paper_width Width of paper (number followed by unit identifier: "210mm", "8.5in")
+ # @option options [Integer] scale Print scaling (percent value, integer ranging from 10 to 400)
+ def initialize(options = {})
+ set(options)
+ end
+
+ # Set some or all page settings at once.
+ # @param [Hash] options The page settings to set (possible keys are :fit_to_height, :fit_to_width, :orientation, :paper_height, :paper_width, and :scale).
+ def set(options)
+ options.each do |k, v|
+ send("#{k}=", v) if respond_to? "#{k}="
+ end
+ end
+
+ # @see fit_to_height
+ def fit_to_height=(v); Axlsx::validate_unsigned_int(v); @fit_to_height = v; end
+ # @see fit_to_width
+ def fit_to_width=(v); Axlsx::validate_unsigned_int(v); @fit_to_width = v; end
+ # @see orientation
+ def orientation=(v); Axlsx::validate_page_orientation(v); @orientation = v; end
+ # @see paper_height
+ def paper_height=(v); Axlsx::validate_number_with_unit(v); @paper_height = v; end
+ # @see paper_width
+ def paper_width=(v); Axlsx::validate_number_with_unit(v); @paper_width = v; end
+ # @see scale
+ def scale=(v); Axlsx::validate_page_scale(v); @scale = v; end
+
+ # Serializes the page settings element.
+ # @param [String] str
+ # @return [String]
+ def to_xml_string(str = '')
+ str << '<pageSetup '
+ str << instance_values.map{ |k,v| k.gsub(/_(.)/){ $1.upcase } << %{="#{v}"} }.join(' ')
+ str << '/>'
+ end
+ end
+end
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 b84d1c48..24120aa1 100644
--- a/lib/axlsx/workbook/worksheet/worksheet.rb
+++ b/lib/axlsx/workbook/worksheet/worksheet.rb
@@ -81,6 +81,51 @@ module Axlsx
end
+ # Page setup settings for printing the worksheet.
+ # @example
+ # wb = Axlsx::Package.new.workbook
+ #
+ # # using options when creating the worksheet.
+ # ws = wb.add_worksheet :page_setup => {:fit_to_width => 1, :orientation => :landscape}
+ #
+ # # use the set method of the page_setup object
+ # ws.page_setup.set(:paper_width => "297mm", :paper_height => "210mm")
+ #
+ # # setup page in a block
+ # ws.page_setup do |page|
+ # page.scale = 80
+ # page.orientation = :portrait
+ # end
+ # @see PageSetup#initialize
+ # @return [PageSetup]
+ def page_setup
+ @page_setup ||= PageSetup.new
+ yield @page_setup if block_given?
+ @page_setup
+ 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 +138,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 +153,8 @@ module Axlsx
@show_gridlines = true
self.name = "Sheet" + (index+1).to_s
@page_margins = PageMargins.new options[:page_margins] if options[:page_margins]
+ @page_setup = PageSetup.new options[:page_setup] if options[:page_setup]
+ @print_options = PrintOptions.new options[:print_options] if options[:print_options]
@rows = SimpleTypedList.new Row
@column_info = SimpleTypedList.new Col
@@ -429,7 +477,9 @@ 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
+ page_setup.to_xml_string(str) if @page_setup
str.concat "<drawing r:id='rId1'></drawing>" if @drawing
unless @tables.empty?
str.concat "<tableParts count='%s'>%s</tableParts>" % [@tables.size, @tables.reduce('') { |memo, obj| memo += "<tablePart r:id='%s'/>" % obj.rId }]
diff --git a/test/util/tc_validators.rb b/test/util/tc_validators.rb
index d4f98d05..2a0a0229 100644
--- a/test/util/tc_validators.rb
+++ b/test/util/tc_validators.rb
@@ -70,6 +70,35 @@ class TestValidators < Test::Unit::TestCase
assert_raise(ArgumentError) { Axlsx.validate_relationship_type "http://some.url" }
assert_raise(ArgumentError) { Axlsx.validate_relationship_type false }
+ #number_with_unit
+ assert_nothing_raised { Axlsx.validate_number_with_unit "210mm" }
+ assert_nothing_raised { Axlsx.validate_number_with_unit "8.5in" }
+ assert_nothing_raised { Axlsx.validate_number_with_unit "29.7cm" }
+ assert_nothing_raised { Axlsx.validate_number_with_unit "120pt" }
+ assert_nothing_raised { Axlsx.validate_number_with_unit "0pc" }
+ assert_nothing_raised { Axlsx.validate_number_with_unit "12.34pi" }
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit nil }
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "210" }
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit 210 }
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "mm" }
+ assert_raise(ArgumentError) { Axlsx.validate_number_with_unit "-29cm" }
+
+ #page_scale
+ assert_nothing_raised { Axlsx.validate_page_scale 10 }
+ assert_nothing_raised { Axlsx.validate_page_scale 100 }
+ assert_nothing_raised { Axlsx.validate_page_scale 400 }
+ assert_raise(ArgumentError) { Axlsx.validate_page_scale 9 }
+ assert_raise(ArgumentError) { Axlsx.validate_page_scale 10.0 }
+ assert_raise(ArgumentError) { Axlsx.validate_page_scale 400.1 }
+ assert_raise(ArgumentError) { Axlsx.validate_page_scale "99" }
+
+ #page_orientation
+ assert_nothing_raised { Axlsx.validate_page_orientation :default }
+ assert_nothing_raised { Axlsx.validate_page_orientation :landscape }
+ assert_nothing_raised { Axlsx.validate_page_orientation :portrait }
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation nil }
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation 1 }
+ assert_raise(ArgumentError) { Axlsx.validate_page_orientation "landscape" }
end
end
diff --git a/test/workbook/worksheet/tc_page_setup.rb b/test/workbook/worksheet/tc_page_setup.rb
new file mode 100644
index 00000000..ff323c75
--- /dev/null
+++ b/test/workbook/worksheet/tc_page_setup.rb
@@ -0,0 +1,103 @@
+require 'tc_helper.rb'
+
+class TestPageSetup < Test::Unit::TestCase
+
+ def setup
+ p = Axlsx::Package.new
+ ws = p.workbook.add_worksheet :name => "hmmm"
+ @ps = ws.page_setup
+ end
+
+ def test_initialize
+ assert_equal(nil, @ps.fit_to_height)
+ assert_equal(nil, @ps.fit_to_width)
+ assert_equal(nil, @ps.orientation)
+ assert_equal(nil, @ps.paper_height)
+ assert_equal(nil, @ps.paper_width)
+ assert_equal(nil, @ps.scale)
+ end
+
+ def test_initialize_with_options
+ optioned = Axlsx::PageSetup.new(:fit_to_height => 1, :fit_to_width => 2, :orientation => :landscape, :paper_height => "297mm", :paper_width => "210mm", :scale => 50)
+ assert_equal(1, optioned.fit_to_height)
+ assert_equal(2, optioned.fit_to_width)
+ assert_equal(:landscape, optioned.orientation)
+ assert_equal("297mm", optioned.paper_height)
+ assert_equal("210mm", optioned.paper_width)
+ assert_equal(50, optioned.scale)
+ end
+
+ def test_set_all_values
+ @ps.set(:fit_to_height => 1, :fit_to_width => 2, :orientation => :landscape, :paper_height => "297mm", :paper_width => "210mm", :scale => 50)
+ assert_equal(1, @ps.fit_to_height)
+ assert_equal(2, @ps.fit_to_width)
+ assert_equal(:landscape, @ps.orientation)
+ assert_equal("297mm", @ps.paper_height)
+ assert_equal("210mm", @ps.paper_width)
+ assert_equal(50, @ps.scale)
+ end
+
+ def test_set_some_values
+ @ps.set(:fit_to_width => 2, :orientation => :portrait)
+ assert_equal(2, @ps.fit_to_width)
+ assert_equal(:portrait, @ps.orientation)
+ assert_equal(nil, @ps.fit_to_height)
+ assert_equal(nil, @ps.paper_height)
+ assert_equal(nil, @ps.paper_width)
+ assert_equal(nil, @ps.scale)
+ end
+
+ def test_to_xml_all_values
+ @ps.set(:fit_to_height => 1, :fit_to_width => 2, :orientation => :landscape, :paper_height => "297mm", :paper_width => "210mm", :scale => 50)
+ doc = Nokogiri::XML.parse(@ps.to_xml_string)
+ assert_equal(1, doc.xpath(".//pageSetup[@fitToHeight='1'][@fitToWidth='2'][@orientation='landscape'][@paperHeight='297mm'][@paperWidth='210mm'][@scale='50']").size)
+ end
+
+ def test_to_xml_some_values
+ @ps.set(:orientation => :portrait)
+ doc = Nokogiri::XML.parse(@ps.to_xml_string)
+ assert_equal(1, doc.xpath(".//pageSetup[@orientation='portrait']").size)
+ assert_equal(0, doc.xpath(".//pageSetup[@fitToHeight]").size)
+ assert_equal(0, doc.xpath(".//pageSetup[@fitToWidth]").size)
+ assert_equal(0, doc.xpath(".//pageSetup[@paperHeight]").size)
+ assert_equal(0, doc.xpath(".//pageSetup[@paperWidth]").size)
+ assert_equal(0, doc.xpath(".//pageSetup[@scale]").size)
+ end
+
+ def test_fit_to_height
+ assert_raise(ArgumentError) { @ps.fit_to_height = 1.5 }
+ assert_nothing_raised { @ps.fit_to_height = 2 }
+ assert_equal(2, @ps.fit_to_height)
+ end
+
+ def test_fit_to_width
+ assert_raise(ArgumentError) { @ps.fit_to_width = false }
+ assert_nothing_raised { @ps.fit_to_width = 1 }
+ assert_equal(1, @ps.fit_to_width)
+ end
+
+ def test_orientation
+ assert_raise(ArgumentError) { @ps.orientation = "" }
+ assert_nothing_raised { @ps.orientation = :default }
+ assert_equal(:default, @ps.orientation)
+ end
+
+ def test_paper_height
+ assert_raise(ArgumentError) { @ps.paper_height = 99 }
+ assert_nothing_raised { @ps.paper_height = "11in" }
+ assert_equal("11in", @ps.paper_height)
+ end
+
+ def test_paper_width
+ assert_raise(ArgumentError) { @ps.paper_width = "22" }
+ assert_nothing_raised { @ps.paper_width = "29.7cm" }
+ assert_equal("29.7cm", @ps.paper_width)
+ end
+
+ def test_scale
+ assert_raise(ArgumentError) { @ps.scale = 50.5 }
+ assert_nothing_raised { @ps.scale = 99 }
+ assert_equal(99, @ps.scale)
+ end
+
+end
diff --git a/test/workbook/worksheet/tc_print_options.rb b/test/workbook/worksheet/tc_print_options.rb
new file mode 100644
index 00000000..37ff7fe5
--- /dev/null
+++ b/test/workbook/worksheet/tc_print_options.rb
@@ -0,0 +1,72 @@
+require 'tc_helper.rb'
+
+class TestPrintOptions < Test::Unit::TestCase
+
+ def setup
+ p = Axlsx::Package.new
+ ws = p.workbook.add_worksheet :name => "hmmm"
+ @po = ws.print_options
+ end
+
+ def test_initialize
+ assert_equal(false, @po.grid_lines)
+ assert_equal(false, @po.headings)
+ assert_equal(false, @po.horizontal_centered)
+ assert_equal(false, @po.vertical_centered)
+ end
+
+ def test_initialize_with_options
+ optioned = Axlsx::PrintOptions.new(:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true)
+ assert_equal(true, optioned.grid_lines)
+ assert_equal(true, optioned.headings)
+ assert_equal(true, optioned.horizontal_centered)
+ assert_equal(true, optioned.vertical_centered)
+ end
+
+ def test_set_all_values
+ @po.set(:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true)
+ assert_equal(true, @po.grid_lines)
+ assert_equal(true, @po.headings)
+ assert_equal(true, @po.horizontal_centered)
+ assert_equal(true, @po.vertical_centered)
+ end
+
+ def test_set_some_values
+ @po.set(:grid_lines => true, :headings => true)
+ assert_equal(true, @po.grid_lines)
+ assert_equal(true, @po.headings)
+ assert_equal(false, @po.horizontal_centered)
+ assert_equal(false, @po.vertical_centered)
+ end
+
+ def test_to_xml
+ @po.set(:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true)
+ doc = Nokogiri::XML.parse(@po.to_xml_string)
+ assert_equal(1, doc.xpath(".//printOptions[@gridLines='true'][@headings='true'][@horizontalCentered='true'][@verticalCentered='true']").size)
+ end
+
+ def test_grid_lines
+ assert_raise(ArgumentError) { @po.grid_lines = 99 }
+ assert_nothing_raised { @po.grid_lines = true }
+ assert_equal(@po.grid_lines, true)
+ end
+
+ def test_headings
+ assert_raise(ArgumentError) { @po.headings = 99 }
+ assert_nothing_raised { @po.headings = true }
+ assert_equal(@po.headings, true)
+ end
+
+ def test_horizontal_centered
+ assert_raise(ArgumentError) { @po.horizontal_centered = 99 }
+ assert_nothing_raised { @po.horizontal_centered = true }
+ assert_equal(@po.horizontal_centered, true)
+ end
+
+ def test_vertical_centered
+ assert_raise(ArgumentError) { @po.vertical_centered = 99 }
+ assert_nothing_raised { @po.vertical_centered = true }
+ assert_equal(@po.vertical_centered, true)
+ end
+
+end
diff --git a/test/workbook/worksheet/tc_worksheet.rb b/test/workbook/worksheet/tc_worksheet.rb
index d5416e64..dbb48887 100644
--- a/test/workbook/worksheet/tc_worksheet.rb
+++ b/test/workbook/worksheet/tc_worksheet.rb
@@ -25,6 +25,28 @@ class TestWorksheet < Test::Unit::TestCase
end
end
+ def test_page_setup
+ assert(@ws.page_setup.is_a? Axlsx::PageSetup)
+ end
+
+ def test_page_setup_yield
+ @ws.page_setup do |ps|
+ assert(ps.is_a? Axlsx::PageSetup)
+ assert(@ws.page_setup == ps)
+ end
+ end
+
+ def test_print_options
+ assert(@ws.print_options.is_a? Axlsx::PrintOptions)
+ end
+
+ def test_print_options_yield
+ @ws.print_options do |po|
+ assert(po.is_a? Axlsx::PrintOptions)
+ assert(@ws.print_options == po)
+ end
+ end
+
def test_no_autowidth
@ws.workbook.use_autowidth = false
@ws.add_row [1,2,3,4]
@@ -33,13 +55,18 @@ class TestWorksheet < Test::Unit::TestCase
def test_initialization_options
page_margins = {:left => 2, :right => 2, :bottom => 2, :top => 2, :header => 2, :footer => 2}
- optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins, :selected => true, :show_gridlines => false)
- assert_equal(optioned.page_margins.left, page_margins[:left])
- assert_equal(optioned.page_margins.right, page_margins[:right])
- assert_equal(optioned.page_margins.top, page_margins[:top])
- assert_equal(optioned.page_margins.bottom, page_margins[:bottom])
- assert_equal(optioned.page_margins.header, page_margins[:header])
- assert_equal(optioned.page_margins.footer, page_margins[:footer])
+ page_setup = {:fit_to_height => 1, :fit_to_width => 1, :orientation => :landscape, :paper_width => "210mm", :paper_height => "297mm", :scale => 80}
+ print_options = {:grid_lines => true, :headings => true, :horizontal_centered => true, :vertical_centered => true}
+ optioned = @ws.workbook.add_worksheet(:name => 'bob', :page_margins => page_margins, :page_setup => page_setup, :print_options => print_options, :selected => true, :show_gridlines => false)
+ page_margins.keys.each do |key|
+ assert_equal(page_margins[key], optioned.page_margins.send(key))
+ end
+ page_setup.keys.each do |key|
+ assert_equal(page_setup[key], optioned.page_setup.send(key))
+ end
+ print_options.keys.each do |key|
+ assert_equal(print_options[key], optioned.print_options.send(key))
+ end
assert_equal(optioned.name, 'bob')
assert_equal(optioned.selected, true)
assert_equal(optioned.show_gridlines, false)
@@ -223,6 +250,24 @@ class TestWorksheet < Test::Unit::TestCase
assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageMargins[@left="9"][@right="7"]').size, 1)
end
+ def test_to_xml_string_page_setup
+ @ws.page_setup do |ps|
+ ps.paper_width = "210mm"
+ ps.scale = 80
+ end
+ doc = Nokogiri::XML(@ws.to_xml_string)
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:pageSetup[@paperWidth="210mm"][@scale="80"]').size, 1)
+ end
+
+ def test_to_xml_string_print_options
+ @ws.print_options do |po|
+ po.grid_lines = true
+ po.horizontal_centered = true
+ end
+ doc = Nokogiri::XML(@ws.to_xml_string)
+ assert_equal(doc.xpath('//xmlns:worksheet/xmlns:printOptions[@gridLines="true"][@horizontalCentered="true"]').size, 1)
+ end
+
def test_to_xml_string_drawing
c = @ws.add_chart Axlsx::Pie3DChart
doc = Nokogiri::XML(@ws.to_xml_string)
@@ -259,6 +304,8 @@ class TestWorksheet < Test::Unit::TestCase
# is generated in correct order.
def test_valid_with_optional_elements
@ws.page_margins.set :left => 9
+ @ws.page_setup.set :fit_to_width => 1
+ @ws.print_options.set :headings => true
@ws.auto_filter = "A1:C3"
@ws.merge_cells "A4:A5"
@ws.add_chart Axlsx::Pie3DChart