summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--examples/example.rb3
-rw-r--r--lib/axlsx.rb4
-rw-r--r--lib/axlsx/drawing/drawing.rb2
-rw-r--r--lib/axlsx/drawing/pic.rb7
-rw-r--r--lib/axlsx/package.rb21
-rw-r--r--lib/axlsx/util/parser.rb35
-rw-r--r--lib/axlsx/workbook/workbook.rb11
-rw-r--r--test/tc_package.rb8
8 files changed, 76 insertions, 15 deletions
diff --git a/examples/example.rb b/examples/example.rb
index 609096b5..e8b00155 100644
--- a/examples/example.rb
+++ b/examples/example.rb
@@ -98,13 +98,14 @@ if ARGV.size==0 || ARGV.include?("7")
end
p.serialize("example7.xlsx")
end
+
#Add an Image
if ARGV.size==0 || ARGV.include?("8")
p = Axlsx::Package.new
p.workbook.add_worksheet do |sheet|
img = File.expand_path('examples/image1.jpeg')
- sheet.add_image(:image_src => img) do |image|
+ sheet.add_image(:image_src => img, :noSelect=>true, :noMove=>true) do |image|
image.width=720
image.height=666
image.start_at 2, 2
diff --git a/lib/axlsx.rb b/lib/axlsx.rb
index 7c15672c..71755f5b 100644
--- a/lib/axlsx.rb
+++ b/lib/axlsx.rb
@@ -5,6 +5,10 @@ Encoding::default_external = 'UTF-8' unless RUBY_VERSION < '1.9'
require 'axlsx/util/simple_typed_list.rb'
require 'axlsx/util/constants.rb'
require 'axlsx/util/validators.rb'
+
+# to be included with parsable intitites.
+#require 'axlsx/util/parser.rb'
+
require 'axlsx/stylesheet/styles.rb'
require 'axlsx/doc_props/app.rb'
diff --git a/lib/axlsx/drawing/drawing.rb b/lib/axlsx/drawing/drawing.rb
index 4fa7dc11..6e41f6a5 100644
--- a/lib/axlsx/drawing/drawing.rb
+++ b/lib/axlsx/drawing/drawing.rb
@@ -27,7 +27,7 @@ module Axlsx
require 'axlsx/drawing/bar_3D_chart.rb'
require 'axlsx/drawing/line_3D_chart.rb'
-
+ require 'axlsx/drawing/picture_locking.rb'
require 'axlsx/drawing/pic.rb'
# A Drawing is a canvas for charts. Each worksheet has a single drawing that manages anchors.
diff --git a/lib/axlsx/drawing/pic.rb b/lib/axlsx/drawing/pic.rb
index 84e750ce..4d970e32 100644
--- a/lib/axlsx/drawing/pic.rb
+++ b/lib/axlsx/drawing/pic.rb
@@ -26,6 +26,8 @@ module Axlsx
# @return [OneCellAnchor]
attr_reader :anchor
+ # The picture locking attributes for this picture
+ attr_reader :picture_locking
# Creates a new Pic(ture) object
# @param [Anchor] anchor the anchor that holds this image
@@ -43,6 +45,7 @@ module Axlsx
end
start_at(*options[:start_at]) if options[:start_at]
yield self if block_given?
+ @picture_locking = PictureLocking.new(options)
end
def image_src=(v)
@@ -94,7 +97,7 @@ module Axlsx
def width=(v)
@anchor.width = v
end
-
+
# providing access to update the anchor's height attribute
# @param [Integer] v
# @see OneCellAnchor.width
@@ -126,7 +129,7 @@ module Axlsx
xml.send('xdr:nvPicPr') {
xml.send('xdr:cNvPr', :id=>"2", :name=>name, :descr=>descr)
xml.send('xdr:cNvPicPr') {
- xml.send('a:picLocks', :noChangeAspect=>1)
+ picture_locking.to_xml(xml)
}
}
xml.send('xdr:blipFill') {
diff --git a/lib/axlsx/package.rb b/lib/axlsx/package.rb
index 5c46776c..d9b308ae 100644
--- a/lib/axlsx/package.rb
+++ b/lib/axlsx/package.rb
@@ -16,12 +16,6 @@ module Axlsx
yield self if block_given?
end
- # Accepts a ruport table for serialization to xlsx
- # @param [Table] table a ruport Table object
- def ruport_table(table)
- puts table
- end
-
# The workbook this package will serialize or validate.
# @return [Workbook] If no workbook instance has been assigned with this package a new Workbook instance is returned.
# @raise ArgumentError if workbook parameter is not a Workbook instance.
@@ -39,6 +33,18 @@ module Axlsx
yield @workbook if block_given?
@workbook
end
+
+ #def self.parse(input, confirm_valid = false)
+ # p = Package.new
+ # z = Zip::ZipFile.open(input)
+ # p.workbook = Workbook.parse z.get_entry(WORKBOOK_PN)
+ # p
+ #end
+
+
+
+
+
# @see workbook
def workbook=(workbook) DataTypeValidator.validate "Package.workbook", Workbook, workbook; @workbook = workbook; end
@@ -76,7 +82,8 @@ module Axlsx
end
true
end
-
+
+
# Validate all parts of the package against xsd schema.
# @return [Array] An array of all validation errors found.
# @note This gem includes all schema from OfficeOpenXML-XMLSchema-Transitional.zip and OpenPackagingConventions-XMLSchema.zip
diff --git a/lib/axlsx/util/parser.rb b/lib/axlsx/util/parser.rb
new file mode 100644
index 00000000..68523ebf
--- /dev/null
+++ b/lib/axlsx/util/parser.rb
@@ -0,0 +1,35 @@
+module Axlsx
+ # The Parser module mixes in a number of methods to help in generating a model from xml
+ module Parser
+ attr_accessor :parser_xml
+
+ def parse_string attr_name, xpath
+ send("#{attr_name.to_s}=", parse_value(xpath))
+ end
+
+ def parse_symbol attr_name, xpath
+ v = parse_value xpath
+ v = v.to_sym unless v.nil?
+ send("#{attr_name.to_s}=", v)
+ end
+
+ def parse_integer attr_name, xpath
+ v = parse_value xpath
+ v = v.to_i if v.respond_to?(:to_i)
+ send("#{attr_name.to_s}=", v)
+ end
+
+ def parse_float attr_name, xpath
+ v = parse_value xpath
+ v = v.to_f if v.respond_to?(:to_f)
+ send("#{attr_name.to_s}=", v)
+ end
+
+ def parse_value xpath
+ node = parser_xml.xpath(xpath)
+ return nil if node.empty?
+ node.text.strip
+ end
+
+ end
+end
diff --git a/lib/axlsx/workbook/workbook.rb b/lib/axlsx/workbook/workbook.rb
index 65020e71..e0031d15 100644
--- a/lib/axlsx/workbook/workbook.rb
+++ b/lib/axlsx/workbook/workbook.rb
@@ -71,7 +71,16 @@ require 'axlsx/workbook/worksheet/worksheet.rb'
# Indicates if the epoc date for serialization should be 1904. If false, 1900 is used.
@@date1904 = false
-
+
+ # lets come back to this later when we are ready for parsing.
+ #def self.parse entry
+ # io = entry.get_input_stream
+ # w = self.new
+ # w.parser_xml = Nokogiri::XML(io.read)
+ # w.parse_string :date1904, "//xmlns:workbookPr/@date1904"
+ # w
+ #end
+
# Creates a new Workbook
# @option options [Boolean] date1904
def initialize(options={})
diff --git a/test/tc_package.rb b/test/tc_package.rb
index ad511161..34682505 100644
--- a/test/tc_package.rb
+++ b/test/tc_package.rb
@@ -7,6 +7,8 @@ class TestPackage < Test::Unit::TestCase
ws = @package.workbook.add_worksheet
chart = ws.add_chart Axlsx::Pie3DChart
chart.add_series :data=>[1,2,3], :labels=>["a", "b", "c"]
+ @fname = 'axlsx_test_serialization.xlsx'
+
end
def test_default_objects_are_created
@@ -20,10 +22,10 @@ class TestPackage < Test::Unit::TestCase
fname = 'axlsx_test_serialization.xlsx'
assert_nothing_raised do
begin
- z= @package.serialize(fname)
- zf = Zip::ZipFile.open(fname)
+ z= @package.serialize(@fname)
+ zf = Zip::ZipFile.open(@fname)
@package.send(:parts).each{ |part| zf.get_entry(part[:entry]) }
- File.delete(fname)
+ File.delete(@fname)
rescue Errno::EACCES
puts "WARNING:: test_serialization requires write access."
end