rubyXL 3.3.22 → 3.4.25

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 (465) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +60 -0
  3. data/.codeclimate.yml +3 -0
  4. data/Gemfile +9 -8
  5. data/Gemfile.lock +124 -0
  6. data/LICENSE.txt +1 -1
  7. data/README.rdoc +54 -18
  8. data/Rakefile +29 -29
  9. data/VERSION +1 -1
  10. data/lib/rubyXL/cell.rb +3 -30
  11. data/lib/rubyXL/convenience_methods/cell.rb +276 -0
  12. data/lib/rubyXL/convenience_methods/color.rb +156 -0
  13. data/lib/rubyXL/convenience_methods/font.rb +63 -0
  14. data/lib/rubyXL/convenience_methods/workbook.rb +141 -0
  15. data/lib/rubyXL/convenience_methods/worksheet.rb +714 -0
  16. data/lib/rubyXL/convenience_methods.rb +5 -1045
  17. data/lib/rubyXL/objects/border.rb +2 -5
  18. data/lib/rubyXL/objects/calculation_chain.rb +4 -4
  19. data/lib/rubyXL/objects/cell_style.rb +9 -11
  20. data/lib/rubyXL/objects/chartsheet.rb +15 -19
  21. data/lib/rubyXL/objects/color.rb +7 -7
  22. data/lib/rubyXL/objects/column_range.rb +10 -13
  23. data/lib/rubyXL/objects/comments.rb +5 -8
  24. data/lib/rubyXL/objects/connection.rb +175 -0
  25. data/lib/rubyXL/objects/container_nodes.rb +3 -7
  26. data/lib/rubyXL/objects/content_types.rb +5 -8
  27. data/lib/rubyXL/objects/data_validation.rb +4 -4
  28. data/lib/rubyXL/objects/document_properties.rb +12 -16
  29. data/lib/rubyXL/objects/extensions.rb +19 -4
  30. data/lib/rubyXL/objects/external_links.rb +30 -8
  31. data/lib/rubyXL/objects/fill.rb +6 -9
  32. data/lib/rubyXL/objects/filters.rb +17 -19
  33. data/lib/rubyXL/objects/font.rb +4 -64
  34. data/lib/rubyXL/objects/formula.rb +4 -6
  35. data/lib/rubyXL/objects/ooxml_object.rb +25 -18
  36. data/lib/rubyXL/objects/query_table.rb +104 -0
  37. data/lib/rubyXL/objects/reference.rb +6 -8
  38. data/lib/rubyXL/objects/relationships.rb +13 -13
  39. data/lib/rubyXL/objects/root.rb +0 -2
  40. data/lib/rubyXL/objects/shared_strings.rb +4 -7
  41. data/lib/rubyXL/objects/sheet_common.rb +5 -7
  42. data/lib/rubyXL/objects/sheet_data.rb +50 -16
  43. data/lib/rubyXL/objects/simple_types.rb +21 -1
  44. data/lib/rubyXL/objects/storage.rb +67 -43
  45. data/lib/rubyXL/objects/stylesheet.rb +22 -29
  46. data/lib/rubyXL/objects/text.rb +12 -14
  47. data/lib/rubyXL/objects/theme.rb +142 -126
  48. data/lib/rubyXL/objects/workbook.rb +172 -64
  49. data/lib/rubyXL/objects/worksheet.rb +143 -128
  50. data/lib/rubyXL/parser.rb +1 -3
  51. data/lib/rubyXL/worksheet.rb +83 -78
  52. data/lib/rubyXL.rb +1 -1
  53. data/rdoc/README_rdoc.html +122 -114
  54. data/rdoc/RubyXL/AExtension.html +21 -60
  55. data/rdoc/RubyXL/AExtensionStorageArea.html +12 -17
  56. data/rdoc/RubyXL/ActiveX.html +154 -0
  57. data/rdoc/RubyXL/ActiveXBinary.html +106 -0
  58. data/rdoc/RubyXL/AdjustHandleList.html +13 -19
  59. data/rdoc/RubyXL/Alignment.html +13 -19
  60. data/rdoc/RubyXL/AlternateContent.html +12 -17
  61. data/rdoc/RubyXL/Authors.html +13 -19
  62. data/rdoc/RubyXL/AutoFilter.html +13 -19
  63. data/rdoc/RubyXL/AutoFilterColumn.html +13 -19
  64. data/rdoc/RubyXL/BinaryImageFile.html +12 -25
  65. data/rdoc/RubyXL/BodyProperties.html +13 -19
  66. data/rdoc/RubyXL/BooleanNode.html +12 -17
  67. data/rdoc/RubyXL/BooleanValue.html +12 -17
  68. data/rdoc/RubyXL/Border.html +25 -84
  69. data/rdoc/RubyXL/BorderEdge.html +20 -52
  70. data/rdoc/RubyXL/Borders.html +19 -39
  71. data/rdoc/RubyXL/Break.html +13 -19
  72. data/rdoc/RubyXL/BreakList.html +13 -19
  73. data/rdoc/RubyXL/CT_AdjPoint2D.html +13 -19
  74. data/rdoc/RubyXL/CT_AlphaBiLevelEffect.html +13 -19
  75. data/rdoc/RubyXL/CT_AlphaModulateEffect.html +13 -19
  76. data/rdoc/RubyXL/CT_AlphaModulateFixedEffect.html +13 -19
  77. data/rdoc/RubyXL/CT_AlphaOutsetEffect.html +13 -19
  78. data/rdoc/RubyXL/CT_AlphaReplaceEffect.html +13 -19
  79. data/rdoc/RubyXL/CT_Backdrop.html +13 -19
  80. data/rdoc/RubyXL/CT_Bevel.html +13 -19
  81. data/rdoc/RubyXL/CT_BiLevelEffect.html +13 -19
  82. data/rdoc/RubyXL/CT_BlendEffect.html +13 -19
  83. data/rdoc/RubyXL/CT_Blip.html +13 -19
  84. data/rdoc/RubyXL/CT_BlipFillProperties.html +13 -19
  85. data/rdoc/RubyXL/CT_BlurEffect.html +13 -19
  86. data/rdoc/RubyXL/CT_Camera.html +13 -19
  87. data/rdoc/RubyXL/CT_Color.html +13 -19
  88. data/rdoc/RubyXL/CT_ColorChangeEffect.html +13 -19
  89. data/rdoc/RubyXL/CT_ColorMapping.html +13 -19
  90. data/rdoc/RubyXL/CT_ColorScheme.html +13 -19
  91. data/rdoc/RubyXL/CT_ColorSchemeAndMapping.html +13 -19
  92. data/rdoc/RubyXL/CT_ConnectionSite.html +13 -19
  93. data/rdoc/RubyXL/CT_ConnectionSiteList.html +13 -19
  94. data/rdoc/RubyXL/CT_DashStop.html +13 -19
  95. data/rdoc/RubyXL/CT_DashStopList.html +13 -19
  96. data/rdoc/RubyXL/CT_DefaultShapeDefinition.html +13 -19
  97. data/rdoc/RubyXL/CT_DuotoneEffect.html +13 -19
  98. data/rdoc/RubyXL/CT_EffectContainer.html +13 -19
  99. data/rdoc/RubyXL/CT_EffectList.html +13 -19
  100. data/rdoc/RubyXL/CT_EffectReference.html +13 -19
  101. data/rdoc/RubyXL/CT_EffectStyleItem.html +13 -19
  102. data/rdoc/RubyXL/CT_EffectStyleList.html +13 -19
  103. data/rdoc/RubyXL/CT_EmbeddedWAVAudioFile.html +13 -19
  104. data/rdoc/RubyXL/CT_FillEffect.html +13 -19
  105. data/rdoc/RubyXL/CT_FillOverlayEffect.html +13 -19
  106. data/rdoc/RubyXL/CT_FillStyleList.html +13 -19
  107. data/rdoc/RubyXL/CT_FlatText.html +13 -19
  108. data/rdoc/RubyXL/CT_FontCollection.html +13 -19
  109. data/rdoc/RubyXL/CT_FontReference.html +13 -19
  110. data/rdoc/RubyXL/CT_GeomGuideList.html +13 -19
  111. data/rdoc/RubyXL/CT_GlowEffect.html +13 -19
  112. data/rdoc/RubyXL/CT_GradientFillProperties.html +13 -19
  113. data/rdoc/RubyXL/CT_GradientStop.html +13 -19
  114. data/rdoc/RubyXL/CT_GradientStopList.html +13 -19
  115. data/rdoc/RubyXL/CT_HSLEffect.html +13 -19
  116. data/rdoc/RubyXL/CT_HslColor.html +13 -19
  117. data/rdoc/RubyXL/CT_Hyperlink.html +13 -19
  118. data/rdoc/RubyXL/CT_InnerShadowEffect.html +13 -19
  119. data/rdoc/RubyXL/CT_LightRig.html +13 -19
  120. data/rdoc/RubyXL/CT_LineEndProperties.html +13 -19
  121. data/rdoc/RubyXL/CT_LineJoinMiterProperties.html +13 -19
  122. data/rdoc/RubyXL/CT_LineProperties.html +13 -19
  123. data/rdoc/RubyXL/CT_LineStyleList.html +13 -19
  124. data/rdoc/RubyXL/CT_LinearShadeProperties.html +13 -19
  125. data/rdoc/RubyXL/CT_LuminanceEffect.html +13 -19
  126. data/rdoc/RubyXL/CT_ObjectStyleDefaults.html +13 -19
  127. data/rdoc/RubyXL/CT_OuterShadowEffect.html +13 -19
  128. data/rdoc/RubyXL/CT_Path2D.html +13 -19
  129. data/rdoc/RubyXL/CT_Path2DArcTo.html +13 -19
  130. data/rdoc/RubyXL/CT_Path2DCubicBezierTo.html +13 -19
  131. data/rdoc/RubyXL/CT_Path2DList.html +13 -19
  132. data/rdoc/RubyXL/CT_Path2DQuadBezierTo.html +13 -19
  133. data/rdoc/RubyXL/CT_Path2DTo.html +13 -19
  134. data/rdoc/RubyXL/CT_PathShadeProperties.html +13 -19
  135. data/rdoc/RubyXL/CT_PatternFillProperties.html +13 -19
  136. data/rdoc/RubyXL/CT_Point3D.html +13 -19
  137. data/rdoc/RubyXL/CT_PolarAdjustHandle.html +13 -19
  138. data/rdoc/RubyXL/CT_PresetColor.html +13 -19
  139. data/rdoc/RubyXL/CT_PresetLineDashProperties.html +13 -19
  140. data/rdoc/RubyXL/CT_PresetShadowEffect.html +13 -19
  141. data/rdoc/RubyXL/CT_PresetTextShape.html +13 -19
  142. data/rdoc/RubyXL/CT_ReflectionEffect.html +13 -19
  143. data/rdoc/RubyXL/CT_RelativeOffsetEffect.html +13 -19
  144. data/rdoc/RubyXL/CT_RelativeRect.html +13 -19
  145. data/rdoc/RubyXL/CT_SRgbColor.html +13 -19
  146. data/rdoc/RubyXL/CT_ScRgbColor.html +13 -19
  147. data/rdoc/RubyXL/CT_Scene3D.html +13 -19
  148. data/rdoc/RubyXL/CT_SchemeColor.html +13 -19
  149. data/rdoc/RubyXL/CT_Shape3D.html +13 -19
  150. data/rdoc/RubyXL/CT_ShapeStyle.html +13 -19
  151. data/rdoc/RubyXL/CT_SoftEdgesEffect.html +13 -19
  152. data/rdoc/RubyXL/CT_SphereCoords.html +13 -19
  153. data/rdoc/RubyXL/CT_StretchInfoProperties.html +13 -19
  154. data/rdoc/RubyXL/CT_StyleMatrix.html +13 -19
  155. data/rdoc/RubyXL/CT_StyleMatrixReference.html +13 -19
  156. data/rdoc/RubyXL/CT_SupplementalFont.html +13 -19
  157. data/rdoc/RubyXL/CT_SystemColor.html +13 -19
  158. data/rdoc/RubyXL/CT_TextAutonumberBullet.html +13 -19
  159. data/rdoc/RubyXL/CT_TextBlipBullet.html +13 -19
  160. data/rdoc/RubyXL/CT_TextCharBullet.html +13 -19
  161. data/rdoc/RubyXL/CT_TextCharacterProperties.html +13 -19
  162. data/rdoc/RubyXL/CT_TextFont.html +13 -19
  163. data/rdoc/RubyXL/CT_TextListStyle.html +13 -19
  164. data/rdoc/RubyXL/CT_TextNormalAutofit.html +13 -19
  165. data/rdoc/RubyXL/CT_TextParagraphProperties.html +13 -19
  166. data/rdoc/RubyXL/CT_TextSpacing.html +13 -19
  167. data/rdoc/RubyXL/CT_TextTabStop.html +13 -19
  168. data/rdoc/RubyXL/CT_TextTabStopList.html +13 -19
  169. data/rdoc/RubyXL/CT_TileInfoProperties.html +13 -19
  170. data/rdoc/RubyXL/CT_TintEffect.html +13 -19
  171. data/rdoc/RubyXL/CT_Transform2D.html +13 -19
  172. data/rdoc/RubyXL/CT_TransformEffect.html +13 -19
  173. data/rdoc/RubyXL/CT_Vector3D.html +13 -19
  174. data/rdoc/RubyXL/CT_XYAdjustHandle.html +13 -19
  175. data/rdoc/RubyXL/CalculationChain.html +17 -45
  176. data/rdoc/RubyXL/CalculationChainCell.html +13 -19
  177. data/rdoc/RubyXL/CalculationProperties.html +13 -19
  178. data/rdoc/RubyXL/Cell.html +145 -205
  179. data/rdoc/RubyXL/CellConvenienceMethods.html +255 -460
  180. data/rdoc/RubyXL/CellExt.html +13 -19
  181. data/rdoc/RubyXL/CellSmartTag.html +13 -19
  182. data/rdoc/RubyXL/CellSmartTagProperty.html +13 -19
  183. data/rdoc/RubyXL/CellSmartTags.html +13 -19
  184. data/rdoc/RubyXL/CellStyle.html +13 -19
  185. data/rdoc/RubyXL/CellStyleXFs.html +19 -39
  186. data/rdoc/RubyXL/CellStyles.html +19 -39
  187. data/rdoc/RubyXL/CellValue.html +18 -38
  188. data/rdoc/RubyXL/CellWatch.html +13 -19
  189. data/rdoc/RubyXL/CellWatches.html +13 -19
  190. data/rdoc/RubyXL/CellXFs.html +20 -42
  191. data/rdoc/RubyXL/ChartColorsFile.html +12 -25
  192. data/rdoc/RubyXL/ChartFile.html +19 -49
  193. data/rdoc/RubyXL/ChartStyleFile.html +12 -25
  194. data/rdoc/RubyXL/ChartUserShapesFile.html +12 -25
  195. data/rdoc/RubyXL/Chartsheet.html +20 -68
  196. data/rdoc/RubyXL/ChartsheetPageSetup.html +13 -19
  197. data/rdoc/RubyXL/ChartsheetProperties.html +13 -19
  198. data/rdoc/RubyXL/ChartsheetProtection.html +13 -19
  199. data/rdoc/RubyXL/ChartsheetView.html +13 -19
  200. data/rdoc/RubyXL/ChartsheetViews.html +13 -19
  201. data/rdoc/RubyXL/Color.html +29 -40
  202. data/rdoc/RubyXL/ColorConvenienceClasses/HlsColor.html +242 -0
  203. data/rdoc/RubyXL/ColorConvenienceClasses/RgbColor.html +279 -0
  204. data/rdoc/RubyXL/ColorConvenienceClasses.html +91 -0
  205. data/rdoc/RubyXL/ColorConvenienceMethods.html +137 -0
  206. data/rdoc/RubyXL/ColorFilter.html +13 -19
  207. data/rdoc/RubyXL/ColorScale.html +13 -19
  208. data/rdoc/RubyXL/ColorSet.html +13 -19
  209. data/rdoc/RubyXL/Colors.html +13 -19
  210. data/rdoc/RubyXL/ColumnRange.html +23 -74
  211. data/rdoc/RubyXL/ColumnRanges.html +24 -83
  212. data/rdoc/RubyXL/Comment.html +13 -19
  213. data/rdoc/RubyXL/CommentList.html +13 -19
  214. data/rdoc/RubyXL/CommentsFile.html +18 -51
  215. data/rdoc/RubyXL/ConditionalFormatValue.html +13 -19
  216. data/rdoc/RubyXL/ConditionalFormatting.html +13 -19
  217. data/rdoc/RubyXL/ConditionalFormattingRule.html +13 -19
  218. data/rdoc/RubyXL/Connection.html +99 -0
  219. data/rdoc/RubyXL/ConnectionTable.html +99 -0
  220. data/rdoc/RubyXL/ConnectionTables.html +99 -0
  221. data/rdoc/RubyXL/ConnectionTextField.html +99 -0
  222. data/rdoc/RubyXL/ConnectionTextFields.html +99 -0
  223. data/rdoc/RubyXL/Connections.html +147 -0
  224. data/rdoc/RubyXL/ContentTypeDefault.html +12 -17
  225. data/rdoc/RubyXL/ContentTypeOverride.html +12 -17
  226. data/rdoc/RubyXL/ContentTypes.html +25 -65
  227. data/rdoc/RubyXL/ControlPropertiesFile.html +14 -22
  228. data/rdoc/RubyXL/CorePropertiesFile.html +35 -171
  229. data/rdoc/RubyXL/CustomColor.html +13 -19
  230. data/rdoc/RubyXL/CustomColorList.html +13 -19
  231. data/rdoc/RubyXL/CustomFilter.html +13 -19
  232. data/rdoc/RubyXL/CustomFilters.html +13 -19
  233. data/rdoc/RubyXL/CustomGeometry.html +13 -19
  234. data/rdoc/RubyXL/CustomProperties.html +13 -19
  235. data/rdoc/RubyXL/CustomPropertiesFile.html +12 -25
  236. data/rdoc/RubyXL/CustomProperty.html +13 -19
  237. data/rdoc/RubyXL/CustomPropertyFile.html +108 -0
  238. data/rdoc/RubyXL/CustomSheetView.html +13 -19
  239. data/rdoc/RubyXL/CustomSheetViews.html +13 -19
  240. data/rdoc/RubyXL/CustomWorkbookView.html +13 -19
  241. data/rdoc/RubyXL/CustomWorkbookViews.html +13 -19
  242. data/rdoc/RubyXL/CustomXMLFile.html +12 -22
  243. data/rdoc/RubyXL/DXF.html +13 -19
  244. data/rdoc/RubyXL/DXFs.html +13 -19
  245. data/rdoc/RubyXL/DataBar.html +13 -19
  246. data/rdoc/RubyXL/DataConsolidate.html +13 -19
  247. data/rdoc/RubyXL/DataConsolidationReference.html +13 -19
  248. data/rdoc/RubyXL/DataConsolidationReferences.html +13 -19
  249. data/rdoc/RubyXL/DataType.html +11 -39
  250. data/rdoc/RubyXL/DataValidation.html +13 -19
  251. data/rdoc/RubyXL/DataValidations.html +13 -19
  252. data/rdoc/RubyXL/DateGroupItem.html +13 -19
  253. data/rdoc/RubyXL/DefinedName.html +13 -19
  254. data/rdoc/RubyXL/DefinedNameExt.html +13 -19
  255. data/rdoc/RubyXL/DefinedNames.html +13 -19
  256. data/rdoc/RubyXL/DefinedNamesExt.html +13 -19
  257. data/rdoc/RubyXL/DocumentPropertiesFile.html +22 -68
  258. data/rdoc/RubyXL/DrawingFile.html +19 -49
  259. data/rdoc/RubyXL/DynamicFilter.html +13 -19
  260. data/rdoc/RubyXL/EmbeddedControl.html +13 -19
  261. data/rdoc/RubyXL/EmbeddedControls.html +13 -19
  262. data/rdoc/RubyXL/Extension.html +13 -19
  263. data/rdoc/RubyXL/ExtensionStorageArea.html +13 -19
  264. data/rdoc/RubyXL/Extents.html +13 -19
  265. data/rdoc/RubyXL/ExternalBook.html +13 -19
  266. data/rdoc/RubyXL/ExternalLinksFile.html +19 -49
  267. data/rdoc/RubyXL/ExternalReference.html +13 -19
  268. data/rdoc/RubyXL/ExternalReferences.html +13 -19
  269. data/rdoc/RubyXL/ExtraColorSchemeList.html +13 -19
  270. data/rdoc/RubyXL/FieldItem.html +13 -19
  271. data/rdoc/RubyXL/FileRecoveryProperties.html +13 -19
  272. data/rdoc/RubyXL/FileSharing.html +13 -19
  273. data/rdoc/RubyXL/FileVersion.html +13 -19
  274. data/rdoc/RubyXL/Fill.html +19 -39
  275. data/rdoc/RubyXL/Fills.html +19 -39
  276. data/rdoc/RubyXL/FilterContainer.html +13 -19
  277. data/rdoc/RubyXL/FloatNode.html +12 -17
  278. data/rdoc/RubyXL/FloatValue.html +12 -17
  279. data/rdoc/RubyXL/Font.html +20 -544
  280. data/rdoc/RubyXL/FontConvenienceMethods.html +414 -0
  281. data/rdoc/RubyXL/FontScheme.html +13 -19
  282. data/rdoc/RubyXL/Fonts.html +19 -39
  283. data/rdoc/RubyXL/Formula.html +13 -19
  284. data/rdoc/RubyXL/FunctionGroup.html +13 -19
  285. data/rdoc/RubyXL/FunctionGroups.html +13 -19
  286. data/rdoc/RubyXL/GenericStorageObject.html +22 -84
  287. data/rdoc/RubyXL/GradientFill.html +13 -19
  288. data/rdoc/RubyXL/HeaderFooterSettings.html +13 -19
  289. data/rdoc/RubyXL/Hyperlink.html +13 -19
  290. data/rdoc/RubyXL/HyperlinkRelFile.html +12 -22
  291. data/rdoc/RubyXL/Hyperlinks.html +13 -19
  292. data/rdoc/RubyXL/IconFilter.html +13 -19
  293. data/rdoc/RubyXL/IconSet.html +13 -19
  294. data/rdoc/RubyXL/IgnoredError.html +13 -19
  295. data/rdoc/RubyXL/IgnoredErrors.html +13 -19
  296. data/rdoc/RubyXL/IndexedColors.html +13 -19
  297. data/rdoc/RubyXL/InputCells.html +13 -19
  298. data/rdoc/RubyXL/IntegerNode.html +12 -17
  299. data/rdoc/RubyXL/IntegerValue.html +12 -17
  300. data/rdoc/RubyXL/LegacyCell.html +14 -66
  301. data/rdoc/RubyXL/LegacyWorksheet.html +40 -100
  302. data/rdoc/RubyXL/MRUColors.html +13 -19
  303. data/rdoc/RubyXL/MacrosFile.html +12 -25
  304. data/rdoc/RubyXL/MergedCell.html +13 -19
  305. data/rdoc/RubyXL/MergedCells.html +13 -19
  306. data/rdoc/RubyXL/NumFmt.html +13 -19
  307. data/rdoc/RubyXL/NumberFormat.html +19 -39
  308. data/rdoc/RubyXL/NumberFormats.html +19 -45
  309. data/rdoc/RubyXL/OLEObject.html +13 -19
  310. data/rdoc/RubyXL/OLEObjectFile.html +12 -25
  311. data/rdoc/RubyXL/OLEObjects.html +13 -19
  312. data/rdoc/RubyXL/OLESize.html +13 -19
  313. data/rdoc/RubyXL/OOXMLContainerObject.html +36 -132
  314. data/rdoc/RubyXL/OOXMLIgnored.html +163 -0
  315. data/rdoc/RubyXL/OOXMLObject.html +15 -25
  316. data/rdoc/RubyXL/OOXMLObjectClassMethods.html +92 -183
  317. data/rdoc/RubyXL/OOXMLObjectInstanceMethods.html +49 -185
  318. data/rdoc/RubyXL/OOXMLRelationshipsFile.html +48 -200
  319. data/rdoc/RubyXL/OOXMLTopLevelObject.html +37 -133
  320. data/rdoc/RubyXL/OdbcOleDbProperties.html +99 -0
  321. data/rdoc/RubyXL/Offset.html +13 -19
  322. data/rdoc/RubyXL/OlapProperties.html +99 -0
  323. data/rdoc/RubyXL/OleItem.html +99 -0
  324. data/rdoc/RubyXL/OleItems.html +99 -0
  325. data/rdoc/RubyXL/OleLink.html +99 -0
  326. data/rdoc/RubyXL/OutlineProperties.html +13 -19
  327. data/rdoc/RubyXL/PageMargins.html +13 -19
  328. data/rdoc/RubyXL/PageSetup.html +13 -19
  329. data/rdoc/RubyXL/PageSetupProperties.html +13 -19
  330. data/rdoc/RubyXL/Pane.html +13 -19
  331. data/rdoc/RubyXL/Parser.html +23 -56
  332. data/rdoc/RubyXL/PatternFill.html +13 -19
  333. data/rdoc/RubyXL/PhoneticProperties.html +13 -19
  334. data/rdoc/RubyXL/PhoneticRun.html +13 -19
  335. data/rdoc/RubyXL/PivotArea.html +13 -19
  336. data/rdoc/RubyXL/PivotCache.html +13 -19
  337. data/rdoc/RubyXL/PivotCacheDefinitionFile.html +14 -30
  338. data/rdoc/RubyXL/PivotCacheRecordsFile.html +12 -25
  339. data/rdoc/RubyXL/PivotCaches.html +13 -19
  340. data/rdoc/RubyXL/PivotReference.html +13 -19
  341. data/rdoc/RubyXL/PivotReferences.html +13 -19
  342. data/rdoc/RubyXL/PivotTableFile.html +14 -30
  343. data/rdoc/RubyXL/PivotTableSelection.html +13 -19
  344. data/rdoc/RubyXL/PresetGeometry.html +13 -19
  345. data/rdoc/RubyXL/PrintOptions.html +13 -19
  346. data/rdoc/RubyXL/PrinterSettingsFile.html +12 -25
  347. data/rdoc/RubyXL/ProtectedRange.html +13 -19
  348. data/rdoc/RubyXL/ProtectedRanges.html +13 -19
  349. data/rdoc/RubyXL/Protection.html +13 -19
  350. data/rdoc/RubyXL/QueryParameter.html +99 -0
  351. data/rdoc/RubyXL/QueryParameters.html +99 -0
  352. data/rdoc/RubyXL/QueryTable.html +155 -0
  353. data/rdoc/RubyXL/QueryTableDeletedField.html +99 -0
  354. data/rdoc/RubyXL/QueryTableDeletedFields.html +99 -0
  355. data/rdoc/RubyXL/QueryTableField.html +99 -0
  356. data/rdoc/RubyXL/QueryTableFields.html +99 -0
  357. data/rdoc/RubyXL/QueryTableRefresh.html +99 -0
  358. data/rdoc/RubyXL/RID.html +12 -17
  359. data/rdoc/RubyXL/RawOOXML.html +21 -60
  360. data/rdoc/RubyXL/Reference.html +63 -228
  361. data/rdoc/RubyXL/Relationship.html +12 -17
  362. data/rdoc/RubyXL/RelationshipSupport/ClassMehods.html +14 -32
  363. data/rdoc/RubyXL/RelationshipSupport.html +26 -120
  364. data/rdoc/RubyXL/RevisionPointer.html +99 -0
  365. data/rdoc/RubyXL/RichText.html +20 -39
  366. data/rdoc/RubyXL/RichTextRun.html +18 -38
  367. data/rdoc/RubyXL/Row.html +53 -152
  368. data/rdoc/RubyXL/RowExt.html +13 -19
  369. data/rdoc/RubyXL/RunProperties.html +13 -19
  370. data/rdoc/RubyXL/Scenario.html +13 -19
  371. data/rdoc/RubyXL/Scenarios.html +13 -19
  372. data/rdoc/RubyXL/Selection.html +19 -39
  373. data/rdoc/RubyXL/ShapeGuide.html +13 -19
  374. data/rdoc/RubyXL/ShapeTextRectangle.html +13 -19
  375. data/rdoc/RubyXL/SharedStringsTable.html +38 -147
  376. data/rdoc/RubyXL/Sheet.html +13 -19
  377. data/rdoc/RubyXL/SheetCalculationProperties.html +13 -19
  378. data/rdoc/RubyXL/SheetData.html +20 -53
  379. data/rdoc/RubyXL/SheetDataExt.html +13 -19
  380. data/rdoc/RubyXL/SheetDataSet.html +13 -19
  381. data/rdoc/RubyXL/SheetMetadata.html +108 -0
  382. data/rdoc/RubyXL/SheetName.html +13 -19
  383. data/rdoc/RubyXL/SheetNames.html +13 -19
  384. data/rdoc/RubyXL/Sheets.html +13 -19
  385. data/rdoc/RubyXL/SlicerCacheFile.html +12 -25
  386. data/rdoc/RubyXL/SlicerFile.html +12 -25
  387. data/rdoc/RubyXL/SmartTagProperties.html +13 -19
  388. data/rdoc/RubyXL/SmartTagType.html +13 -19
  389. data/rdoc/RubyXL/SmartTagTypes.html +13 -19
  390. data/rdoc/RubyXL/SmartTags.html +13 -19
  391. data/rdoc/RubyXL/SortCondition.html +13 -19
  392. data/rdoc/RubyXL/SortState.html +13 -19
  393. data/rdoc/RubyXL/Sqref.html +20 -53
  394. data/rdoc/RubyXL/Stop.html +13 -19
  395. data/rdoc/RubyXL/StringNode.html +12 -17
  396. data/rdoc/RubyXL/StringNodeW3C.html +21 -54
  397. data/rdoc/RubyXL/StringValue.html +12 -17
  398. data/rdoc/RubyXL/Stylesheet.html +35 -117
  399. data/rdoc/RubyXL/TableFile.html +12 -25
  400. data/rdoc/RubyXL/TableParts.html +12 -17
  401. data/rdoc/RubyXL/TableStyle.html +13 -19
  402. data/rdoc/RubyXL/TableStyles.html +13 -19
  403. data/rdoc/RubyXL/Text.html +23 -67
  404. data/rdoc/RubyXL/TextImportSettings.html +99 -0
  405. data/rdoc/RubyXL/Theme.html +57 -62
  406. data/rdoc/RubyXL/ThemeElements.html +13 -19
  407. data/rdoc/RubyXL/ThumbnailFile.html +12 -25
  408. data/rdoc/RubyXL/Top10.html +13 -19
  409. data/rdoc/RubyXL/VMLDrawingFile.html +15 -32
  410. data/rdoc/RubyXL/Variant.html +13 -19
  411. data/rdoc/RubyXL/Vector.html +18 -38
  412. data/rdoc/RubyXL/VectorValue.html +12 -17
  413. data/rdoc/RubyXL/VisualProperties.html +13 -19
  414. data/rdoc/RubyXL/WebPublishObject.html +13 -19
  415. data/rdoc/RubyXL/WebPublishObjects.html +13 -19
  416. data/rdoc/RubyXL/WebPublishingItem.html +13 -19
  417. data/rdoc/RubyXL/WebPublishingItems.html +13 -19
  418. data/rdoc/RubyXL/WebPublishingProperties.html +13 -19
  419. data/rdoc/RubyXL/WebQueryProperties.html +99 -0
  420. data/rdoc/RubyXL/Workbook.html +487 -227
  421. data/rdoc/RubyXL/WorkbookConvenienceMethods.html +163 -871
  422. data/rdoc/RubyXL/WorkbookProperties.html +13 -19
  423. data/rdoc/RubyXL/WorkbookProtection.html +13 -19
  424. data/rdoc/RubyXL/WorkbookRoot.html +28 -114
  425. data/rdoc/RubyXL/WorkbookView.html +13 -19
  426. data/rdoc/RubyXL/WorkbookViews.html +13 -19
  427. data/rdoc/RubyXL/Worksheet.html +93 -121
  428. data/rdoc/RubyXL/WorksheetConvenienceMethods.html +299 -1109
  429. data/rdoc/RubyXL/WorksheetDimensions.html +13 -19
  430. data/rdoc/RubyXL/WorksheetFormatProperties.html +12 -17
  431. data/rdoc/RubyXL/WorksheetProperties.html +13 -19
  432. data/rdoc/RubyXL/WorksheetProtection.html +13 -19
  433. data/rdoc/RubyXL/WorksheetView.html +13 -19
  434. data/rdoc/RubyXL/WorksheetViews.html +13 -19
  435. data/rdoc/RubyXL/XF.html +13 -19
  436. data/rdoc/RubyXL.html +41 -296
  437. data/rdoc/created.rid +45 -38
  438. data/rdoc/css/fonts.css +6 -6
  439. data/rdoc/css/rdoc.css +55 -6
  440. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  441. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  442. data/rdoc/index.html +44 -363
  443. data/rdoc/js/darkfish.js +23 -100
  444. data/rdoc/js/navigation.js +4 -41
  445. data/rdoc/js/navigation.js.gz +0 -0
  446. data/rdoc/js/search.js +32 -31
  447. data/rdoc/js/search_index.js +1 -1
  448. data/rdoc/js/search_index.js.gz +0 -0
  449. data/rdoc/js/searcher.js +7 -6
  450. data/rdoc/js/searcher.js.gz +0 -0
  451. data/rdoc/table_of_contents.html +347 -75
  452. data/rubyXL.gemspec +78 -43
  453. data/spec/lib/cell_spec.rb +115 -4
  454. data/spec/lib/color_spec.rb +2 -1
  455. data/spec/lib/parser_spec.rb +24 -27
  456. data/spec/lib/reference_spec.rb +9 -3
  457. data/spec/lib/rgb_color_spec.rb +27 -0
  458. data/spec/lib/stylesheet_spec.rb +8 -11
  459. data/spec/lib/text_spec.rb +8 -4
  460. data/spec/lib/workbook_spec.rb +26 -5
  461. data/spec/lib/worksheet_spec.rb +873 -479
  462. data/spec/spec_helper.rb +2 -0
  463. data/test/test_parse_write.rb +15 -15
  464. metadata +65 -10
  465. data/rdoc/js/jquery.js +0 -4
@@ -0,0 +1,276 @@
1
+ module RubyXL
2
+ module CellConvenienceMethods
3
+ def change_contents(data, formula_expression = nil)
4
+ validate_worksheet
5
+
6
+ if formula_expression then
7
+ self.datatype = nil
8
+ self.formula = RubyXL::Formula.new(:expression => formula_expression)
9
+ else
10
+ self.datatype = case data
11
+ when Date, Time, Numeric then nil
12
+ else RubyXL::DataType::RAW_STRING
13
+ end
14
+ end
15
+
16
+ data = workbook.date_to_num(data) if data.is_a?(Date) || data.is_a?(Time)
17
+
18
+ self.raw_value = data
19
+ end
20
+
21
+ def remove_formula
22
+ self.formula = nil
23
+
24
+ calculation_chain = workbook && workbook.calculation_chain
25
+ calculation_cells = calculation_chain && calculation_chain.cells
26
+ calculation_cells && calculation_cells.reject! { |c|
27
+ c.ref.col_range.c == self.column && c.ref.row_range.begin == self.row
28
+ }
29
+ end
30
+
31
+ def get_border(direction)
32
+ validate_worksheet
33
+ get_cell_border.get_edge_style(direction)
34
+ end
35
+
36
+ def get_border_color(direction)
37
+ validate_worksheet
38
+ get_cell_border.get_edge_color(direction)
39
+ end
40
+
41
+ def change_horizontal_alignment(alignment = 'center')
42
+ validate_worksheet
43
+ self.style_index = workbook.modify_alignment(self.style_index) { |a| a.horizontal = alignment }
44
+ end
45
+
46
+ def change_vertical_alignment(alignment = 'center')
47
+ validate_worksheet
48
+ self.style_index = workbook.modify_alignment(self.style_index) { |a| a.vertical = alignment }
49
+ end
50
+
51
+ def change_text_wrap(wrap = false)
52
+ validate_worksheet
53
+ self.style_index = workbook.modify_alignment(self.style_index) { |a| a.wrap_text = wrap }
54
+ end
55
+
56
+ def change_shrink_to_fit(shrink_to_fit = false)
57
+ validate_worksheet
58
+ self.style_index = workbook.modify_alignment(self.style_index) { |a| a.shrink_to_fit = shrink_to_fit }
59
+ end
60
+
61
+ def change_text_rotation(rot)
62
+ validate_worksheet
63
+ self.style_index = workbook.modify_alignment(self.style_index) { |a| a.text_rotation = rot }
64
+ end
65
+
66
+ def change_text_indent(indent)
67
+ validate_worksheet
68
+ self.style_index = workbook.modify_alignment(self.style_index) { |a| a.indent = indent }
69
+ end
70
+
71
+ def change_border(direction, weight)
72
+ validate_worksheet
73
+ self.style_index = workbook.modify_border(self.style_index, direction, weight)
74
+ end
75
+
76
+ def change_border_color(direction, color)
77
+ validate_worksheet
78
+ Color.validate_color(color)
79
+ self.style_index = workbook.modify_border_color(self.style_index, direction, color)
80
+ end
81
+
82
+ def is_italicized
83
+ validate_worksheet
84
+ get_cell_font.is_italic
85
+ end
86
+
87
+ def is_bolded
88
+ validate_worksheet
89
+ get_cell_font.is_bold
90
+ end
91
+
92
+ def is_underlined
93
+ validate_worksheet
94
+ get_cell_font.is_underlined
95
+ end
96
+
97
+ def is_struckthrough
98
+ validate_worksheet
99
+ get_cell_font.is_strikethrough
100
+ end
101
+
102
+ def font_name
103
+ validate_worksheet
104
+ get_cell_font.get_name
105
+ end
106
+
107
+ def font_size
108
+ validate_worksheet
109
+ get_cell_font.get_size
110
+ end
111
+
112
+ def font_color
113
+ validate_worksheet
114
+ get_cell_font.get_rgb_color || '000000'
115
+ end
116
+
117
+ def fill_color
118
+ validate_worksheet
119
+ return workbook.get_fill_color(get_cell_xf)
120
+ end
121
+
122
+ def horizontal_alignment
123
+ validate_worksheet
124
+ xf_obj = get_cell_xf
125
+ return nil if xf_obj.alignment.nil?
126
+ xf_obj.alignment.horizontal
127
+ end
128
+
129
+ def vertical_alignment
130
+ validate_worksheet
131
+ xf_obj = get_cell_xf
132
+ return nil if xf_obj.alignment.nil?
133
+ xf_obj.alignment.vertical
134
+ end
135
+
136
+ def text_wrap
137
+ validate_worksheet
138
+ xf_obj = get_cell_xf
139
+ return nil if xf_obj.alignment.nil?
140
+ xf_obj.alignment.wrap_text
141
+ end
142
+
143
+ def text_rotation
144
+ validate_worksheet
145
+ xf_obj = get_cell_xf
146
+ return nil if xf_obj.alignment.nil?
147
+ xf_obj.alignment.text_rotation
148
+ end
149
+
150
+ def text_indent
151
+ validate_worksheet
152
+ xf_obj = get_cell_xf
153
+ return nil if xf_obj.alignment.nil?
154
+ xf_obj.alignment.indent
155
+ end
156
+
157
+ def set_number_format(format_code)
158
+ new_xf = get_cell_xf.dup
159
+ new_xf.num_fmt_id = workbook.stylesheet.register_number_format(format_code)
160
+ new_xf.apply_number_format = true
161
+ self.style_index = workbook.register_new_xf(new_xf)
162
+ end
163
+
164
+ # Changes fill color of cell
165
+ def change_fill(rgb = 'ffffff')
166
+ validate_worksheet
167
+ Color.validate_color(rgb)
168
+ self.style_index = workbook.modify_fill(self.style_index, rgb)
169
+ end
170
+
171
+ # Changes font name of cell
172
+ def change_font_name(new_font_name = 'Verdana')
173
+ validate_worksheet
174
+
175
+ font = get_cell_font.dup
176
+ font.set_name(new_font_name)
177
+ update_font_references(font)
178
+ end
179
+
180
+ # Changes font size of cell
181
+ def change_font_size(font_size = 10)
182
+ validate_worksheet
183
+ raise 'Argument must be a number' unless font_size.is_a?(Integer) || font_size.is_a?(Float)
184
+
185
+ font = get_cell_font.dup
186
+ font.set_size(font_size)
187
+ update_font_references(font)
188
+ end
189
+
190
+ # Changes font color of cell
191
+ def change_font_color(font_color = '000000')
192
+ validate_worksheet
193
+ Color.validate_color(font_color)
194
+
195
+ font = get_cell_font.dup
196
+ font.set_rgb_color(font_color)
197
+ update_font_references(font)
198
+ end
199
+
200
+ # Changes font italics settings of cell
201
+ def change_font_italics(italicized = false)
202
+ validate_worksheet
203
+
204
+ font = get_cell_font.dup
205
+ font.set_italic(italicized)
206
+ update_font_references(font)
207
+ end
208
+
209
+ # Changes font bold settings of cell
210
+ def change_font_bold(bolded = false)
211
+ validate_worksheet
212
+
213
+ font = get_cell_font.dup
214
+ font.set_bold(bolded)
215
+ update_font_references(font)
216
+ end
217
+
218
+ # Changes font underline settings of cell
219
+ def change_font_underline(underlined = false)
220
+ validate_worksheet
221
+
222
+ font = get_cell_font.dup
223
+ font.set_underline(underlined)
224
+ update_font_references(font)
225
+ end
226
+
227
+ def change_font_strikethrough(struckthrough = false)
228
+ validate_worksheet
229
+
230
+ font = get_cell_font.dup
231
+ font.set_strikethrough(struckthrough)
232
+ update_font_references(font)
233
+ end
234
+
235
+ # Helper method to update the font array and xf array
236
+ def update_font_references(modified_font)
237
+ xf = workbook.register_new_font(modified_font, get_cell_xf)
238
+ self.style_index = workbook.register_new_xf(xf)
239
+ end
240
+ private :update_font_references
241
+
242
+ # Performs correct modification based on what type of change_type is specified
243
+ def font_switch(change_type, arg)
244
+ case change_type
245
+ when Worksheet::NAME then change_font_name(arg)
246
+ when Worksheet::SIZE then change_font_size(arg)
247
+ when Worksheet::COLOR then change_font_color(arg)
248
+ when Worksheet::ITALICS then change_font_italics(arg)
249
+ when Worksheet::BOLD then change_font_bold(arg)
250
+ when Worksheet::UNDERLINE then change_font_underline(arg)
251
+ when Worksheet::STRIKETHROUGH then change_font_strikethrough(arg)
252
+ else raise 'Invalid change_type'
253
+ end
254
+ end
255
+
256
+ def add_hyperlink(url, tooltip = nil)
257
+ worksheet.relationship_container ||= RubyXL::OOXMLRelationshipsFile.new
258
+ relationships = worksheet.relationship_container.relationships
259
+ r_id = "rId#{relationships.size + 1}"
260
+ relationships << RubyXL::Relationship.new(:id => r_id, :target => url, :target_mode => 'External',
261
+ :type => RubyXL::HyperlinkRelFile::REL_TYPE)
262
+
263
+ hyperlink = RubyXL::Hyperlink.new(:ref => self.r, :r_id => r_id)
264
+ hyperlink.tooltip = tooltip if tooltip
265
+ worksheet.hyperlinks ||= RubyXL::Hyperlinks.new
266
+ worksheet.hyperlinks << hyperlink
267
+ end
268
+
269
+ # def add_shared_string(str)
270
+ # self.datatype = RubyXL::DataType::SHARED_STRING
271
+ # self.raw_value = @workbook.shared_strings_container.add(str)
272
+ # end
273
+ end
274
+
275
+ RubyXL::Cell.send(:include, RubyXL::CellConvenienceMethods) # ruby 2.1 compat
276
+ end
@@ -0,0 +1,156 @@
1
+ module RubyXL
2
+ module ColorConvenienceMethods
3
+ def get_rgb(workbook)
4
+ if rgb then
5
+ return rgb
6
+ elsif theme then
7
+ theme_color = workbook.theme.get_theme_color(theme)
8
+ rgb_color = theme_color && theme_color.a_srgb_clr
9
+ color_value = rgb_color && rgb_color.val
10
+ return nil if color_value.nil?
11
+
12
+ RubyXL::RgbColor.parse(color_value).to_hls.apply_tint(tint).to_rgb.to_s
13
+ end
14
+ end
15
+ end
16
+
17
+ module ColorConvenienceClasses
18
+ # https://ciintelligence.blogspot.com/2012/02/converting-excel-theme-color-and-tint.html
19
+ class RgbColor
20
+ attr_accessor :r, :g, :b, :a
21
+
22
+ def to_hls
23
+ hls_color = HlsColor.new
24
+
25
+ # Note that we are overriding accessors with local vars here:
26
+ r = self.r / 255.0
27
+ g = self.g / 255.0
28
+ b = self.b / 255.0
29
+
30
+ hls_color.a = (self.a || 0) / 255.0
31
+
32
+ min = [r, g, b].min
33
+ max = [r, g, b].max
34
+ delta = max - min
35
+
36
+ if (max == min) then
37
+ hls_color.h = hls_color.s = 0
38
+ hls_color.l = max
39
+ return hls_color
40
+ end
41
+
42
+ hls_color.l = (min + max) / 2
43
+
44
+ if (hls_color.l < 0.5) then
45
+ hls_color.s = delta / (max + min);
46
+ else
47
+ hls_color.s = delta / (2.0 - max - min);
48
+ end
49
+
50
+ hls_color.h = (g - b) / delta if (r == max)
51
+ hls_color.h = 2.0 + (b - r) / delta if (g == max)
52
+ hls_color.h = 4.0 + (r - g) / delta if (b == max)
53
+
54
+ hls_color.h *= 60;
55
+ hls_color.h += 360 if hls_color.h < 0
56
+
57
+ hls_color
58
+ end
59
+
60
+ def self.parse(str)
61
+ r, g, b, a = str.unpack('A2A2A2A2')
62
+
63
+ rgb_color = RgbColor.new
64
+ rgb_color.r = r && r.to_i(16)
65
+ rgb_color.g = g && g.to_i(16)
66
+ rgb_color.b = b && b.to_i(16)
67
+ rgb_color.a = a && a.to_i(16)
68
+
69
+ rgb_color
70
+ end
71
+
72
+ def to_s
73
+ if a && a != 0 then
74
+ format('%02x%02x%02x%02x', r, g, b, a)
75
+ else
76
+ format('%02x%02x%02x', r, g, b)
77
+ end
78
+ end
79
+ end
80
+
81
+ class HlsColor
82
+ attr_accessor :h, :l, :s, :a
83
+
84
+ def to_rgb
85
+ rgb_color = RgbColor.new
86
+
87
+ r = g = b = l
88
+
89
+ if s != 0 then
90
+ t1 = nil
91
+
92
+ if l < 0.5 then
93
+ t1 = l * (1.0 + s)
94
+ else
95
+ t1 = l + s - (l * s)
96
+ end
97
+
98
+ t2 = 2.0 * l - t1;
99
+ h = self.h / 360.0
100
+
101
+ t_r = h + (1.0 / 3.0)
102
+ r = set_color(t1, t2, t_r)
103
+
104
+ t_g = h;
105
+ g = set_color(t1, t2, t_g)
106
+
107
+ t_b = h - (1.0 / 3.0);
108
+ b = set_color(t1, t2, t_b)
109
+ end
110
+
111
+ rgb_color.r = (r * 255).round(0).to_i
112
+ rgb_color.g = (g * 255).round(0).to_i
113
+ rgb_color.b = (b * 255).round(0).to_i
114
+
115
+ rgb_color.a = (a * 255).round(0).to_i
116
+
117
+ rgb_color
118
+ end
119
+
120
+ def set_color(t1, t2, t3)
121
+ color = 0
122
+
123
+ t3 += 1.0 if (t3 < 0)
124
+ t3 -= 1.0 if (t3 > 1)
125
+
126
+ if (6.0 * t3 < 1) then
127
+ color = t2 + (t1 - t2) * 6.0 * t3;
128
+ elsif (2.0 * t3 < 1) then
129
+ color = t1;
130
+ elsif (3.0 * t3 < 2) then
131
+ color = t2 + (t1 - t2) * ((2.0 / 3.0) - t3) * 6.0;
132
+ else
133
+ color = t2;
134
+ end
135
+
136
+ color
137
+ end
138
+ private :set_color
139
+
140
+ def apply_tint(tint)
141
+ return self if tint.nil? || tint == 0
142
+
143
+ if tint < 0 then
144
+ self.l = l * (1.0 + tint);
145
+ else
146
+ self.l = l * (1.0 - tint) + tint;
147
+ end
148
+
149
+ self
150
+ end
151
+ end
152
+ end
153
+
154
+ RubyXL::Color.send(:include, RubyXL::ColorConvenienceMethods) # ruby 2.1 compat
155
+ include(RubyXL::ColorConvenienceClasses)
156
+ end
@@ -0,0 +1,63 @@
1
+ module RubyXL
2
+ module FontConvenienceMethods
3
+ # Funny enough, but presence of <i> without value (equivalent to `val == nul`) means "italic = true"!
4
+ # Same is true for bold, strikethrough, etc
5
+ def is_italic
6
+ i && (i.val != false)
7
+ end
8
+
9
+ def is_bold
10
+ b && (b.val != false)
11
+ end
12
+
13
+ def is_underlined
14
+ u && (u.val != false)
15
+ end
16
+
17
+ def is_strikethrough
18
+ strike && (strike.val != false)
19
+ end
20
+
21
+ def get_name
22
+ name && name.val
23
+ end
24
+
25
+ def get_size
26
+ sz && sz.val
27
+ end
28
+
29
+ def get_rgb_color
30
+ color && color.rgb
31
+ end
32
+
33
+ def set_italic(val)
34
+ self.i = RubyXL::BooleanValue.new(:val => val)
35
+ end
36
+
37
+ def set_bold(val)
38
+ self.b = RubyXL::BooleanValue.new(:val => val)
39
+ end
40
+
41
+ def set_underline(val)
42
+ self.u = RubyXL::BooleanValue.new(:val => val)
43
+ end
44
+
45
+ def set_strikethrough(val)
46
+ self.strike = RubyXL::BooleanValue.new(:val => val)
47
+ end
48
+
49
+ def set_name(val)
50
+ self.name = RubyXL::StringValue.new(:val => val)
51
+ end
52
+
53
+ def set_size(val)
54
+ self.sz = RubyXL::FloatValue.new(:val => val)
55
+ end
56
+
57
+ def set_rgb_color(font_color)
58
+ self.color = RubyXL::Color.new(:rgb => font_color.to_s)
59
+ end
60
+ end
61
+
62
+ RubyXL::Font.send(:include, RubyXL::FontConvenienceMethods) # ruby 2.1 compat
63
+ end
@@ -0,0 +1,141 @@
1
+ module RubyXL
2
+ module WorkbookConvenienceMethods
3
+ def each
4
+ worksheets.each{ |i| yield i }
5
+ end
6
+
7
+ def cell_xfs # Stylesheet should be pre-filled with defaults on initialize()
8
+ stylesheet.cell_xfs
9
+ end
10
+
11
+ def fonts # Stylesheet should be pre-filled with defaults on initialize()
12
+ stylesheet.fonts
13
+ end
14
+
15
+ def fills # Stylesheet should be pre-filled with defaults on initialize()
16
+ stylesheet.fills
17
+ end
18
+
19
+ def borders # Stylesheet should be pre-filled with defaults on initialize()
20
+ stylesheet.borders
21
+ end
22
+
23
+ def get_fill_color(xf)
24
+ fill = fills[xf.fill_id]
25
+ pattern = fill && fill.pattern_fill
26
+ color = pattern && pattern.fg_color
27
+ color = color && color.get_rgb(self)
28
+ color && color.to_s || 'ffffff'
29
+ end
30
+
31
+ def register_new_fill(new_fill, old_xf)
32
+ new_xf = old_xf.dup
33
+ new_xf.apply_fill = true
34
+ new_xf.fill_id = fills.find_index { |x| x == new_fill } # Reuse existing fill, if it exists
35
+ new_xf.fill_id ||= fills.size # If this fill has never existed before, add it to collection.
36
+ fills[new_xf.fill_id] = new_fill
37
+ new_xf
38
+ end
39
+
40
+ def register_new_font(new_font, old_xf)
41
+ new_xf = old_xf.dup
42
+ new_xf.font_id = fonts.find_index { |x| x == new_font } # Reuse existing font, if it exists
43
+ new_xf.font_id ||= fonts.size # If this font has never existed before, add it to collection.
44
+ fonts[new_xf.font_id] = new_font
45
+ new_xf.apply_font = true
46
+ new_xf
47
+ end
48
+
49
+ def register_new_xf(new_xf)
50
+ new_xf_id = cell_xfs.find_index { |xf| xf == new_xf } # Reuse existing XF, if it exists
51
+ new_xf_id ||= cell_xfs.size # If this XF has never existed before, add it to collection.
52
+ cell_xfs[new_xf_id] = new_xf
53
+ new_xf_id
54
+ end
55
+
56
+ def modify_alignment(style_index, &block)
57
+ old_xf = cell_xfs[style_index || 0]
58
+ new_xf = old_xf.dup
59
+ if old_xf.alignment then
60
+ new_xf.alignment = old_xf.alignment.dup
61
+ else
62
+ new_xf.alignment = RubyXL::Alignment.new
63
+ end
64
+
65
+ yield(new_xf.alignment)
66
+ new_xf.apply_alignment = true
67
+
68
+ register_new_xf(new_xf)
69
+ end
70
+
71
+ def modify_fill(style_index, rgb)
72
+ xf = cell_xfs[style_index || 0].dup
73
+ new_fill = RubyXL::Fill.new(:pattern_fill =>
74
+ RubyXL::PatternFill.new(:pattern_type => 'solid',
75
+ :fg_color => RubyXL::Color.new(:rgb => rgb)))
76
+ register_new_xf(register_new_fill(new_fill, xf))
77
+ end
78
+
79
+ def modify_border(style_index, direction, weight)
80
+ xf = cell_xfs[style_index || 0].dup
81
+ new_border = borders[xf.border_id || 0].dup
82
+
83
+ edge = new_border.send(direction)
84
+ new_border.send("#{direction}=", edge.dup) if edge
85
+
86
+ new_border.set_edge_style(direction, weight)
87
+
88
+ xf.border_id = borders.find_index { |x| x == new_border } # Reuse existing border, if it exists
89
+ xf.border_id ||= borders.size # If this border has never existed before, add it to collection.
90
+ borders[xf.border_id] = new_border
91
+ xf.apply_border = true
92
+
93
+ register_new_xf(xf)
94
+ end
95
+
96
+ def modify_border_color(style_index, direction, color)
97
+ xf = cell_xfs[style_index || 0].dup
98
+ new_border = borders[xf.border_id || 0].dup
99
+ new_border.set_edge_color(direction, color)
100
+
101
+ xf.border_id = borders.find_index { |x| x == new_border } # Reuse existing border, if it exists
102
+ xf.border_id ||= borders.size # If this border has never existed before, add it to collection.
103
+ borders[xf.border_id] = new_border
104
+ xf.apply_border = true
105
+
106
+ register_new_xf(xf)
107
+ end
108
+
109
+ # Calculate password hash from string for use in 'password' fields.
110
+ # https://www.openoffice.org/sc/excelfileformat.pdf
111
+ def password_hash(pwd)
112
+ hsh = 0
113
+ pwd.reverse.each_char { |c|
114
+ hsh = hsh ^ c.ord
115
+ hsh = hsh << 1
116
+ hsh -= 0x7fff if hsh > 0x7fff
117
+ }
118
+
119
+ (hsh ^ pwd.length ^ 0xCE4B).to_s(16)
120
+ end
121
+
122
+ def define_new_name(name, reference)
123
+ self.defined_names ||= RubyXL::DefinedNames.new
124
+ self.defined_names << RubyXL::DefinedName.new({:name => name, :reference => reference})
125
+ end
126
+
127
+ def get_defined_name(name)
128
+ self.defined_names && self.defined_names.find { |n| n.name == name }
129
+ end
130
+
131
+ def title
132
+ self.root.core_properties.dc_title && self.root.core_properties.dc_title.value
133
+ end
134
+
135
+ def title=(v)
136
+ self.root.core_properties.dc_title = v && RubyXL::StringNode.new(:value => v)
137
+ end
138
+ end
139
+
140
+ RubyXL::Workbook.send(:include, RubyXL::WorkbookConvenienceMethods) # ruby 2.1 compat
141
+ end