rubyXL 2.1.1 → 2.2.0

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 (234) hide show
  1. data/VERSION +1 -1
  2. data/lib/rubyXL.rb +1 -0
  3. data/lib/rubyXL/objects/border.rb +3 -4
  4. data/lib/rubyXL/objects/calculation_chain.rb +1 -1
  5. data/lib/rubyXL/objects/cell_style.rb +3 -4
  6. data/lib/rubyXL/objects/chartsheet.rb +78 -0
  7. data/lib/rubyXL/objects/container_nodes.rb +2 -3
  8. data/lib/rubyXL/objects/data_validation.rb +5 -10
  9. data/lib/rubyXL/objects/document_properties.rb +1 -1
  10. data/lib/rubyXL/objects/fill.rb +3 -6
  11. data/lib/rubyXL/objects/filters.rb +120 -0
  12. data/lib/rubyXL/objects/formula.rb +2 -2
  13. data/lib/rubyXL/objects/ooxml_object.rb +116 -56
  14. data/lib/rubyXL/objects/relationships.rb +5 -1
  15. data/lib/rubyXL/objects/shared_strings.rb +1 -1
  16. data/lib/rubyXL/objects/sheet_common.rb +50 -0
  17. data/lib/rubyXL/objects/sheet_data.rb +6 -1
  18. data/lib/rubyXL/objects/simple_types.rb +78 -0
  19. data/lib/rubyXL/objects/stylesheet.rb +15 -3
  20. data/lib/rubyXL/objects/text.rb +4 -5
  21. data/lib/rubyXL/objects/workbook.rb +151 -26
  22. data/lib/rubyXL/objects/worksheet.rb +329 -107
  23. data/lib/rubyXL/parser.rb +12 -11
  24. data/lib/rubyXL/workbook.rb +3 -2
  25. data/rdoc/README_rdoc.html +404 -0
  26. data/rdoc/RubyXL.html +337 -0
  27. data/rdoc/RubyXL/AExtensionStorageArea.html +105 -0
  28. data/rdoc/RubyXL/Alignment.html +108 -0
  29. data/rdoc/RubyXL/AlternateContent.html +105 -0
  30. data/rdoc/RubyXL/AutoFilter.html +105 -0
  31. data/rdoc/RubyXL/AutoFilterColumn.html +105 -0
  32. data/rdoc/RubyXL/BooleanNode.html +105 -0
  33. data/rdoc/RubyXL/BooleanValue.html +105 -0
  34. data/rdoc/RubyXL/Border.html +105 -0
  35. data/rdoc/RubyXL/BorderContainer.html +105 -0
  36. data/rdoc/RubyXL/BorderEdge.html +156 -0
  37. data/rdoc/RubyXL/Break.html +105 -0
  38. data/rdoc/RubyXL/BreakList.html +105 -0
  39. data/rdoc/RubyXL/CalculationChain.html +159 -0
  40. data/rdoc/RubyXL/CalculationChainCell.html +108 -0
  41. data/rdoc/RubyXL/CalculationProperties.html +105 -0
  42. data/rdoc/RubyXL/Cell.html +428 -0
  43. data/rdoc/RubyXL/CellSmartTag.html +105 -0
  44. data/rdoc/RubyXL/CellSmartTagContainer.html +105 -0
  45. data/rdoc/RubyXL/CellSmartTagProperty.html +105 -0
  46. data/rdoc/RubyXL/CellStyle.html +108 -0
  47. data/rdoc/RubyXL/CellStyleContainer.html +105 -0
  48. data/rdoc/RubyXL/CellStyleXFContainer.html +105 -0
  49. data/rdoc/RubyXL/CellValue.html +108 -0
  50. data/rdoc/RubyXL/CellWatch.html +105 -0
  51. data/rdoc/RubyXL/CellWatchContainer.html +105 -0
  52. data/rdoc/RubyXL/CellXFContainer.html +105 -0
  53. data/rdoc/RubyXL/Chartsheet.html +105 -0
  54. data/rdoc/RubyXL/ChartsheetPageSetup.html +105 -0
  55. data/rdoc/RubyXL/ChartsheetProperties.html +108 -0
  56. data/rdoc/RubyXL/ChartsheetProtection.html +108 -0
  57. data/rdoc/RubyXL/ChartsheetView.html +105 -0
  58. data/rdoc/RubyXL/ChartsheetViewContainer.html +105 -0
  59. data/rdoc/RubyXL/Color.html +163 -0
  60. data/rdoc/RubyXL/ColorFilter.html +105 -0
  61. data/rdoc/RubyXL/ColorScale.html +105 -0
  62. data/rdoc/RubyXL/ColorScheme.html +105 -0
  63. data/rdoc/RubyXL/ColorSet.html +105 -0
  64. data/rdoc/RubyXL/Colors.html +105 -0
  65. data/rdoc/RubyXL/ColumnRange.html +233 -0
  66. data/rdoc/RubyXL/ColumnRanges.html +275 -0
  67. data/rdoc/RubyXL/ConditionalFormatValue.html +105 -0
  68. data/rdoc/RubyXL/ConditionalFormatting.html +105 -0
  69. data/rdoc/RubyXL/ConditionalFormattingRule.html +105 -0
  70. data/rdoc/RubyXL/CustomFilter.html +105 -0
  71. data/rdoc/RubyXL/CustomFilterContainer.html +105 -0
  72. data/rdoc/RubyXL/CustomProperty.html +105 -0
  73. data/rdoc/RubyXL/CustomPropertyContainer.html +105 -0
  74. data/rdoc/RubyXL/CustomSheetView.html +105 -0
  75. data/rdoc/RubyXL/CustomSheetViews.html +105 -0
  76. data/rdoc/RubyXL/CustomWorkbookView.html +105 -0
  77. data/rdoc/RubyXL/CustomWorkbookViewContainer.html +105 -0
  78. data/rdoc/RubyXL/DXF.html +105 -0
  79. data/rdoc/RubyXL/DXFs.html +105 -0
  80. data/rdoc/RubyXL/DataBar.html +105 -0
  81. data/rdoc/RubyXL/DataConsolidate.html +105 -0
  82. data/rdoc/RubyXL/DataConsolidationReference.html +105 -0
  83. data/rdoc/RubyXL/DataConsolidationReferences.html +105 -0
  84. data/rdoc/RubyXL/DataValidation.html +108 -0
  85. data/rdoc/RubyXL/DataValidations.html +105 -0
  86. data/rdoc/RubyXL/DateGroupItem.html +108 -0
  87. data/rdoc/RubyXL/DefinedName.html +105 -0
  88. data/rdoc/RubyXL/DefinedNames.html +105 -0
  89. data/rdoc/RubyXL/DocumentProperties.html +271 -0
  90. data/rdoc/RubyXL/DynamicFilter.html +105 -0
  91. data/rdoc/RubyXL/EmbeddedControl.html +105 -0
  92. data/rdoc/RubyXL/EmbeddedControlContainer.html +105 -0
  93. data/rdoc/RubyXL/Extension.html +228 -0
  94. data/rdoc/RubyXL/ExtensionStorageArea.html +108 -0
  95. data/rdoc/RubyXL/ExternalReference.html +105 -0
  96. data/rdoc/RubyXL/ExternalReferences.html +105 -0
  97. data/rdoc/RubyXL/FieldItem.html +105 -0
  98. data/rdoc/RubyXL/FileRecoveryProperties.html +105 -0
  99. data/rdoc/RubyXL/FileSharing.html +108 -0
  100. data/rdoc/RubyXL/FileVersion.html +108 -0
  101. data/rdoc/RubyXL/Fill.html +105 -0
  102. data/rdoc/RubyXL/FillContainer.html +105 -0
  103. data/rdoc/RubyXL/FilterContainer.html +105 -0
  104. data/rdoc/RubyXL/FloatNode.html +105 -0
  105. data/rdoc/RubyXL/FloatValue.html +105 -0
  106. data/rdoc/RubyXL/Font.html +655 -0
  107. data/rdoc/RubyXL/FontContainer.html +105 -0
  108. data/rdoc/RubyXL/FontScheme.html +105 -0
  109. data/rdoc/RubyXL/FormatScheme.html +105 -0
  110. data/rdoc/RubyXL/Formula.html +108 -0
  111. data/rdoc/RubyXL/FunctionGroup.html +105 -0
  112. data/rdoc/RubyXL/FunctionGroupContainer.html +105 -0
  113. data/rdoc/RubyXL/GenericStorage.html +344 -0
  114. data/rdoc/RubyXL/GradientFill.html +105 -0
  115. data/rdoc/RubyXL/HeaderFooterSettings.html +105 -0
  116. data/rdoc/RubyXL/Hyperlink.html +105 -0
  117. data/rdoc/RubyXL/HyperlinkContainer.html +105 -0
  118. data/rdoc/RubyXL/IconFilter.html +105 -0
  119. data/rdoc/RubyXL/IconSet.html +105 -0
  120. data/rdoc/RubyXL/IgnoredError.html +105 -0
  121. data/rdoc/RubyXL/IgnoredErrorContainer.html +105 -0
  122. data/rdoc/RubyXL/IndexedColorContainer.html +105 -0
  123. data/rdoc/RubyXL/InputCells.html +105 -0
  124. data/rdoc/RubyXL/IntegerNode.html +105 -0
  125. data/rdoc/RubyXL/IntegerValue.html +105 -0
  126. data/rdoc/RubyXL/LegacyCell.html +1498 -0
  127. data/rdoc/RubyXL/LegacyWorkbook.html +1283 -0
  128. data/rdoc/RubyXL/LegacyWorksheet.html +3291 -0
  129. data/rdoc/RubyXL/MRUColorContainer.html +105 -0
  130. data/rdoc/RubyXL/MergedCell.html +105 -0
  131. data/rdoc/RubyXL/MergedCells.html +105 -0
  132. data/rdoc/RubyXL/NumFmt.html +105 -0
  133. data/rdoc/RubyXL/NumberFormat.html +160 -0
  134. data/rdoc/RubyXL/NumberFormatContainer.html +173 -0
  135. data/rdoc/RubyXL/OLEObject.html +105 -0
  136. data/rdoc/RubyXL/OLEObjects.html +105 -0
  137. data/rdoc/RubyXL/OLESize.html +105 -0
  138. data/rdoc/RubyXL/OOXMLObject.html +862 -0
  139. data/rdoc/RubyXL/OOXMLTopLevelObject.html +105 -0
  140. data/rdoc/RubyXL/OutlineProperties.html +108 -0
  141. data/rdoc/RubyXL/PageMargins.html +105 -0
  142. data/rdoc/RubyXL/PageSetup.html +105 -0
  143. data/rdoc/RubyXL/PageSetupProperties.html +108 -0
  144. data/rdoc/RubyXL/Pane.html +105 -0
  145. data/rdoc/RubyXL/Parser.html +348 -0
  146. data/rdoc/RubyXL/PatternFill.html +105 -0
  147. data/rdoc/RubyXL/PhoneticProperties.html +105 -0
  148. data/rdoc/RubyXL/PhoneticRun.html +105 -0
  149. data/rdoc/RubyXL/PivotArea.html +105 -0
  150. data/rdoc/RubyXL/PivotCache.html +105 -0
  151. data/rdoc/RubyXL/PivotCaches.html +105 -0
  152. data/rdoc/RubyXL/PivotReference.html +105 -0
  153. data/rdoc/RubyXL/PivotReferenceContainer.html +105 -0
  154. data/rdoc/RubyXL/PivotTableSelection.html +105 -0
  155. data/rdoc/RubyXL/PrintOptions.html +105 -0
  156. data/rdoc/RubyXL/ProtectedRange.html +105 -0
  157. data/rdoc/RubyXL/ProtectedRanges.html +105 -0
  158. data/rdoc/RubyXL/Protection.html +105 -0
  159. data/rdoc/RubyXL/RID.html +105 -0
  160. data/rdoc/RubyXL/RawOOXML.html +225 -0
  161. data/rdoc/RubyXL/Reference.html +642 -0
  162. data/rdoc/RubyXL/Relationship.html +105 -0
  163. data/rdoc/RubyXL/RichText.html +105 -0
  164. data/rdoc/RubyXL/RichTextRun.html +105 -0
  165. data/rdoc/RubyXL/Row.html +105 -0
  166. data/rdoc/RubyXL/RunProperties.html +108 -0
  167. data/rdoc/RubyXL/Scenario.html +105 -0
  168. data/rdoc/RubyXL/ScenarioContainer.html +105 -0
  169. data/rdoc/RubyXL/Selection.html +105 -0
  170. data/rdoc/RubyXL/SharedStringsTable.html +397 -0
  171. data/rdoc/RubyXL/Sheet.html +105 -0
  172. data/rdoc/RubyXL/SheetCalculationProperties.html +105 -0
  173. data/rdoc/RubyXL/SheetData.html +105 -0
  174. data/rdoc/RubyXL/Sheets.html +105 -0
  175. data/rdoc/RubyXL/SmartTagContainer.html +105 -0
  176. data/rdoc/RubyXL/SmartTagProperties.html +105 -0
  177. data/rdoc/RubyXL/SmartTagType.html +105 -0
  178. data/rdoc/RubyXL/SmartTagTypeContainer.html +105 -0
  179. data/rdoc/RubyXL/SortCondition.html +105 -0
  180. data/rdoc/RubyXL/SortState.html +105 -0
  181. data/rdoc/RubyXL/Sqref.html +199 -0
  182. data/rdoc/RubyXL/Stop.html +108 -0
  183. data/rdoc/RubyXL/StringNode.html +105 -0
  184. data/rdoc/RubyXL/StringValue.html +105 -0
  185. data/rdoc/RubyXL/Stylesheet.html +105 -0
  186. data/rdoc/RubyXL/TableParts.html +105 -0
  187. data/rdoc/RubyXL/TableStyle.html +105 -0
  188. data/rdoc/RubyXL/TableStyles.html +105 -0
  189. data/rdoc/RubyXL/Text.html +195 -0
  190. data/rdoc/RubyXL/Theme.html +105 -0
  191. data/rdoc/RubyXL/ThemeElements.html +105 -0
  192. data/rdoc/RubyXL/Top10.html +105 -0
  193. data/rdoc/RubyXL/Variant.html +108 -0
  194. data/rdoc/RubyXL/Vector.html +105 -0
  195. data/rdoc/RubyXL/VectorValue.html +105 -0
  196. data/rdoc/RubyXL/WebPublishObject.html +105 -0
  197. data/rdoc/RubyXL/WebPublishObjectContainer.html +105 -0
  198. data/rdoc/RubyXL/WebPublishingItem.html +108 -0
  199. data/rdoc/RubyXL/WebPublishingItemContainer.html +105 -0
  200. data/rdoc/RubyXL/WebPublishingProperties.html +105 -0
  201. data/rdoc/RubyXL/Workbook.html +105 -0
  202. data/rdoc/RubyXL/WorkbookProperties.html +108 -0
  203. data/rdoc/RubyXL/WorkbookProtection.html +105 -0
  204. data/rdoc/RubyXL/WorkbookRelationships.html +316 -0
  205. data/rdoc/RubyXL/WorkbookView.html +105 -0
  206. data/rdoc/RubyXL/WorkbookViews.html +105 -0
  207. data/rdoc/RubyXL/Worksheet.html +105 -0
  208. data/rdoc/RubyXL/WorksheetDimensions.html +105 -0
  209. data/rdoc/RubyXL/WorksheetFormatProperties.html +105 -0
  210. data/rdoc/RubyXL/WorksheetProperties.html +108 -0
  211. data/rdoc/RubyXL/WorksheetProtection.html +105 -0
  212. data/rdoc/RubyXL/WorksheetView.html +105 -0
  213. data/rdoc/RubyXL/WorksheetViews.html +105 -0
  214. data/rdoc/RubyXL/Writer.html +98 -0
  215. data/rdoc/RubyXL/Writer/ContentTypesWriter.html +289 -0
  216. data/rdoc/RubyXL/Writer/CoreWriter.html +210 -0
  217. data/rdoc/RubyXL/Writer/GenericWriter.html +348 -0
  218. data/rdoc/RubyXL/Writer/RootRelsWriter.html +193 -0
  219. data/rdoc/RubyXL/Writer/StylesWriter.html +191 -0
  220. data/rdoc/RubyXL/Writer/ThemeWriter.html +511 -0
  221. data/rdoc/RubyXL/Writer/WorkbookWriter.html +249 -0
  222. data/rdoc/RubyXL/Writer/WorksheetWriter.html +236 -0
  223. data/rdoc/RubyXL/XF.html +105 -0
  224. data/rdoc/created.rid +24 -21
  225. data/rdoc/index.html +216 -0
  226. data/rdoc/js/search_index.js +1 -1
  227. data/rdoc/table_of_contents.html +1496 -0
  228. data/rubyXL.gemspec +211 -4
  229. data/spec/lib/parser_spec.rb +18 -6
  230. data/test/input/.gitkeep +0 -0
  231. data/test/output/.gitkeep +0 -0
  232. data/test/test_parse_write.rb +15 -0
  233. metadata +211 -4
  234. data/lib/rubyXL/objects/sheet_view.rb +0 -71
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.1
1
+ 2.2.0
data/lib/rubyXL.rb CHANGED
@@ -6,6 +6,7 @@ require 'rubyXL/objects/column_range'
6
6
  require 'rubyXL/objects/stylesheet'
7
7
  require 'rubyXL/objects/shared_strings'
8
8
  require 'rubyXL/objects/worksheet'
9
+ require 'rubyXL/objects/chartsheet'
9
10
  require 'rubyXL/objects/calculation_chain'
10
11
  require 'rubyXL/objects/workbook'
11
12
  require 'rubyXL/objects/document_properties'
@@ -1,12 +1,11 @@
1
1
  require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/simple_types'
2
3
 
3
4
  module RubyXL
4
5
 
5
6
  class BorderEdge < OOXMLObject
6
- define_attribute(:style, :string)
7
- define_child_node(RubyXL::Color, :default => 'none', :values =>
8
- %w{ none thin medium dashed dotted thick double hair
9
- mediumDashed dashDot mediumDashDot dashDotDot slantDashDot } )
7
+ define_attribute(:style, RubyXL::ST_BorderStyle, :default => 'none')
8
+ define_child_node(RubyXL::Color)
10
9
 
11
10
  def ==(other)
12
11
  style == other.style
@@ -14,7 +14,7 @@ module RubyXL
14
14
  end
15
15
 
16
16
  # http://www.schemacentral.com/sc/ooxml/e-ssml_calcChain.html
17
- class CalculationChain < OOXMLObject
17
+ class CalculationChain < OOXMLTopLevelObject
18
18
  define_child_node(RubyXL::CalculationChainCell, :collection => true, :accessor => :cells)
19
19
  define_child_node(RubyXL::ExtensionStorageArea)
20
20
 
@@ -1,4 +1,5 @@
1
1
  require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/simple_types'
2
3
 
3
4
  module RubyXL
4
5
 
@@ -15,10 +16,8 @@ module RubyXL
15
16
 
16
17
  # http://www.schemacentral.com/sc/ooxml/e-ssml_alignment-1.html
17
18
  class Alignment < OOXMLObject
18
- define_attribute(:horizontal, :string,
19
- :values => %w{general left center right fill justify centerContinuous distributed})
20
- define_attribute(:vertical, :string,
21
- :values => %w{top center bottom justify distributed})
19
+ define_attribute(:horizontal, RubyXL::ST_HorizontalAlignment)
20
+ define_attribute(:vertical, RubyXL::ST_VerticalAlignment)
22
21
  define_attribute(:textRotation, :int)
23
22
  define_attribute(:wrapText, :bool)
24
23
  define_attribute(:indent, :int)
@@ -0,0 +1,78 @@
1
+ require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/simple_types'
3
+ require 'rubyXL/objects/extensions'
4
+ require 'rubyXL/objects/relationships'
5
+ require 'rubyXL/objects/sheet_common'
6
+
7
+ module RubyXL
8
+
9
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_sheetProtection-4.html
10
+ class ChartsheetProtection < OOXMLObject
11
+ define_attribute(:password, :string)
12
+ define_attribute(:content, :bool, :default => false)
13
+ define_attribute(:objects, :bool, :default => false)
14
+ define_element_name 'sheetProtection'
15
+ end
16
+
17
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_sheetPr-4.html
18
+ class ChartsheetProperties < OOXMLObject
19
+ define_attribute(:published, :bool, :default => true)
20
+ define_attribute(:codeName, :string)
21
+ define_child_node(RubyXL::Color, :node_name => :tabColor)
22
+ define_element_name 'sheetPr'
23
+ end
24
+
25
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_pageSetup-5.html
26
+ class ChartsheetPageSetup < OOXMLObject
27
+ define_attribute(:paperSize, :int, :default => 1)
28
+ define_attribute(:firstPageNumber, :int, :default => 1)
29
+ define_attribute(:orientation, RubyXL::ST_Orientation, :default => 'default')
30
+ define_attribute(:usePrinterDefaults, :bool, :default => true)
31
+ define_attribute(:blackAndWhite, :bool, :default => false)
32
+ define_attribute(:draft, :bool, :default => false)
33
+ define_attribute(:useFirstPageNumber, :bool, :default => false)
34
+ define_attribute(:horizontalDpi, :int, :default => 600)
35
+ define_attribute(:verticalDpi, :int, :default => 600)
36
+ define_attribute(:copies, :int, :default => 1)
37
+ define_attribute(:'r:id', :string)
38
+ define_element_name 'pageSetup'
39
+ end
40
+
41
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_sheetView-2.html
42
+ class ChartsheetView < OOXMLObject
43
+ define_attribute(:tabSelected, :bool, :default => false)
44
+ define_attribute(:zoomScale, :int, :default => 100)
45
+ define_attribute(:workbookViewId, :int, :required => true, :default => 0 )
46
+ define_attribute(:zoomToFit, :bool, :default => false)
47
+ define_child_node(RubyXL::ExtensionStorageArea)
48
+ define_element_name 'sheetView'
49
+ end
50
+
51
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_sheetViews-4.html
52
+ class ChartsheetViewContainer < OOXMLObject
53
+ define_child_node(RubyXL::ChartsheetView, :collection => true, :accessor => :sheet_views)
54
+ define_child_node(RubyXL::ExtensionStorageArea)
55
+ define_element_name 'sheetViews'
56
+ end
57
+
58
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_chartsheet.html
59
+ class Chartsheet < OOXMLTopLevelObject
60
+ define_child_node(RubyXL::ChartsheetProperties)
61
+ define_child_node(RubyXL::ChartsheetViewContainer, :accessor => :sheet_view_container)
62
+ define_child_node(RubyXL::ChartsheetProtection)
63
+ define_child_node(RubyXL::CustomSheetViews, :accessor => :custom_sheet_view_container)
64
+ define_child_node(RubyXL::PageMargins)
65
+ define_child_node(RubyXL::ChartsheetPageSetup)
66
+ define_child_node(RubyXL::HeaderFooterSettings)
67
+ define_child_node(RubyXL::RID, :node_name => :drawing)
68
+ define_child_node(RubyXL::RID, :node_name => :legacyDrawing)
69
+ define_child_node(RubyXL::RID, :node_name => :legacyDrawingHF)
70
+ define_child_node(RubyXL::RID, :node_name => :picture)
71
+ define_child_node(RubyXL::WebPublishingItemContainer, :accessor => :web_items_container)
72
+ define_child_node(RubyXL::ExtensionStorageArea)
73
+ define_element_name 'chartsheet'
74
+ set_namespaces('xmlns' => 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
75
+ 'xmlns:r' => 'http://schemas.openxmlformats.org/officeDocument/2006/relationships')
76
+ end
77
+
78
+ end
@@ -1,4 +1,5 @@
1
1
  require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/simple_types'
2
3
 
3
4
  module RubyXL
4
5
 
@@ -78,9 +79,7 @@ module RubyXL
78
79
 
79
80
  # http://www.schemacentral.com/sc/ooxml/e-docPropsVTypes_vector.html
80
81
  class Vector < OOXMLObject
81
- define_attribute(:baseType, :string, :required => true, :values =>
82
- %w{ variant i1 i2 i4 i8 ui1 ui2 ui4 ui8 r4 r8
83
- lpstr lpwstr bstr date filetime bool cy error clsid cf })
82
+ define_attribute(:baseType, RubyXL::ST_VectorBaseType, :required => true)
84
83
  define_attribute(:size, :int, :required => true)
85
84
  define_child_node(RubyXL::Variant, :collection => true, :node_name => 'vt:variant')
86
85
  define_child_node(RubyXL::IntegerNode, :collection => true, :node_name => 'vt:i1')
@@ -1,20 +1,15 @@
1
1
  require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/simple_types'
2
3
  require 'rubyXL/objects/formula'
3
4
 
4
5
  module RubyXL
5
6
 
6
7
  # http://www.schemacentral.com/sc/ooxml/e-ssml_dataValidation-1.html
7
8
  class DataValidation < OOXMLObject
8
- define_attribute(:type, :string, :default => 'none',
9
- :values => %w{ none whole decimal list date time textLength custom })
10
- define_attribute(:errorStyle, :string, :default => 'stop',
11
- :values => %w{ stop warning information })
12
- define_attribute(:imeMode, :string, :default => 'noControl',
13
- :values => %w{ noControl off on disabled hiragana fullKatakana halfKatakana
14
- fullAlpha halfAlpha fullHangul halfHangul })
15
- define_attribute(:operator, :string, :default => 'between',
16
- :values => %w{ between notBetween equal notEqual lessThan lessThanOrEqual
17
- greaterThan greaterThanOrEqual })
9
+ define_attribute(:type, RubyXL::ST_DataValidationType, :default => 'none')
10
+ define_attribute(:errorStyle, RubyXL::ST_DataValidationErrorStyle, :default => 'stop')
11
+ define_attribute(:imeMode, RubyXL::ST_DataValidationImeMode, :default => 'noControl')
12
+ define_attribute(:operator, RubyXL::ST_DataValidationOperator, :default => 'between')
18
13
  define_attribute(:allowBlank, :bool, :default => false)
19
14
  define_attribute(:showDropDown, :bool, :default => false)
20
15
  define_attribute(:showInputMessage, :bool, :default => false)
@@ -4,7 +4,7 @@ require 'rubyXL/objects/container_nodes'
4
4
  module RubyXL
5
5
 
6
6
  # http://www.schemacentral.com/sc/ooxml/e-extended-properties_Properties.html
7
- class DocumentProperties < OOXMLObject
7
+ class DocumentProperties < OOXMLTopLevelObject
8
8
  attr_accessor :workbook
9
9
 
10
10
  define_child_node(RubyXL::StringNode, :node_name => :Template)
@@ -1,4 +1,5 @@
1
1
  require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/simple_types'
2
3
 
3
4
  module RubyXL
4
5
 
@@ -11,11 +12,7 @@ module RubyXL
11
12
 
12
13
  # http://www.schemacentral.com/sc/ooxml/e-ssml_patternFill-1.html
13
14
  class PatternFill < OOXMLObject
14
- define_attribute(:patternType, :string, :values =>
15
- %w{ none solid mediumGray darkGray lightGray
16
- darkHorizontal darkVertical darkDown darkUp darkGrid darkTrellis
17
- lightHorizontal lightVertical lightDown lightUp lightGrid lightTrellis
18
- gray125 gray0625 })
15
+ define_attribute(:patternType, RubyXL::ST_PatternType)
19
16
  define_child_node(RubyXL::Color, :node_name => :fgColor )
20
17
  define_child_node(RubyXL::Color, :node_name => :bgColor )
21
18
  define_element_name 'patternFill'
@@ -23,7 +20,7 @@ module RubyXL
23
20
 
24
21
  # http://www.schemacentral.com/sc/ooxml/e-ssml_gradientFill-1.html
25
22
  class GradientFill < OOXMLObject
26
- define_attribute(:type, :string, :values => %w{ linear path }, :default => 'linear')
23
+ define_attribute(:type, RubyXL::ST_GradientType, :default => 'linear')
27
24
  define_attribute(:degree, :float, :default => 0)
28
25
  define_attribute(:left, :float, :default => 0)
29
26
  define_attribute(:right, :float, :default => 0)
@@ -0,0 +1,120 @@
1
+ require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/simple_types'
3
+ require 'rubyXL/objects/extensions'
4
+
5
+ module RubyXL
6
+
7
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_dateGroupItem-1.html
8
+ class DateGroupItem < OOXMLObject
9
+ define_attribute(:year, :int, :required => true)
10
+ define_attribute(:month, :int)
11
+ define_attribute(:day, :int)
12
+ define_attribute(:hour, :int)
13
+ define_attribute(:minute, :int)
14
+ define_attribute(:second, :int)
15
+ define_attribute(:dateTimeGrouping, RubyXL::ST_DateTimeGrouping)
16
+ define_element_name 'dateGroupItem'
17
+ end
18
+
19
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_filters-1.html
20
+ class FilterContainer < OOXMLObject
21
+ define_attribute(:blank, :bool, :default => false)
22
+ define_attribute(:calendarType, RubyXL::ST_CalendarType, :default => 'none')
23
+ define_child_node(RubyXL::StringValue, :node_name => :filter, :collection => true, :accessor => :filters)
24
+ define_child_node(RubyXL::DateGroupItem, :collection => true, :accessor => :date_group_items)
25
+ define_element_name 'filters'
26
+ end
27
+
28
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_top10-1.html
29
+ class Top10 < OOXMLObject
30
+ define_attribute(:top, :bool, :default => true)
31
+ define_attribute(:percent, :bool, :default => false)
32
+ define_attribute(:val, :float, :required => true)
33
+ define_attribute(:filterVal, :float)
34
+ define_element_name 'top10'
35
+ end
36
+
37
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_customFilter-1.html
38
+ class CustomFilter < OOXMLObject
39
+ define_attribute(:operator, RubyXL::ST_FilterOperator, :default => 'equal')
40
+ define_attribute(:val, :string)
41
+ define_element_name 'customFilter'
42
+ end
43
+
44
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_customFilters-1.html
45
+ class CustomFilterContainer < OOXMLObject
46
+ define_attribute(:and, :bool, :default => false)
47
+ define_child_node(RubyXL::CustomFilter, :collection => true, :accessor => :custom_filters)
48
+ define_element_name 'customFilters'
49
+ end
50
+
51
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_dynamicFilter-1.html
52
+ class DynamicFilter < OOXMLObject
53
+ define_attribute(:type, RubyXL::ST_DynamicFilterType, :required => true)
54
+ define_attribute(:val, :float)
55
+ define_attribute(:maxVal, :float)
56
+ define_element_name 'dynamicFilter'
57
+ end
58
+
59
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_colorFilter-1.html
60
+ class ColorFilter < OOXMLObject
61
+ define_attribute(:dxfId, :string)
62
+ define_attribute(:cellColor, :bool)
63
+ define_element_name 'colorFilter'
64
+ end
65
+
66
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_iconFilter-1.html
67
+ class IconFilter < OOXMLObject
68
+ define_attribute(:iconSet, RubyXL::ST_IconSetType)
69
+ define_attribute(:iconId, :int)
70
+ define_element_name 'iconFilter'
71
+ end
72
+
73
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_filterColumn-1.html
74
+ class AutoFilterColumn < OOXMLObject
75
+ define_attribute(:colId, :int, :required => true)
76
+ define_attribute(:hiddenButton, :bool, :default => false)
77
+ define_attribute(:showButton, :bool, :default => true)
78
+ define_child_node(RubyXL::FilterContainer)
79
+ define_child_node(RubyXL::Top10)
80
+ define_child_node(RubyXL::CustomFilterContainer, :accessor => :custom_filter_container)
81
+ define_child_node(RubyXL::DynamicFilter)
82
+ define_child_node(RubyXL::ColorFilter)
83
+ define_child_node(RubyXL::IconFilter)
84
+ define_child_node(RubyXL::ExtensionStorageArea)
85
+ define_element_name 'filterColumn'
86
+ end
87
+
88
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_sortCondition-1.html
89
+ class SortCondition < OOXMLObject
90
+ define_attribute(:descending, :bool, :default => false)
91
+ define_attribute(:sortBy, RubyXL::ST_SortBy, :default => 'value')
92
+ define_attribute(:ref, :ref, :required => true)
93
+ define_attribute(:customList, :string)
94
+ define_attribute(:dxfId, :int)
95
+ define_attribute(:iconSet, RubyXL::ST_IconSetType, :required => true, :default => '3Arrows')
96
+ define_attribute(:iconId, :int)
97
+ define_element_name 'sortCondition'
98
+ end
99
+
100
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_sortState-2.html
101
+ class SortState < OOXMLObject
102
+ define_attribute(:columnSort, :bool, :default => false)
103
+ define_attribute(:caseSensitive, :bool, :default => false)
104
+ define_attribute(:sortMethod, RubyXL::ST_SortMethod, :default => 'none')
105
+ define_attribute(:ref, :ref, :required => true)
106
+ define_child_node(RubyXL::SortCondition, :colection => true)
107
+ define_child_node(RubyXL::ExtensionStorageArea)
108
+ define_element_name 'sortState'
109
+ end
110
+
111
+ # http://www.schemacentral.com/sc/ooxml/e-ssml_autoFilter-2.html
112
+ class AutoFilter < OOXMLObject
113
+ define_attribute(:ref, :ref)
114
+ define_child_node(RubyXL::AutoFilterColumn)
115
+ define_child_node(RubyXL::SortState)
116
+ define_child_node(RubyXL::ExtensionStorageArea)
117
+ define_element_name 'autoFilter'
118
+ end
119
+
120
+ end
@@ -1,12 +1,12 @@
1
1
  require 'rubyXL/objects/ooxml_object'
2
+ require 'rubyXL/objects/simple_types'
2
3
 
3
4
  module RubyXL
4
5
 
5
6
  # http://www.schemacentral.com/sc/ooxml/e-ssml_f-1.html
6
7
  class Formula < OOXMLObject
7
8
  define_attribute(:_, :string, :accessor => :expression)
8
- define_attribute(:t, :string, :default => 'normal', :values =>
9
- %w{ normal array dataTable shared })
9
+ define_attribute(:t, RubyXL::ST_CellFormulaType, :default => 'normal')
10
10
  define_attribute(:aca, :bool, :default => false)
11
11
  define_attribute(:ref, :ref)
12
12
  define_attribute(:dt2D, :bool, :default => false)
@@ -1,12 +1,9 @@
1
- require 'pp'
2
-
3
1
  module RubyXL
4
2
 
5
3
  # Parent class for defining OOXML based objects (not unlike Rails' +ActiveRecord+!)
6
4
  # Most importantly, provides functionality of parsing such objects from XML,
7
5
  # and marshalling them to XML.
8
6
  class OOXMLObject
9
-
10
7
  # Get the value of a [sub]class variable if it exists, or create the respective variable
11
8
  # with the passed-in +default+ (or +{}+, if not specified)
12
9
  #
@@ -30,46 +27,73 @@ module RubyXL
30
27
 
31
28
  # Defines an attribute of OOXML object.
32
29
  # === Parameters
33
- # * +attribute_name+ - Name of the element attribute as seen in the source XML. Can be either "String" or :Symbol
34
- # * Special attibute name '_' (underscore) denotes the value of the element rather than attribute.
30
+ # * +attribute_name+ - Name of the element attribute as seen in the source XML. Can be either <tt>"String"</tt> or <tt>:Symbol</tt>
31
+ # * Special attibute name <tt>'_'</tt> (underscore) denotes the value of the element rather than attribute.
35
32
  # * +attribute_type+ - Specifies the conversion type for the attribute when parsing. Available options are:
36
- # * :int - Integer
37
- # * :float - Float
38
- # * :string - String (no conversion)
39
- # * :sqref - RubyXL::Sqref
40
- # * :ref - RubyXL::Reference
41
- # * :bool - Boolean ("1" and "true" convert to +true+, others to +false+)
33
+ # * +:int+ - <tt>Integer</tt>
34
+ # * +:float+ - <tt>Float</tt>
35
+ # * +:string+ - <tt>String</tt> (no conversion)
36
+ # * +:sqref+ - RubyXL::Sqref
37
+ # * +:ref+ - RubyXL::Reference
38
+ # * +:bool+ - <tt>Boolean</tt> ("1" and "true" convert to +true+, others to +false+)
39
+ # * one of +simple_types+ - <tt>String</tt>, plus the list of acceptable values is saved for future validation (not used yet).
42
40
  # * +extra_parameters+ - Hash of optional parameters as follows:
43
- # * :accessor - Name of the accessor for this attribute to be defined on the object. If not provided, defaults to classidied +attribute_name+.
44
- # * :default - Value this attribute defaults to if not explicitly provided.
45
- # * :required - Whether this attribute is required when writing XML. If the value of the attrinute is not explicitly provided, +:default+ is written instead.
46
- # * :values - List of acceptable values for this attribute (curently not used).
41
+ # * +:accessor+ - Name of the accessor for this attribute to be defined on the object. If not provided, defaults to classidied +attribute_name+.
42
+ # * +:default+ - Value this attribute defaults to if not explicitly provided.
43
+ # * +:required+ - Whether this attribute is required when writing XML. If the value of the attrinute is not explicitly provided, +:default+ is written instead.
47
44
  # ==== Examples
48
45
  # define_attribute(:outline, :bool, :default => true)
49
- # A Boolean attribute 'outline' with default value +true+ will be accessible by calling +obj.outline+
46
+ # A <tt>Boolean</tt> attribute 'outline' with default value +true+ will be accessible by calling +obj.outline+
50
47
  # define_attribute(:uniqueCount, :int)
51
- # An Integer attribute 'uniqueCount' accessible as +obj.unique_count+
48
+ # An <tt>Integer</tt> attribute 'uniqueCount' accessible as +obj.unique_count+
52
49
  # define_attribute(:_, :string, :accessor => :expression)
53
- # The value of the element will be accessible as a String by calling +obj.expression+
50
+ # The value of the element will be accessible as a <tt>String</tt> by calling +obj.expression+
54
51
  # define_attribute(:errorStyle, :string, :default => 'stop', :values => %w{ stop warning information })
55
- # A String attribute named 'errorStyle' will be accessible as +obj.error_style+, valid values are "stop", "warning", "information"
52
+ # A <tt>String</tt> attribute named 'errorStyle' will be accessible as +obj.error_style+, valid values are <tt>"stop"</tt>, <tt>"warning"</tt>, <tt>"information"</tt>
56
53
  def self.define_attribute(attr_name, attr_type, extra_params = {})
57
54
  attrs = obtain_class_variable(:@@ooxml_attributes)
58
55
 
59
56
  accessor = extra_params[:accessor] || accessorize(attr_name)
60
57
  attr_name = attr_name.to_s
61
58
 
62
- attrs[attr_name] = {
59
+ attr_hash = {
63
60
  :accessor => accessor,
64
61
  :attr_type => attr_type,
65
62
  :optional => !extra_params[:required],
66
63
  :default => extra_params[:default],
67
- :valies => extra_params[:values]
68
64
  }
69
65
 
66
+ if attr_type.is_a?(Array) then
67
+ attr_hash[:values] = attr_type
68
+ attr_hash[:attr_type] = :string
69
+ end
70
+
71
+
72
+ attrs[attr_name] = attr_hash
73
+
70
74
  self.send(:attr_accessor, accessor)
71
75
  end
72
76
 
77
+ # Defines a child node of OOXML object.
78
+ # === Parameters
79
+ # * +klass+ - Class (descendant of RubyXL::OOXMLObject) of the child nodes. Child node objects will be produced by calling +parse+ method of that class.
80
+ # * +extra_parameters+ - Hash of optional parameters as follows:
81
+ # * +:accessor+ - Name of the accessor for this attribute to be defined on the object. If not provided, defaults to classidied +attribute_name+.
82
+ # * +:node_name+ - Node name for the child node, in case it does not match the one defined by the +klass+.
83
+ # * +:collection+ - Whether the child node should be treated as a single node or a collection of nodes:
84
+ # * +false+ (default) - child node is directly accessible through the respective accessor;
85
+ # * +true+ - a collection of child nodes is accessed as +Array+ through the respective accessor;
86
+ # * +:with_count+ - same as +true+, but in addition, the attribute +count+ is defined on the current object, that will be automatically set to the number of elements in the collection at the start of +write_xml+ call.
87
+ # ==== Examples
88
+ # define_child_node(RubyXL::Alignment)
89
+ # Define a singular child node parsed by the RubyXL::BorderEdge.parse() and accessed by the default <tt>obj.alignment</tt> accessor
90
+ # define_child_node(RubyXL::Hyperlink, :colection => true, :accessor => :hyperlinks)
91
+ # Define an array of nodes accessed by <tt>obj.hyperlinks</tt> accessor, each of which will be parsed by the RubyXL::Hyperlink.parse()
92
+ # define_child_node(RubyXL::BorderEdge, :node_name => :left)
93
+ # define_child_node(RubyXL::BorderEdge, :node_name => :right)
94
+ # Use class RubyXL::BorderEdge when parsing both the elements <tt><left ...></tt> and <tt><right ...></tt> elements.
95
+ # define_child_node(RubyXL::Font, :collection => :with_count, :accessor => :fonts)
96
+ # Upon writing of the object this was defined on, its <tt>count</tt> attribute will be set to the count of nodes in <tt>fonts</tt> array
73
97
  def self.define_child_node(klass, extra_params = {})
74
98
  child_nodes = obtain_class_variable(:@@ooxml_child_nodes)
75
99
  child_node_name = (extra_params[:node_name] || klass.class_variable_get(:@@ooxml_tag_name)).to_s
@@ -88,25 +112,33 @@ module RubyXL
88
112
  self.send(:attr_accessor, accessor)
89
113
  end
90
114
 
91
- def self.define_element_name(v)
92
- self.class_variable_set(:@@ooxml_tag_name, v)
115
+ # Defines the name of the element that represents the current OOXML object. Should only be used once per object.
116
+ # In case of different objects represented by the same class in different parts of OOXML tree, +:node_name+
117
+ # extra parameter can be used to override the default element name.
118
+ # === Parameters
119
+ # * +element_name+
120
+ # ==== Examples
121
+ # define_element_name 'externalReference'
122
+ def self.define_element_name(element_name)
123
+ self.class_variable_set(:@@ooxml_tag_name, element_name)
93
124
  end
94
125
 
126
+ # #TODO# This method will eventually be obsoleted.
95
127
  def self.set_countable
96
128
  self.class_variable_set(:@@ooxml_countable, true)
97
129
  self.send(:attr_accessor, :count)
98
130
  end
99
131
 
100
- # Sets the list of namespaces on this object to be added when writing out XML. Valid only on top-level objects.
132
+ # Recursively write the OOXML object and all its children out as Nokogiri::XML. Immediately before the actual
133
+ # generation, +before_write_xml()+ is called to perform last-minute cleanup and validation operations; if it
134
+ # returns +false+, an empty string is returned (rather than +nil+, so Nokogiri::XML's <tt>&lt;&lt;</tt> operator
135
+ # can be used without additional +nil+ checking)
101
136
  # === Parameters
102
- # * +namespace_hash+ - Hash of namespaces in the form of <tt>"prefix" => "url"</tt>
137
+ # * +xml+ - Base Nokogiri::XML object used for building. If omitted, a blank document will be generated.
138
+ # * +node_name_override+ - if present, is used instead of the default element name for this object provided by +define_element_name+
103
139
  # ==== Examples
104
- # set_namespaces('xmlns' => 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
105
- # 'xmlns:r' => 'http://schemas.openxmlformats.org/officeDocument/2006/relationships')
106
- def self.set_namespaces(namespace_hash)
107
- self.class_variable_set(:@@ooxml_namespaces, namespace_hash)
108
- end
109
-
140
+ # obj.write_xml
141
+ # Creates a new Nokogiti::XML and
110
142
  def write_xml(xml = nil, node_name_override = nil)
111
143
  if xml.nil? then
112
144
  seed_xml = Nokogiri::XML('<?xml version = "1.0" standalone ="yes"?>')
@@ -172,20 +204,6 @@ module RubyXL
172
204
  instance_variable_set("@count", 0) if obtain_class_variable(:@@ooxml_countable, false)
173
205
  end
174
206
 
175
- def self.process_attribute(obj, raw_value, params)
176
- val = raw_value &&
177
- case params[:attr_type]
178
- when :int then Integer(raw_value)
179
- when :float then Float(raw_value)
180
- when :string then raw_value
181
- when :sqref then RubyXL::Sqref.new(raw_value)
182
- when :ref then RubyXL::Reference.new(raw_value)
183
- when :bool then ['1', 'true'].include?(raw_value)
184
- end
185
- obj.send("#{params[:accessor]}=", val)
186
- end
187
- private_class_method :process_attribute
188
-
189
207
  def self.parse(node)
190
208
  node = Nokogiri::XML.parse(node) if node.is_a?(IO) || node.is_a?(String)
191
209
 
@@ -251,6 +269,9 @@ module RubyXL
251
269
  new_copy
252
270
  end
253
271
 
272
+ # Prototype method. For sparse collections (+Rows+, +Cells+, etc.) must return index at which this object
273
+ # is expected to reside in the collection. If +nil+ is returned, then object is simply added
274
+ # to the end of the collection.
254
275
  def index_in_collection
255
276
  nil
256
277
  end
@@ -266,30 +287,69 @@ module RubyXL
266
287
  true
267
288
  end
268
289
 
269
- def add_to_zip(zipfile)
270
- xml_string = write_xml
271
- return if xml_string.empty?
272
- zipfile.get_output_stream(self.class.filepath) { |f| f << xml_string }
290
+ private
291
+ def self.accessorize(str)
292
+ acc = str.to_s.dup
293
+ acc.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
294
+ acc.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
295
+ acc.gsub!(':','_')
296
+ acc.downcase.to_sym
273
297
  end
274
298
 
299
+ def self.process_attribute(obj, raw_value, params)
300
+ val = raw_value &&
301
+ case params[:attr_type]
302
+ when :int then Integer(raw_value)
303
+ when :float then Float(raw_value)
304
+ when :string then raw_value
305
+ when :sqref then RubyXL::Sqref.new(raw_value)
306
+ when :ref then RubyXL::Reference.new(raw_value)
307
+ when :bool then ['1', 'true'].include?(raw_value)
308
+ end
309
+ obj.send("#{params[:accessor]}=", val)
310
+ end
311
+
312
+ end
313
+
314
+ # Extension class providing functionality for top-level OOXML objects that are represented by
315
+ # their own <tt>.xml</tt> files in <tt>.xslx</tt> zip container.
316
+
317
+ class OOXMLTopLevelObject < OOXMLObject
318
+ # Prototype method. For top-level OOXML object, returns the path at which the current object's XML file
319
+ # is located within the <tt>.xslx</tt> zip container.
275
320
  def self.filepath
276
321
  raise 'Subclass responsebility'
277
322
  end
278
323
 
324
+ # Sets the list of namespaces on this object to be added when writing out XML. Valid only on top-level objects.
325
+ # === Parameters
326
+ # * +namespace_hash+ - Hash of namespaces in the form of <tt>"prefix" => "url"</tt>
327
+ # ==== Examples
328
+ # set_namespaces('xmlns' => 'http://schemas.openxmlformats.org/spreadsheetml/2006/main',
329
+ # 'xmlns:r' => 'http://schemas.openxmlformats.org/officeDocument/2006/relationships')
330
+ def self.set_namespaces(namespace_hash)
331
+ self.class_variable_set(:@@ooxml_namespaces, namespace_hash)
332
+ end
333
+
334
+ # Generates the top-level OOXML object by parsing its XML file from the temporary
335
+ # directory containing the unzipped contents of <tt>.xslx</tt>
336
+ # === Parameters
337
+ # * +dirpath+ - path to the directory with the unzipped <tt>.xslx</tt> contents.
279
338
  def self.parse_file(dirpath)
280
339
  full_path = File.join(dirpath, filepath)
281
340
  return nil unless File.exist?(full_path)
282
341
  parse(File.open(full_path, 'r'))
283
342
  end
284
343
 
285
- private
286
- def self.accessorize(str)
287
- acc = str.to_s.dup
288
- acc.gsub!(/([A-Z\d]+)([A-Z][a-z])/,'\1_\2')
289
- acc.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
290
- acc.gsub!(':','_')
291
- acc.downcase.to_sym
344
+ # Saves the contents of the object as XML to respective location in <tt>.xslx</tt> zip container.
345
+ # === Parameters
346
+ # * +zipfile+ - ::Zip::File to which the resulting XNMML should be added.
347
+ def add_to_zip(zipfile)
348
+ xml_string = write_xml
349
+ return if xml_string.empty?
350
+ zipfile.get_output_stream(self.class.filepath) { |f| f << xml_string }
292
351
  end
293
352
 
294
353
  end
354
+
295
355
  end