rubyXL 1.2.10 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. data/Gemfile +14 -10
  2. data/Gemfile.lock +80 -21
  3. data/LICENSE.txt +1 -1
  4. data/README.rdoc +88 -82
  5. data/Rakefile +7 -2
  6. data/VERSION +1 -1
  7. data/lib/rubyXL.rb +13 -7
  8. data/lib/rubyXL/cell.rb +108 -268
  9. data/lib/rubyXL/generic_storage.rb +40 -0
  10. data/lib/rubyXL/objects/border.rb +66 -0
  11. data/lib/rubyXL/objects/calculation_chain.rb +28 -0
  12. data/lib/rubyXL/objects/cell_style.rb +75 -0
  13. data/lib/rubyXL/objects/color.rb +25 -0
  14. data/lib/rubyXL/objects/column_range.rb +74 -0
  15. data/lib/rubyXL/objects/container_nodes.rb +122 -0
  16. data/lib/rubyXL/objects/data_validation.rb +43 -0
  17. data/lib/rubyXL/objects/document_properties.rb +76 -0
  18. data/lib/rubyXL/objects/extensions.rb +36 -0
  19. data/lib/rubyXL/objects/fill.rb +57 -0
  20. data/lib/rubyXL/objects/font.rb +111 -0
  21. data/lib/rubyXL/objects/formula.rb +24 -0
  22. data/lib/rubyXL/objects/ooxml_object.rb +295 -0
  23. data/lib/rubyXL/objects/reference.rb +110 -0
  24. data/lib/rubyXL/objects/relationships.rb +59 -0
  25. data/lib/rubyXL/objects/shared_strings.rb +57 -0
  26. data/lib/rubyXL/objects/sheet_data.rb +149 -0
  27. data/lib/rubyXL/objects/sheet_view.rb +71 -0
  28. data/lib/rubyXL/objects/stylesheet.rb +200 -0
  29. data/lib/rubyXL/objects/text.rb +87 -0
  30. data/lib/rubyXL/objects/theme.rb +64 -0
  31. data/lib/rubyXL/objects/workbook.rb +233 -0
  32. data/lib/rubyXL/objects/worksheet.rb +485 -0
  33. data/lib/rubyXL/parser.rb +78 -442
  34. data/lib/rubyXL/workbook.rb +216 -385
  35. data/lib/rubyXL/worksheet.rb +509 -1062
  36. data/lib/rubyXL/writer/content_types_writer.rb +104 -68
  37. data/lib/rubyXL/writer/core_writer.rb +26 -43
  38. data/lib/rubyXL/writer/generic_writer.rb +43 -0
  39. data/lib/rubyXL/writer/root_rels_writer.rb +11 -19
  40. data/lib/rubyXL/writer/styles_writer.rb +6 -398
  41. data/lib/rubyXL/writer/theme_writer.rb +321 -327
  42. data/lib/rubyXL/writer/workbook_writer.rb +63 -67
  43. data/lib/rubyXL/writer/worksheet_writer.rb +29 -218
  44. data/rdoc/created.rid +39 -0
  45. data/rdoc/fonts.css +167 -0
  46. data/rdoc/fonts/Lato-Light.ttf +0 -0
  47. data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
  48. data/rdoc/fonts/Lato-Regular.ttf +0 -0
  49. data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
  50. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  51. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  52. data/rdoc/images/add.png +0 -0
  53. data/rdoc/images/arrow_up.png +0 -0
  54. data/rdoc/images/brick.png +0 -0
  55. data/rdoc/images/brick_link.png +0 -0
  56. data/rdoc/images/bug.png +0 -0
  57. data/rdoc/images/bullet_black.png +0 -0
  58. data/rdoc/images/bullet_toggle_minus.png +0 -0
  59. data/rdoc/images/bullet_toggle_plus.png +0 -0
  60. data/rdoc/images/date.png +0 -0
  61. data/rdoc/images/delete.png +0 -0
  62. data/rdoc/images/find.png +0 -0
  63. data/rdoc/images/loadingAnimation.gif +0 -0
  64. data/rdoc/images/macFFBgHack.png +0 -0
  65. data/rdoc/images/package.png +0 -0
  66. data/rdoc/images/page_green.png +0 -0
  67. data/rdoc/images/page_white_text.png +0 -0
  68. data/rdoc/images/page_white_width.png +0 -0
  69. data/rdoc/images/plugin.png +0 -0
  70. data/rdoc/images/ruby.png +0 -0
  71. data/rdoc/images/tag_blue.png +0 -0
  72. data/rdoc/images/tag_green.png +0 -0
  73. data/rdoc/images/transparent.png +0 -0
  74. data/rdoc/images/wrench.png +0 -0
  75. data/rdoc/images/wrench_orange.png +0 -0
  76. data/rdoc/images/zoom.png +0 -0
  77. data/rdoc/js/darkfish.js +140 -0
  78. data/rdoc/js/jquery.js +18 -0
  79. data/rdoc/js/navigation.js +142 -0
  80. data/rdoc/js/search.js +109 -0
  81. data/rdoc/js/search_index.js +1 -0
  82. data/rdoc/js/searcher.js +228 -0
  83. data/rdoc/rdoc.css +580 -0
  84. data/rubyXL.gemspec +90 -34
  85. data/spec/lib/cell_spec.rb +29 -59
  86. data/spec/lib/parser_spec.rb +35 -19
  87. data/spec/lib/reference_spec.rb +29 -0
  88. data/spec/lib/stylesheet_spec.rb +29 -0
  89. data/spec/lib/workbook_spec.rb +22 -17
  90. data/spec/lib/worksheet_spec.rb +47 -202
  91. metadata +185 -148
  92. data/lib/.DS_Store +0 -0
  93. data/lib/rubyXL/Hash.rb +0 -60
  94. data/lib/rubyXL/color.rb +0 -14
  95. data/lib/rubyXL/private_class.rb +0 -265
  96. data/lib/rubyXL/writer/app_writer.rb +0 -62
  97. data/lib/rubyXL/writer/calc_chain_writer.rb +0 -33
  98. data/lib/rubyXL/writer/shared_strings_writer.rb +0 -30
  99. data/lib/rubyXL/writer/workbook_rels_writer.rb +0 -59
  100. data/lib/rubyXL/zip.rb +0 -20
  101. data/spec/lib/hash_spec.rb +0 -28
@@ -0,0 +1,200 @@
1
+ require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/cell_style'
3
+ require 'rubyXL/objects/font'
4
+ require 'rubyXL/objects/fill'
5
+ require 'rubyXL/objects/border'
6
+ require 'rubyXL/objects/extensions'
7
+
8
+ module RubyXL
9
+
10
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_numFmt-1.html
11
+ class NumberFormat < OOXMLObject
12
+ define_attribute(:numFmtId, :int, :required => true)
13
+ define_attribute(:formatCode, :string, :required => true)
14
+ define_element_name 'numFmt'
15
+
16
+ def is_date_format?
17
+ # v----- Toss all the escaped chars ------v v--- and see if any date-related remained
18
+ !!(format_code.gsub(/(\"[^\"]*\"|\[[^\]]*\]|[\\_*].)/i, '') =~ /[dmyhs]/i)
19
+ end
20
+
21
+ end
22
+
23
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_numFmts-1.html
24
+ class NumberFormatContainer < OOXMLObject
25
+ define_child_node(RubyXL::NumberFormat, :collection => :with_count, :accessor => :number_formats)
26
+ define_element_name 'numFmts'
27
+
28
+ DEFAULT_NUMBER_FORMATS = self.new(:number_formats => [
29
+ RubyXL::NumberFormat.new(:num_fmt_id => 1, :format_code => '0'),
30
+ RubyXL::NumberFormat.new(:num_fmt_id => 2, :format_code => '0.00'),
31
+ RubyXL::NumberFormat.new(:num_fmt_id => 3, :format_code => '#, ##0'),
32
+ RubyXL::NumberFormat.new(:num_fmt_id => 4, :format_code => '#, ##0.00'),
33
+ RubyXL::NumberFormat.new(:num_fmt_id => 5, :format_code => '$#, ##0_);($#, ##0)'),
34
+ RubyXL::NumberFormat.new(:num_fmt_id => 6, :format_code => '$#, ##0_);[Red]($#, ##0)'),
35
+ RubyXL::NumberFormat.new(:num_fmt_id => 7, :format_code => '$#, ##0.00_);($#, ##0.00)'),
36
+ RubyXL::NumberFormat.new(:num_fmt_id => 8, :format_code => '$#, ##0.00_);[Red]($#, ##0.00)'),
37
+ RubyXL::NumberFormat.new(:num_fmt_id => 9, :format_code => '0%'),
38
+ RubyXL::NumberFormat.new(:num_fmt_id => 10, :format_code => '0.00%'),
39
+ RubyXL::NumberFormat.new(:num_fmt_id => 11, :format_code => '0.00E+00'),
40
+ RubyXL::NumberFormat.new(:num_fmt_id => 12, :format_code => '# ?/?'),
41
+ RubyXL::NumberFormat.new(:num_fmt_id => 13, :format_code => '# ??/??'),
42
+ RubyXL::NumberFormat.new(:num_fmt_id => 14, :format_code => 'm/d/yyyy'),
43
+ RubyXL::NumberFormat.new(:num_fmt_id => 15, :format_code => 'd-mmm-yy'),
44
+ RubyXL::NumberFormat.new(:num_fmt_id => 16, :format_code => 'd-mmm'),
45
+ RubyXL::NumberFormat.new(:num_fmt_id => 17, :format_code => 'mmm-yy'),
46
+ RubyXL::NumberFormat.new(:num_fmt_id => 18, :format_code => 'h:mm AM/PM'),
47
+ RubyXL::NumberFormat.new(:num_fmt_id => 19, :format_code => 'h:mm:ss AM/PM'),
48
+ RubyXL::NumberFormat.new(:num_fmt_id => 20, :format_code => 'h:mm'),
49
+ RubyXL::NumberFormat.new(:num_fmt_id => 21, :format_code => 'h:mm:ss'),
50
+ RubyXL::NumberFormat.new(:num_fmt_id => 22, :format_code => 'm/d/yyyy h:mm'),
51
+ RubyXL::NumberFormat.new(:num_fmt_id => 37, :format_code => '#, ##0_);(#, ##0)'),
52
+ RubyXL::NumberFormat.new(:num_fmt_id => 38, :format_code => '#, ##0_);[Red](#, ##0)'),
53
+ RubyXL::NumberFormat.new(:num_fmt_id => 39, :format_code => '#, ##0.00_);(#, ##0.00)'),
54
+ RubyXL::NumberFormat.new(:num_fmt_id => 40, :format_code => '#, ##0.00_);[Red](#, ##0.00)'),
55
+ RubyXL::NumberFormat.new(:num_fmt_id => 45, :format_code => 'mm:ss'),
56
+ RubyXL::NumberFormat.new(:num_fmt_id => 46, :format_code => '[h]:mm:ss'),
57
+ RubyXL::NumberFormat.new(:num_fmt_id => 47, :format_code => 'mm:ss.0'),
58
+ RubyXL::NumberFormat.new(:num_fmt_id => 48, :format_code => '##0.0E+0'),
59
+ RubyXL::NumberFormat.new(:num_fmt_id => 49, :format_code => '@')
60
+ ])
61
+
62
+ def find_by_format_id(format_id)
63
+ number_formats.find { |fmt| fmt.num_fmt_id == format_id }
64
+ end
65
+
66
+ end
67
+
68
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_cellStyleXfs-1.html
69
+ class CellStyleXFContainer < OOXMLObject
70
+ define_child_node(RubyXL::XF, :collection => :with_count, :accessor => :cell_style_xfs)
71
+ define_element_name 'cellStyleXfs'
72
+
73
+ def self.defaults
74
+ self.new(:cell_style_xfs => [ RubyXL::XF.new(:num_fmt_id => 0, :font_id => 0, :fill_id => 0, :border_id => 0) ])
75
+ end
76
+ end
77
+
78
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_cellXfs-1.html
79
+ class CellXFContainer < OOXMLObject
80
+ define_child_node(RubyXL::XF, :collection => :with_count, :accessor => :xfs)
81
+ define_element_name 'cellXfs'
82
+
83
+ def self.defaults
84
+ self.new(:xfs => [
85
+ RubyXL::XF.new(
86
+ :num_fmt_id => 0, :font_id => 0, :fill_id => 0, :border_id => 0, :xfId => 0
87
+ )
88
+ ])
89
+ end
90
+ end
91
+
92
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_cellStyles-1.html
93
+ class CellStyleContainer < OOXMLObject
94
+ define_child_node(RubyXL::CellStyle, :collection => :with_count, :accessor => :cell_styles)
95
+ define_element_name 'cellStyles'
96
+
97
+ def self.defaults
98
+ self.new(:cell_styles => [ RubyXL::CellStyle.new(:builtin_id => 0, :name => 'Normal', :xf_id => 0) ])
99
+ end
100
+ end
101
+
102
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_dxf-1.html
103
+ class DXF < OOXMLObject
104
+ define_child_node(RubyXL::Font)
105
+ define_child_node(RubyXL::NumberFormat)
106
+ define_child_node(RubyXL::Fill)
107
+ define_child_node(RubyXL::Alignment)
108
+ define_child_node(RubyXL::Border)
109
+ define_child_node(RubyXL::Protection)
110
+ define_child_node(RubyXL::ExtensionStorageArea)
111
+ define_element_name 'dxf'
112
+ end
113
+
114
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_dxfs-1.html
115
+ class DXFs < OOXMLObject
116
+ define_child_node(RubyXL::DXF, :collection => :with_count)
117
+ define_element_name 'dxfs'
118
+ end
119
+
120
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_tableStyle-1.html
121
+ class TableStyle < OOXMLObject
122
+ define_attribute(:name, :string, :required => true)
123
+ define_attribute(:pivot, :bool, :default => true)
124
+ define_attribute(:table, :bool, :default => true)
125
+ define_attribute(:count, :int)
126
+ define_element_name 'tableStyle'
127
+ end
128
+
129
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_tableStyles-1.html
130
+ class TableStyles < OOXMLObject
131
+ define_attribute(:defaultTableStyle, :string)
132
+ define_attribute(:defaultPivotStyle, :string)
133
+ define_child_node(RubyXL::TableStyle, :collection => :with_count)
134
+ define_element_name 'tableStyles'
135
+ end
136
+
137
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_colors-1.html
138
+ class ColorSet < OOXMLObject
139
+ define_child_node(RubyXL::Color, :collection => :true)
140
+ end
141
+
142
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_colors-1.html
143
+ class Colors < OOXMLObject
144
+ define_child_node(RubyXL::ColorSet, :node_name => 'indexedColors')
145
+ define_child_node(RubyXL::ColorSet, :node_name => 'mruColors')
146
+ define_element_name 'colors'
147
+ end
148
+
149
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_styleSheet.html
150
+ class Stylesheet < OOXMLObject
151
+ define_child_node(RubyXL::NumberFormatContainer, :accessor => :number_format_container)
152
+ define_child_node(RubyXL::FontContainer, :accessor => :font_container)
153
+ define_child_node(RubyXL::FillContainer, :accessor => :fill_container)
154
+ define_child_node(RubyXL::BorderContainer, :accessor => :border_container)
155
+ define_child_node(RubyXL::CellStyleXFContainer, :accessor => :cell_style_xf_container)
156
+ define_child_node(RubyXL::CellXFContainer, :accessor => :cell_xf_container)
157
+ define_child_node(RubyXL::CellStyleContainer, :accessor => :cell_style_container)
158
+ define_child_node(RubyXL::DXFs)
159
+ define_child_node(RubyXL::TableStyles)
160
+ define_child_node(RubyXL::Colors)
161
+ define_child_node(RubyXL::ExtensionStorageArea)
162
+ define_element_name 'styleSheet'
163
+ set_namespaces('xmlns' => 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
164
+ 'xmlns:r' => 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
165
+ 'xmlns:mc' => 'http://schemas.openxmlformats.org/markup-compatibility/2006',
166
+ 'xmlns:x14ac' => 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac',
167
+ 'xmlns:mv' => 'urn:schemas-microsoft-com:mac:vml')
168
+
169
+ def initialize(*args)
170
+ super
171
+ @format_hash = nil
172
+ end
173
+
174
+ def self.filepath
175
+ File.join('xl', 'styles.xml')
176
+ end
177
+
178
+ def self.default
179
+ self.new(:cell_xf_container => RubyXL::CellXFContainer.defaults,
180
+ :font_container => RubyXL::FontContainer.defaults,
181
+ :fill_container => RubyXL::FillContainer.defaults,
182
+ :border_container => RubyXL::BorderContainer.defaults,
183
+ :cell_style_container => RubyXL::CellStyleContainer.defaults,
184
+ :cell_style_xf_container => RubyXL::CellStyleXFContainer.defaults)
185
+ end
186
+
187
+ def get_number_format_by_id(format_id)
188
+ @format_hash ||= {}
189
+
190
+ if @format_hash[format_id].nil? then
191
+ @format_hash[format_id] = NumberFormatContainer::DEFAULT_NUMBER_FORMATS.find_by_format_id(format_id) ||
192
+ (number_format_container && number_format_container.find_by_format_id(format_id))
193
+ end
194
+
195
+ @format_hash[format_id]
196
+ end
197
+
198
+ end
199
+
200
+ end
@@ -0,0 +1,87 @@
1
+ require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/container_nodes'
3
+
4
+ module RubyXL
5
+
6
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_t-1.html
7
+ class Text < OOXMLObject
8
+ define_attribute(:_, :string, :accessor => :value)
9
+ define_attribute(:'xml:space', :string)
10
+ define_element_name 't'
11
+
12
+ def before_write_xml
13
+ self.xml_space = (value && (/^\s+/.match(value) || /\s+$/.match(value))) ? 'preserve' : nil
14
+ true
15
+ end
16
+
17
+ def to_s
18
+ value.to_s
19
+ end
20
+ end
21
+
22
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_rPr-1.html
23
+ class RunProperties < OOXMLObject
24
+ define_child_node(RubyXL::StringValue, :node_name => :rFont)
25
+ define_child_node(RubyXL::IntegerValue, :node_name => :charset)
26
+ define_child_node(RubyXL::IntegerValue, :node_name => :family)
27
+ define_child_node(RubyXL::BooleanValue, :node_name => :b)
28
+ define_child_node(RubyXL::BooleanValue, :node_name => :i)
29
+ define_child_node(RubyXL::BooleanValue, :node_name => :strike)
30
+ define_child_node(RubyXL::BooleanValue, :node_name => :outline)
31
+ define_child_node(RubyXL::BooleanValue, :node_name => :shadow)
32
+ define_child_node(RubyXL::BooleanValue, :node_name => :condense)
33
+ define_child_node(RubyXL::BooleanValue, :node_name => :extend)
34
+ define_child_node(RubyXL::Color)
35
+ define_child_node(RubyXL::FloatValue, :node_name => :sz)
36
+ define_child_node(RubyXL::BooleanValue, :node_name => :u)
37
+ define_child_node(RubyXL::StringValue, :node_name => :vertAlign)
38
+ define_child_node(RubyXL::StringValue, :node_name => :scheme)
39
+ define_element_name 'rPr'
40
+ end
41
+
42
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_r-2.html
43
+ class RichTextRun < OOXMLObject
44
+ define_child_node(RubyXL::RunProperties)
45
+ define_child_node(RubyXL::Text)
46
+ define_element_name 'r'
47
+
48
+ def to_s
49
+ t.to_s
50
+ end
51
+
52
+ end
53
+
54
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_rPh-1.html
55
+ class PhoneticRun < OOXMLObject
56
+ define_attribute(:sb, :int, :required => true)
57
+ define_attribute(:eb, :int, :required => true)
58
+ define_child_node(RubyXL::Text)
59
+ define_element_name 'rPh'
60
+ end
61
+
62
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_phoneticPr-1.html
63
+ class PhoneticProperties < OOXMLObject
64
+ define_attribute(:fontId, :int, :required => true)
65
+ define_attribute(:type, :string, :default => 'fullwidthKatakana',
66
+ :values => %w{ halfwidthKatakana fullwidthKatakana Hiragana noConversion })
67
+ define_attribute(:alignment, :string, :default => 'left',
68
+ :values => %w{ noControl left center distributed })
69
+ define_element_name 'phoneticPr'
70
+ end
71
+
72
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_is-1.html
73
+ class RichText < OOXMLObject
74
+ define_child_node(RubyXL::Text)
75
+ define_child_node(RubyXL::RichTextRun, :collection => true)
76
+ define_child_node(RubyXL::PhoneticRun)
77
+ define_child_node(RubyXL::PhoneticProperties) # phoneticPr
78
+ define_element_name 'is'
79
+
80
+ def to_s
81
+ str = t.to_s
82
+ r && r.each { |rtr| str << rtr.to_s if rtr }
83
+ str
84
+ end
85
+ end
86
+
87
+ end
@@ -0,0 +1,64 @@
1
+ require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/extensions'
3
+
4
+ module RubyXL
5
+
6
+ # http://www.schemacentral.com/sc/ooxml/e-a_ext-1.html
7
+ class Extension < OOXMLObject
8
+ define_attribute(:uri, :string)
9
+ define_element_name 'a:ext'
10
+ attr_accessor :raw_xml
11
+
12
+ def self.parse(node)
13
+ obj = new
14
+ obj.raw_xml = node.to_xml
15
+ obj
16
+ end
17
+
18
+ def write_xml(xml, node_name_override = nil)
19
+ self.raw_xml
20
+ end
21
+
22
+ end
23
+
24
+ class AExtensionStorageArea < OOXMLObject
25
+ define_child_node(RubyXL::AExtension, :collection => true)
26
+ define_element_name 'a:extLst'
27
+ end
28
+
29
+ class ColorScheme < OOXMLObject
30
+ define_element_name 'a:clrScheme'
31
+ end
32
+
33
+ class FontScheme < OOXMLObject
34
+ define_element_name 'a:fontScheme'
35
+ end
36
+
37
+ class FormatScheme < OOXMLObject
38
+ define_element_name 'a:fmtScheme'
39
+ end
40
+
41
+ # http://www.schemacentral.com/sc/ooxml/e-a_themeElements-1.html
42
+ class ThemeElements < OOXMLObject
43
+ define_child_node(RubyXL::ColorScheme)
44
+ define_child_node(RubyXL::FontScheme)
45
+ define_child_node(RubyXL::FormatScheme)
46
+ define_child_node(RubyXL::AExtensionStorageArea)
47
+ define_element_name 'a:themeElements'
48
+ end
49
+
50
+ # http://www.schemacentral.com/sc/ooxml/e-a_theme.html
51
+ class Theme < OOXMLObject
52
+ define_attribute(:name, :string, :default => '')
53
+ define_child_node(RubyXL::ThemeElements)
54
+ define_child_node(RubyXL::ObjectDefaults)
55
+ #a:extraClrSchemeLst [0..1] Extra Color Scheme List
56
+ #a:custClrLst [0..1] Custom Color List
57
+ define_child_node(RubyXL::AExtensionStorageArea)
58
+
59
+ define_element_name 'a:theme'
60
+
61
+ set_namespaces('xmlns:a' => 'http://schemas.openxmlformats.org/drawingml/2006/main')
62
+ end
63
+
64
+ end
@@ -0,0 +1,233 @@
1
+ require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/extensions'
3
+
4
+ module RubyXL
5
+
6
+ # Eventually, the entire code for Workbook will be moved here.
7
+
8
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_fileVersion-1.html
9
+ class FileVersion < OOXMLObject
10
+ define_attribute(:appName, :string)
11
+ define_attribute(:lastEdited, :string)
12
+ define_attribute(:lowestEdited, :string)
13
+ define_attribute(:rupBuild, :string)
14
+ define_attribute(:codeName, :string)
15
+ define_element_name 'fileVersion'
16
+ end
17
+
18
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_fileSharing-1.html
19
+ class FileSharing < OOXMLObject
20
+ define_attribute(:readOnlyRecommended, :bool, :default => false)
21
+ define_attribute(:userName, :string)
22
+ define_attribute(:reservationPassword, :string)
23
+ define_element_name 'fileSharing'
24
+ end
25
+
26
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_workbookPr-1.html
27
+ class WorkbookProperties < OOXMLObject
28
+ define_attribute(:date1904, :bool, :default => false)
29
+ define_attribute(:showObjects, :string, :default => 'all', :values =>
30
+ %w{ all placeholders none } )
31
+ define_attribute(:showBorderUnselectedTables, :bool, :default => true)
32
+ define_attribute(:filterPrivacy, :bool, :default => false)
33
+ define_attribute(:promptedSolutions, :bool, :default => false)
34
+ define_attribute(:showInkAnnotation, :bool, :default => true)
35
+ define_attribute(:backupFile, :bool, :default => false)
36
+ define_attribute(:saveExternalLinkValues, :bool, :default => true)
37
+ define_attribute(:updateLinks, :string, :default => 'userSet', :values =>
38
+ %w{ userSet never always } )
39
+ define_attribute(:hidePivotFieldList, :bool, :default => false)
40
+ define_attribute(:showPivotChartFilter, :bool, :default => false)
41
+ define_attribute(:allowRefreshQuery, :bool, :default => false)
42
+ define_attribute(:publishItems, :bool, :default => false)
43
+ define_attribute(:checkCompatibility, :bool, :default => false)
44
+ define_attribute(:autoCompressPictures, :bool, :default => true)
45
+ define_attribute(:refreshAllConnections, :bool, :default => false)
46
+ define_attribute(:defaultThemeVersion, :int)
47
+ define_attribute(:codeName, :string)
48
+ define_element_name 'workbookPr'
49
+ end
50
+
51
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_workbookProtection-1.html
52
+ class WorkbookProtection < OOXMLObject
53
+ define_attribute(:workbookPassword, :string)
54
+ define_attribute(:revisionsPassword, :string)
55
+ define_attribute(:lockStructure, :bool, :default => false)
56
+ define_attribute(:lockWindows, :bool, :default => false)
57
+ define_attribute(:lockRevision, :bool, :default => false)
58
+ define_element_name 'workbookProtection'
59
+ end
60
+
61
+
62
+ class WorkbookView < OOXMLObject
63
+ define_attribute(:visibility, :string, :default => 'visible', :values =>
64
+ %w{ visible hidden veryHidden } )
65
+ define_attribute(:minimized, :bool, :default => false)
66
+ define_attribute(:showHorizontalScroll, :bool, :default => true)
67
+ define_attribute(:showVerticalScroll, :bool, :default => true)
68
+ define_attribute(:showSheetTabs, :bool, :default => true)
69
+ define_attribute(:xWindow, :int)
70
+ define_attribute(:yWindow, :int)
71
+ define_attribute(:windowWidth, :int)
72
+ define_attribute(:windowHeight, :int)
73
+ define_attribute(:tabRatio, :int, :default => 600)
74
+ define_attribute(:firstSheet, :int, :default => 0)
75
+ define_attribute(:activeTab, :int, :default => 0)
76
+ define_attribute(:autoFilterDateGrouping, :bool, :default => true)
77
+ define_child_node(RubyXL::ExtensionStorageArea)
78
+ define_element_name 'workbookView'
79
+ end
80
+
81
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_bookViews-1.html
82
+ class WorkbookViews < OOXMLObject
83
+ define_child_node(RubyXL::WorkbookView, :collection => true)
84
+ define_element_name 'bookViews'
85
+ end
86
+
87
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_sheet-1.html
88
+ class Sheet < OOXMLObject
89
+ define_attribute(:name, :string, :required => true)
90
+ define_attribute(:sheetId, :int, :required => true)
91
+ define_attribute(:state, :string, :default => 'visible', :values =>
92
+ %w{ visible hidden veryHidden } )
93
+ define_attribute(:'r:id', :string, :required => true)
94
+ define_element_name 'sheet'
95
+ end
96
+
97
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_sheets-1.html
98
+ class Sheets < OOXMLObject
99
+ define_child_node(RubyXL::Sheet, :collection => true, :accessor => :sheets)
100
+ define_element_name 'sheets'
101
+ end
102
+
103
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_externalReference-1.html
104
+ class ExternalReference < OOXMLObject
105
+ define_attribute(:'r:id', :string, :required => true)
106
+ define_element_name 'externalReference'
107
+ end
108
+
109
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_externalReferences-1.html
110
+ class ExternalReferences < OOXMLObject
111
+ define_child_node(RubyXL::ExternalReference, :collection => true, :accessor => :ext_refs)
112
+ define_element_name 'externalReferences'
113
+ end
114
+
115
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_definedName-2.html
116
+ class DefinedName < OOXMLObject
117
+ define_attribute(:name, :string, :required => true)
118
+ define_attribute(:comment, :string)
119
+ define_attribute(:customMenu, :string)
120
+ define_attribute(:description, :string)
121
+ define_attribute(:help, :string)
122
+ define_attribute(:description, :string)
123
+ define_attribute(:localSheetId, :string)
124
+
125
+ define_attribute(:hidden, :bool, :default => false)
126
+ define_attribute(:function, :bool, :default => false)
127
+ define_attribute(:vbProcedure, :bool, :default => false)
128
+ define_attribute(:xlm, :bool, :default => false)
129
+
130
+ define_attribute(:functionGroupId, :int)
131
+ define_attribute(:shortcutKey, :string)
132
+ define_attribute(:publishToServer, :bool, :default => false)
133
+ define_attribute(:workbookParameter, :bool, :default => false)
134
+
135
+ define_attribute(:_, :string, :accessor => :reference)
136
+ define_element_name 'definedName'
137
+ end
138
+
139
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_definedName-2.html
140
+ class DefinedNames < OOXMLObject
141
+ define_child_node(RubyXL::DefinedName, :collection => true, :accessor => :defined_names)
142
+ define_element_name 'definedNames'
143
+ end
144
+
145
+ class CalculationProperties < OOXMLObject
146
+ define_attribute(:calcId, :int)
147
+ define_attribute(:calcMode, :string, :default => 'auto', :values =>
148
+ %w{ manual auto autoNoTable } )
149
+ define_attribute(:fullCalcOnLoad, :bool, :default => false)
150
+ define_attribute(:refMode, :string, :default => 'A1', :values =>
151
+ %w{ A1 R1C1 } )
152
+ define_attribute(:iterate, :bool, :default => false)
153
+ define_attribute(:iterateCount, :int, :default => 100)
154
+ define_attribute(:iterateDelta, :float, :default => 0.001)
155
+ define_attribute(:fullPrecision, :bool, :default => true)
156
+ define_attribute(:calcCompleted, :bool, :default => true)
157
+ define_attribute(:calcOnSave, :bool, :default => true)
158
+ define_attribute(:concurrentCalc, :bool, :default => true)
159
+ define_attribute(:concurrentManualCount, :int)
160
+ define_attribute(:forceFullCalc, :bool)
161
+ define_element_name 'calcPr'
162
+ end
163
+
164
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_workbook.html
165
+ class Workbook < OOXMLObject
166
+ define_child_node(RubyXL::FileVersion)
167
+ define_child_node(RubyXL::FileSharing)
168
+ define_child_node(RubyXL::WorkbookProperties, :accessor => :workbook_properties)
169
+ define_child_node(RubyXL::WorkbookProtection)
170
+ define_child_node(RubyXL::WorkbookViews)
171
+ define_child_node(RubyXL::Sheets, :accessor => :worksheet_container)
172
+ # ssml:functionGroups [0..1] Function Groups
173
+ define_child_node(RubyXL::ExternalReferences, :accessor => :ext_ref_container)
174
+ define_child_node(RubyXL::DefinedNames, :accessor => :defined_name_container)
175
+ define_child_node(RubyXL::CalculationProperties)
176
+ # ssml:oleSize [0..1] OLE Size
177
+ # ssml:customWorkbookViews [0..1] Custom Workbook Views
178
+ # ssml:pivotCaches [0..1] PivotCaches
179
+ # ssml:smartTagPr [0..1] Smart Tag Properties
180
+ # ssml:smartTagTypes [0..1] Smart Tag Types
181
+ # ssml:webPublishing [0..1] Web Publishing Properties
182
+ # ssml:fileRecoveryPr [0..*] File Recovery Properties
183
+ # ssml:webPublishObjects [0..1] Web Publish Objects
184
+ define_child_node(RubyXL::ExtensionStorageArea)
185
+ define_child_node(RubyXL::AlternateContent)
186
+
187
+ define_element_name 'workbook'
188
+ set_namespaces('xmlns' => 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
189
+ 'xmlns:r' => 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',
190
+ 'xmlns:mc' => 'http://schemas.openxmlformats.org/markup-compatibility/2006',
191
+ 'xmlns:x15' => 'http://schemas.microsoft.com/office/spreadsheetml/2010/11/main')
192
+
193
+ include LegacyWorkbook
194
+
195
+ def date1904
196
+ workbook_properties && workbook_properties.date1904
197
+ end
198
+
199
+ def date1904=(v)
200
+ self.workbook_properties ||= RubyXL::WorkbookProperties.new
201
+ workbook_properties.date1904 = v
202
+ end
203
+
204
+ def company
205
+ self.document_properties.company && self.document_properties.company.value
206
+ end
207
+
208
+ def company=(v)
209
+ self.document_properties.company ||= StringNode.new
210
+ self.document_properties.company.value = v
211
+ end
212
+
213
+ def application
214
+ self.document_properties.application && self.document_properties.application.value
215
+ end
216
+
217
+ def application=(v)
218
+ self.document_properties.application ||= StringNode.new
219
+ self.document_properties.application.value = v
220
+ end
221
+
222
+ def appversion
223
+ self.document_properties.app_version && self.document_properties.app_version.value
224
+ end
225
+
226
+ def appversion=(v)
227
+ self.document_properties.app_version ||= StringNode.new
228
+ self.document_properties.app_version.value = v
229
+ end
230
+
231
+ end
232
+
233
+ end