rubyXL 1.2.10 → 3.4.33

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 (518) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +60 -0
  3. data/.codeclimate.yml +3 -0
  4. data/.rubocop.yml +124 -0
  5. data/CHANGELOG.md +12 -0
  6. data/Gemfile +18 -14
  7. data/LICENSE.txt +1 -1
  8. data/README.rdoc +170 -100
  9. data/Rakefile +76 -26
  10. data/VERSION +1 -1
  11. data/lib/rubyXL/cell.rb +13 -447
  12. data/lib/rubyXL/convenience_methods/cell.rb +276 -0
  13. data/lib/rubyXL/convenience_methods/color.rb +156 -0
  14. data/lib/rubyXL/convenience_methods/font.rb +63 -0
  15. data/lib/rubyXL/convenience_methods/workbook.rb +137 -0
  16. data/lib/rubyXL/convenience_methods/worksheet.rb +734 -0
  17. data/lib/rubyXL/convenience_methods.rb +5 -0
  18. data/lib/rubyXL/objects/border.rb +71 -0
  19. data/lib/rubyXL/objects/calculation_chain.rb +31 -0
  20. data/lib/rubyXL/objects/cell_style.rb +63 -0
  21. data/lib/rubyXL/objects/chartsheet.rb +88 -0
  22. data/lib/rubyXL/objects/color.rb +25 -0
  23. data/lib/rubyXL/objects/column_range.rb +93 -0
  24. data/lib/rubyXL/objects/comments.rb +44 -0
  25. data/lib/rubyXL/objects/connection.rb +175 -0
  26. data/lib/rubyXL/objects/container_nodes.rb +131 -0
  27. data/lib/rubyXL/objects/content_types.rb +74 -0
  28. data/lib/rubyXL/objects/data_validation.rb +37 -0
  29. data/lib/rubyXL/objects/document_properties.rb +156 -0
  30. data/lib/rubyXL/objects/extensions.rb +51 -0
  31. data/lib/rubyXL/objects/external_links.rb +115 -0
  32. data/lib/rubyXL/objects/fill.rb +52 -0
  33. data/lib/rubyXL/objects/filters.rb +118 -0
  34. data/lib/rubyXL/objects/font.rb +43 -0
  35. data/lib/rubyXL/objects/formula.rb +22 -0
  36. data/lib/rubyXL/objects/ooxml_object.rb +469 -0
  37. data/lib/rubyXL/objects/query_table.rb +106 -0
  38. data/lib/rubyXL/objects/reference.rb +119 -0
  39. data/lib/rubyXL/objects/relationships.rb +213 -0
  40. data/lib/rubyXL/objects/root.rb +84 -0
  41. data/lib/rubyXL/objects/shared_strings.rb +67 -0
  42. data/lib/rubyXL/objects/sheet_common.rb +49 -0
  43. data/lib/rubyXL/objects/sheet_data.rb +219 -0
  44. data/lib/rubyXL/objects/simple_types.rb +249 -0
  45. data/lib/rubyXL/objects/storage.rb +193 -0
  46. data/lib/rubyXL/objects/stylesheet.rb +224 -0
  47. data/lib/rubyXL/objects/text.rb +92 -0
  48. data/lib/rubyXL/objects/theme.rb +1730 -0
  49. data/lib/rubyXL/objects/workbook.rb +572 -0
  50. data/lib/rubyXL/objects/worksheet.rb +762 -0
  51. data/lib/rubyXL/parser.rb +18 -459
  52. data/lib/rubyXL/worksheet.rb +73 -1461
  53. data/lib/rubyXL.rb +9 -7
  54. data/rdoc/README_rdoc.html +534 -0
  55. data/rdoc/RubyXL/AExtension.html +187 -0
  56. data/rdoc/RubyXL/AExtensionStorageArea.html +97 -0
  57. data/rdoc/RubyXL/ActiveX.html +156 -0
  58. data/rdoc/RubyXL/ActiveXBinary.html +106 -0
  59. data/rdoc/RubyXL/AdjustHandleList.html +99 -0
  60. data/rdoc/RubyXL/Alignment.html +99 -0
  61. data/rdoc/RubyXL/AlternateContent.html +97 -0
  62. data/rdoc/RubyXL/AlternateUrls.html +99 -0
  63. data/rdoc/RubyXL/Authors.html +99 -0
  64. data/rdoc/RubyXL/AutoFilter.html +99 -0
  65. data/rdoc/RubyXL/AutoFilterColumn.html +99 -0
  66. data/rdoc/RubyXL/BinaryImageFile.html +108 -0
  67. data/rdoc/RubyXL/BodyProperties.html +99 -0
  68. data/rdoc/RubyXL/BooleanNode.html +97 -0
  69. data/rdoc/RubyXL/BooleanValue.html +97 -0
  70. data/rdoc/RubyXL/Border.html +223 -0
  71. data/rdoc/RubyXL/BorderEdge.html +160 -0
  72. data/rdoc/RubyXL/Borders.html +138 -0
  73. data/rdoc/RubyXL/Break.html +99 -0
  74. data/rdoc/RubyXL/BreakList.html +99 -0
  75. data/rdoc/RubyXL/CT_AdjPoint2D.html +99 -0
  76. data/rdoc/RubyXL/CT_AlphaBiLevelEffect.html +99 -0
  77. data/rdoc/RubyXL/CT_AlphaModulateEffect.html +99 -0
  78. data/rdoc/RubyXL/CT_AlphaModulateFixedEffect.html +99 -0
  79. data/rdoc/RubyXL/CT_AlphaOutsetEffect.html +99 -0
  80. data/rdoc/RubyXL/CT_AlphaReplaceEffect.html +99 -0
  81. data/rdoc/RubyXL/CT_Backdrop.html +99 -0
  82. data/rdoc/RubyXL/CT_Bevel.html +99 -0
  83. data/rdoc/RubyXL/CT_BiLevelEffect.html +99 -0
  84. data/rdoc/RubyXL/CT_BlendEffect.html +99 -0
  85. data/rdoc/RubyXL/CT_Blip.html +99 -0
  86. data/rdoc/RubyXL/CT_BlipFillProperties.html +99 -0
  87. data/rdoc/RubyXL/CT_BlurEffect.html +99 -0
  88. data/rdoc/RubyXL/CT_Camera.html +99 -0
  89. data/rdoc/RubyXL/CT_Color.html +99 -0
  90. data/rdoc/RubyXL/CT_ColorChangeEffect.html +99 -0
  91. data/rdoc/RubyXL/CT_ColorMapping.html +99 -0
  92. data/rdoc/RubyXL/CT_ColorScheme.html +99 -0
  93. data/rdoc/RubyXL/CT_ColorSchemeAndMapping.html +99 -0
  94. data/rdoc/RubyXL/CT_ConnectionSite.html +99 -0
  95. data/rdoc/RubyXL/CT_ConnectionSiteList.html +99 -0
  96. data/rdoc/RubyXL/CT_DashStop.html +99 -0
  97. data/rdoc/RubyXL/CT_DashStopList.html +99 -0
  98. data/rdoc/RubyXL/CT_DefaultShapeDefinition.html +99 -0
  99. data/rdoc/RubyXL/CT_DuotoneEffect.html +99 -0
  100. data/rdoc/RubyXL/CT_EffectContainer.html +99 -0
  101. data/rdoc/RubyXL/CT_EffectList.html +99 -0
  102. data/rdoc/RubyXL/CT_EffectReference.html +99 -0
  103. data/rdoc/RubyXL/CT_EffectStyleItem.html +99 -0
  104. data/rdoc/RubyXL/CT_EffectStyleList.html +99 -0
  105. data/rdoc/RubyXL/CT_EmbeddedWAVAudioFile.html +99 -0
  106. data/rdoc/RubyXL/CT_FillEffect.html +99 -0
  107. data/rdoc/RubyXL/CT_FillOverlayEffect.html +99 -0
  108. data/rdoc/RubyXL/CT_FillStyleList.html +99 -0
  109. data/rdoc/RubyXL/CT_FlatText.html +99 -0
  110. data/rdoc/RubyXL/CT_FontCollection.html +99 -0
  111. data/rdoc/RubyXL/CT_FontReference.html +99 -0
  112. data/rdoc/RubyXL/CT_GeomGuideList.html +99 -0
  113. data/rdoc/RubyXL/CT_GlowEffect.html +99 -0
  114. data/rdoc/RubyXL/CT_GradientFillProperties.html +99 -0
  115. data/rdoc/RubyXL/CT_GradientStop.html +99 -0
  116. data/rdoc/RubyXL/CT_GradientStopList.html +99 -0
  117. data/rdoc/RubyXL/CT_HSLEffect.html +99 -0
  118. data/rdoc/RubyXL/CT_HslColor.html +99 -0
  119. data/rdoc/RubyXL/CT_Hyperlink.html +99 -0
  120. data/rdoc/RubyXL/CT_InnerShadowEffect.html +99 -0
  121. data/rdoc/RubyXL/CT_LightRig.html +99 -0
  122. data/rdoc/RubyXL/CT_LineEndProperties.html +99 -0
  123. data/rdoc/RubyXL/CT_LineJoinMiterProperties.html +99 -0
  124. data/rdoc/RubyXL/CT_LineProperties.html +99 -0
  125. data/rdoc/RubyXL/CT_LineStyleList.html +99 -0
  126. data/rdoc/RubyXL/CT_LinearShadeProperties.html +99 -0
  127. data/rdoc/RubyXL/CT_LuminanceEffect.html +99 -0
  128. data/rdoc/RubyXL/CT_ObjectStyleDefaults.html +99 -0
  129. data/rdoc/RubyXL/CT_OuterShadowEffect.html +99 -0
  130. data/rdoc/RubyXL/CT_Path2D.html +99 -0
  131. data/rdoc/RubyXL/CT_Path2DArcTo.html +99 -0
  132. data/rdoc/RubyXL/CT_Path2DCubicBezierTo.html +99 -0
  133. data/rdoc/RubyXL/CT_Path2DList.html +99 -0
  134. data/rdoc/RubyXL/CT_Path2DQuadBezierTo.html +99 -0
  135. data/rdoc/RubyXL/CT_Path2DTo.html +99 -0
  136. data/rdoc/RubyXL/CT_PathShadeProperties.html +99 -0
  137. data/rdoc/RubyXL/CT_PatternFillProperties.html +99 -0
  138. data/rdoc/RubyXL/CT_Point3D.html +99 -0
  139. data/rdoc/RubyXL/CT_PolarAdjustHandle.html +99 -0
  140. data/rdoc/RubyXL/CT_PresetColor.html +99 -0
  141. data/rdoc/RubyXL/CT_PresetLineDashProperties.html +99 -0
  142. data/rdoc/RubyXL/CT_PresetShadowEffect.html +99 -0
  143. data/rdoc/RubyXL/CT_PresetTextShape.html +99 -0
  144. data/rdoc/RubyXL/CT_ReflectionEffect.html +99 -0
  145. data/rdoc/RubyXL/CT_RelativeOffsetEffect.html +99 -0
  146. data/rdoc/RubyXL/CT_RelativeRect.html +99 -0
  147. data/rdoc/RubyXL/CT_SRgbColor.html +99 -0
  148. data/rdoc/RubyXL/CT_ScRgbColor.html +99 -0
  149. data/rdoc/RubyXL/CT_Scene3D.html +99 -0
  150. data/rdoc/RubyXL/CT_SchemeColor.html +99 -0
  151. data/rdoc/RubyXL/CT_Shape3D.html +99 -0
  152. data/rdoc/RubyXL/CT_ShapeStyle.html +99 -0
  153. data/rdoc/RubyXL/CT_SoftEdgesEffect.html +99 -0
  154. data/rdoc/RubyXL/CT_SphereCoords.html +99 -0
  155. data/rdoc/RubyXL/CT_StretchInfoProperties.html +99 -0
  156. data/rdoc/RubyXL/CT_StyleMatrix.html +99 -0
  157. data/rdoc/RubyXL/CT_StyleMatrixReference.html +99 -0
  158. data/rdoc/RubyXL/CT_SupplementalFont.html +99 -0
  159. data/rdoc/RubyXL/CT_SystemColor.html +99 -0
  160. data/rdoc/RubyXL/CT_TextAutonumberBullet.html +99 -0
  161. data/rdoc/RubyXL/CT_TextBlipBullet.html +99 -0
  162. data/rdoc/RubyXL/CT_TextCharBullet.html +99 -0
  163. data/rdoc/RubyXL/CT_TextCharacterProperties.html +99 -0
  164. data/rdoc/RubyXL/CT_TextFont.html +99 -0
  165. data/rdoc/RubyXL/CT_TextListStyle.html +99 -0
  166. data/rdoc/RubyXL/CT_TextNormalAutofit.html +99 -0
  167. data/rdoc/RubyXL/CT_TextParagraphProperties.html +99 -0
  168. data/rdoc/RubyXL/CT_TextSpacing.html +99 -0
  169. data/rdoc/RubyXL/CT_TextTabStop.html +99 -0
  170. data/rdoc/RubyXL/CT_TextTabStopList.html +99 -0
  171. data/rdoc/RubyXL/CT_TileInfoProperties.html +99 -0
  172. data/rdoc/RubyXL/CT_TintEffect.html +99 -0
  173. data/rdoc/RubyXL/CT_Transform2D.html +99 -0
  174. data/rdoc/RubyXL/CT_TransformEffect.html +99 -0
  175. data/rdoc/RubyXL/CT_Vector3D.html +99 -0
  176. data/rdoc/RubyXL/CT_XYAdjustHandle.html +99 -0
  177. data/rdoc/RubyXL/CalculationChain.html +149 -0
  178. data/rdoc/RubyXL/CalculationChainCell.html +99 -0
  179. data/rdoc/RubyXL/CalculationProperties.html +99 -0
  180. data/rdoc/RubyXL/Cell.html +510 -0
  181. data/rdoc/RubyXL/CellConvenienceMethods.html +1077 -0
  182. data/rdoc/RubyXL/CellExt.html +99 -0
  183. data/rdoc/RubyXL/CellSmartTag.html +99 -0
  184. data/rdoc/RubyXL/CellSmartTagProperty.html +99 -0
  185. data/rdoc/RubyXL/CellSmartTags.html +99 -0
  186. data/rdoc/RubyXL/CellStyle.html +99 -0
  187. data/rdoc/RubyXL/CellStyleXFs.html +138 -0
  188. data/rdoc/RubyXL/CellStyles.html +138 -0
  189. data/rdoc/RubyXL/CellValue.html +139 -0
  190. data/rdoc/RubyXL/CellWatch.html +99 -0
  191. data/rdoc/RubyXL/CellWatches.html +99 -0
  192. data/rdoc/RubyXL/CellXFs.html +139 -0
  193. data/rdoc/RubyXL/ChartColorsFile.html +108 -0
  194. data/rdoc/RubyXL/ChartFile.html +160 -0
  195. data/rdoc/RubyXL/ChartStyleFile.html +108 -0
  196. data/rdoc/RubyXL/ChartUserShapesFile.html +108 -0
  197. data/rdoc/RubyXL/Chartsheet.html +213 -0
  198. data/rdoc/RubyXL/ChartsheetPageSetup.html +99 -0
  199. data/rdoc/RubyXL/ChartsheetProperties.html +99 -0
  200. data/rdoc/RubyXL/ChartsheetProtection.html +99 -0
  201. data/rdoc/RubyXL/ChartsheetView.html +99 -0
  202. data/rdoc/RubyXL/ChartsheetViews.html +99 -0
  203. data/rdoc/RubyXL/Color.html +151 -0
  204. data/rdoc/RubyXL/ColorConvenienceClasses/HlsColor.html +246 -0
  205. data/rdoc/RubyXL/ColorConvenienceClasses/RgbColor.html +285 -0
  206. data/rdoc/RubyXL/ColorConvenienceClasses.html +91 -0
  207. data/rdoc/RubyXL/ColorConvenienceMethods.html +139 -0
  208. data/rdoc/RubyXL/ColorFilter.html +99 -0
  209. data/rdoc/RubyXL/ColorScale.html +99 -0
  210. data/rdoc/RubyXL/ColorSet.html +99 -0
  211. data/rdoc/RubyXL/Colors.html +99 -0
  212. data/rdoc/RubyXL/ColumnRange.html +230 -0
  213. data/rdoc/RubyXL/ColumnRanges.html +237 -0
  214. data/rdoc/RubyXL/Comment.html +99 -0
  215. data/rdoc/RubyXL/CommentList.html +99 -0
  216. data/rdoc/RubyXL/CommentsFile.html +165 -0
  217. data/rdoc/RubyXL/ConditionalFormatValue.html +99 -0
  218. data/rdoc/RubyXL/ConditionalFormatting.html +99 -0
  219. data/rdoc/RubyXL/ConditionalFormattingRule.html +99 -0
  220. data/rdoc/RubyXL/Connection.html +99 -0
  221. data/rdoc/RubyXL/ConnectionTable.html +99 -0
  222. data/rdoc/RubyXL/ConnectionTables.html +99 -0
  223. data/rdoc/RubyXL/ConnectionTextField.html +99 -0
  224. data/rdoc/RubyXL/ConnectionTextFields.html +99 -0
  225. data/rdoc/RubyXL/Connections.html +149 -0
  226. data/rdoc/RubyXL/ContentTypeDefault.html +97 -0
  227. data/rdoc/RubyXL/ContentTypeOverride.html +97 -0
  228. data/rdoc/RubyXL/ContentTypes.html +211 -0
  229. data/rdoc/RubyXL/ControlPropertiesFile.html +108 -0
  230. data/rdoc/RubyXL/CorePropertiesFile.html +355 -0
  231. data/rdoc/RubyXL/CustomColor.html +99 -0
  232. data/rdoc/RubyXL/CustomColorList.html +99 -0
  233. data/rdoc/RubyXL/CustomFilter.html +99 -0
  234. data/rdoc/RubyXL/CustomFilters.html +99 -0
  235. data/rdoc/RubyXL/CustomGeometry.html +99 -0
  236. data/rdoc/RubyXL/CustomProperties.html +99 -0
  237. data/rdoc/RubyXL/CustomPropertiesFile.html +108 -0
  238. data/rdoc/RubyXL/CustomProperty.html +99 -0
  239. data/rdoc/RubyXL/CustomPropertyFile.html +108 -0
  240. data/rdoc/RubyXL/CustomSheetView.html +99 -0
  241. data/rdoc/RubyXL/CustomSheetViews.html +99 -0
  242. data/rdoc/RubyXL/CustomWorkbookView.html +99 -0
  243. data/rdoc/RubyXL/CustomWorkbookViews.html +99 -0
  244. data/rdoc/RubyXL/CustomXMLFile.html +106 -0
  245. data/rdoc/RubyXL/DXF.html +99 -0
  246. data/rdoc/RubyXL/DXFs.html +99 -0
  247. data/rdoc/RubyXL/DataBar.html +99 -0
  248. data/rdoc/RubyXL/DataConsolidate.html +99 -0
  249. data/rdoc/RubyXL/DataConsolidationReference.html +99 -0
  250. data/rdoc/RubyXL/DataConsolidationReferences.html +99 -0
  251. data/rdoc/RubyXL/DataType.html +114 -0
  252. data/rdoc/RubyXL/DataValidation.html +99 -0
  253. data/rdoc/RubyXL/DataValidations.html +99 -0
  254. data/rdoc/RubyXL/DateGroupItem.html +99 -0
  255. data/rdoc/RubyXL/DefinedName.html +99 -0
  256. data/rdoc/RubyXL/DefinedNameExt.html +99 -0
  257. data/rdoc/RubyXL/DefinedNames.html +99 -0
  258. data/rdoc/RubyXL/DefinedNamesExt.html +99 -0
  259. data/rdoc/RubyXL/DocumentPropertiesFile.html +213 -0
  260. data/rdoc/RubyXL/DrawingFile.html +159 -0
  261. data/rdoc/RubyXL/DynamicFilter.html +99 -0
  262. data/rdoc/RubyXL/EmbeddedControl.html +99 -0
  263. data/rdoc/RubyXL/EmbeddedControls.html +99 -0
  264. data/rdoc/RubyXL/Extension.html +99 -0
  265. data/rdoc/RubyXL/ExtensionStorageArea.html +99 -0
  266. data/rdoc/RubyXL/Extents.html +99 -0
  267. data/rdoc/RubyXL/ExternalBook.html +99 -0
  268. data/rdoc/RubyXL/ExternalLinksFile.html +155 -0
  269. data/rdoc/RubyXL/ExternalReference.html +99 -0
  270. data/rdoc/RubyXL/ExternalReferences.html +99 -0
  271. data/rdoc/RubyXL/ExtraColorSchemeList.html +99 -0
  272. data/rdoc/RubyXL/FieldItem.html +99 -0
  273. data/rdoc/RubyXL/FileRecoveryProperties.html +99 -0
  274. data/rdoc/RubyXL/FileSharing.html +99 -0
  275. data/rdoc/RubyXL/FileVersion.html +99 -0
  276. data/rdoc/RubyXL/Fill.html +138 -0
  277. data/rdoc/RubyXL/Fills.html +138 -0
  278. data/rdoc/RubyXL/FilterContainer.html +99 -0
  279. data/rdoc/RubyXL/FloatNode.html +97 -0
  280. data/rdoc/RubyXL/FloatValue.html +97 -0
  281. data/rdoc/RubyXL/Font.html +148 -0
  282. data/rdoc/RubyXL/FontConvenienceMethods.html +442 -0
  283. data/rdoc/RubyXL/FontScheme.html +99 -0
  284. data/rdoc/RubyXL/Fonts.html +138 -0
  285. data/rdoc/RubyXL/Formula.html +99 -0
  286. data/rdoc/RubyXL/FunctionGroup.html +99 -0
  287. data/rdoc/RubyXL/FunctionGroups.html +99 -0
  288. data/rdoc/RubyXL/GenericStorageObject.html +241 -0
  289. data/rdoc/RubyXL/GradientFill.html +99 -0
  290. data/rdoc/RubyXL/HeaderFooterSettings.html +99 -0
  291. data/rdoc/RubyXL/Hyperlink.html +99 -0
  292. data/rdoc/RubyXL/HyperlinkRelFile.html +106 -0
  293. data/rdoc/RubyXL/Hyperlinks.html +99 -0
  294. data/rdoc/RubyXL/IconFilter.html +99 -0
  295. data/rdoc/RubyXL/IconSet.html +99 -0
  296. data/rdoc/RubyXL/IgnoredError.html +99 -0
  297. data/rdoc/RubyXL/IgnoredErrors.html +99 -0
  298. data/rdoc/RubyXL/IndexedColors.html +99 -0
  299. data/rdoc/RubyXL/InputCells.html +99 -0
  300. data/rdoc/RubyXL/IntegerNode.html +97 -0
  301. data/rdoc/RubyXL/IntegerValue.html +97 -0
  302. data/rdoc/RubyXL/LegacyCell.html +130 -0
  303. data/rdoc/RubyXL/LegacyWorksheet.html +306 -0
  304. data/rdoc/RubyXL/MRUColors.html +99 -0
  305. data/rdoc/RubyXL/MacrosFile.html +108 -0
  306. data/rdoc/RubyXL/MergedCell.html +99 -0
  307. data/rdoc/RubyXL/MergedCells.html +99 -0
  308. data/rdoc/RubyXL/NumFmt.html +99 -0
  309. data/rdoc/RubyXL/NumberFormat.html +139 -0
  310. data/rdoc/RubyXL/NumberFormats.html +147 -0
  311. data/rdoc/RubyXL/OLEObject.html +99 -0
  312. data/rdoc/RubyXL/OLEObjectFile.html +108 -0
  313. data/rdoc/RubyXL/OLEObjects.html +99 -0
  314. data/rdoc/RubyXL/OLESize.html +99 -0
  315. data/rdoc/RubyXL/OOXMLContainerObject.html +309 -0
  316. data/rdoc/RubyXL/OOXMLIgnored.html +167 -0
  317. data/rdoc/RubyXL/OOXMLObject.html +107 -0
  318. data/rdoc/RubyXL/OOXMLObjectClassMethods.html +455 -0
  319. data/rdoc/RubyXL/OOXMLObjectInstanceMethods.html +442 -0
  320. data/rdoc/RubyXL/OOXMLRelationshipsFile.html +470 -0
  321. data/rdoc/RubyXL/OOXMLTopLevelObject.html +297 -0
  322. data/rdoc/RubyXL/OdbcOleDbProperties.html +99 -0
  323. data/rdoc/RubyXL/Offset.html +99 -0
  324. data/rdoc/RubyXL/OlapProperties.html +99 -0
  325. data/rdoc/RubyXL/OleItem.html +99 -0
  326. data/rdoc/RubyXL/OleItems.html +99 -0
  327. data/rdoc/RubyXL/OleLink.html +99 -0
  328. data/rdoc/RubyXL/OutlineProperties.html +99 -0
  329. data/rdoc/RubyXL/PageMargins.html +99 -0
  330. data/rdoc/RubyXL/PageSetup.html +99 -0
  331. data/rdoc/RubyXL/PageSetupProperties.html +99 -0
  332. data/rdoc/RubyXL/Pane.html +99 -0
  333. data/rdoc/RubyXL/Parser.html +174 -0
  334. data/rdoc/RubyXL/PatternFill.html +99 -0
  335. data/rdoc/RubyXL/PersonMetadata.html +108 -0
  336. data/rdoc/RubyXL/PhoneticProperties.html +99 -0
  337. data/rdoc/RubyXL/PhoneticRun.html +99 -0
  338. data/rdoc/RubyXL/PivotArea.html +99 -0
  339. data/rdoc/RubyXL/PivotCache.html +99 -0
  340. data/rdoc/RubyXL/PivotCacheDefinitionFile.html +116 -0
  341. data/rdoc/RubyXL/PivotCacheRecordsFile.html +108 -0
  342. data/rdoc/RubyXL/PivotCaches.html +99 -0
  343. data/rdoc/RubyXL/PivotReference.html +99 -0
  344. data/rdoc/RubyXL/PivotReferences.html +99 -0
  345. data/rdoc/RubyXL/PivotTableFile.html +116 -0
  346. data/rdoc/RubyXL/PivotTableSelection.html +99 -0
  347. data/rdoc/RubyXL/PresetGeometry.html +99 -0
  348. data/rdoc/RubyXL/PrintOptions.html +99 -0
  349. data/rdoc/RubyXL/PrinterSettingsFile.html +108 -0
  350. data/rdoc/RubyXL/ProtectedRange.html +99 -0
  351. data/rdoc/RubyXL/ProtectedRanges.html +99 -0
  352. data/rdoc/RubyXL/Protection.html +99 -0
  353. data/rdoc/RubyXL/QueryParameter.html +99 -0
  354. data/rdoc/RubyXL/QueryParameters.html +99 -0
  355. data/rdoc/RubyXL/QueryTable.html +157 -0
  356. data/rdoc/RubyXL/QueryTableDeletedField.html +99 -0
  357. data/rdoc/RubyXL/QueryTableDeletedFields.html +99 -0
  358. data/rdoc/RubyXL/QueryTableField.html +99 -0
  359. data/rdoc/RubyXL/QueryTableFields.html +99 -0
  360. data/rdoc/RubyXL/QueryTableRefresh.html +99 -0
  361. data/rdoc/RubyXL/RID.html +97 -0
  362. data/rdoc/RubyXL/RawOOXML.html +187 -0
  363. data/rdoc/RubyXL/Reference.html +510 -0
  364. data/rdoc/RubyXL/Relationship.html +97 -0
  365. data/rdoc/RubyXL/RelationshipSupport/ClassMehods.html +131 -0
  366. data/rdoc/RubyXL/RelationshipSupport.html +336 -0
  367. data/rdoc/RubyXL/RevisionPointer.html +99 -0
  368. data/rdoc/RubyXL/RichText.html +141 -0
  369. data/rdoc/RubyXL/RichTextRun.html +138 -0
  370. data/rdoc/RubyXL/Row.html +357 -0
  371. data/rdoc/RubyXL/RowExt.html +99 -0
  372. data/rdoc/RubyXL/RunProperties.html +99 -0
  373. data/rdoc/RubyXL/Scenario.html +99 -0
  374. data/rdoc/RubyXL/Scenarios.html +99 -0
  375. data/rdoc/RubyXL/Selection.html +146 -0
  376. data/rdoc/RubyXL/ShapeGuide.html +99 -0
  377. data/rdoc/RubyXL/ShapeTextRectangle.html +99 -0
  378. data/rdoc/RubyXL/SharedStringsTable.html +328 -0
  379. data/rdoc/RubyXL/Sheet.html +99 -0
  380. data/rdoc/RubyXL/SheetCalculationProperties.html +99 -0
  381. data/rdoc/RubyXL/SheetData.html +162 -0
  382. data/rdoc/RubyXL/SheetDataExt.html +99 -0
  383. data/rdoc/RubyXL/SheetDataSet.html +99 -0
  384. data/rdoc/RubyXL/SheetMetadata.html +108 -0
  385. data/rdoc/RubyXL/SheetName.html +99 -0
  386. data/rdoc/RubyXL/SheetNames.html +99 -0
  387. data/rdoc/RubyXL/Sheets.html +99 -0
  388. data/rdoc/RubyXL/SlicerCacheFile.html +108 -0
  389. data/rdoc/RubyXL/SlicerFile.html +108 -0
  390. data/rdoc/RubyXL/SmartTagProperties.html +99 -0
  391. data/rdoc/RubyXL/SmartTagType.html +99 -0
  392. data/rdoc/RubyXL/SmartTagTypes.html +99 -0
  393. data/rdoc/RubyXL/SmartTags.html +99 -0
  394. data/rdoc/RubyXL/SortCondition.html +99 -0
  395. data/rdoc/RubyXL/SortState.html +99 -0
  396. data/rdoc/RubyXL/Sqref.html +167 -0
  397. data/rdoc/RubyXL/Stop.html +99 -0
  398. data/rdoc/RubyXL/StringNode.html +97 -0
  399. data/rdoc/RubyXL/StringNodeW3C.html +167 -0
  400. data/rdoc/RubyXL/StringValue.html +97 -0
  401. data/rdoc/RubyXL/Stylesheet.html +281 -0
  402. data/rdoc/RubyXL/TableFile.html +108 -0
  403. data/rdoc/RubyXL/TableParts.html +97 -0
  404. data/rdoc/RubyXL/TableStyle.html +99 -0
  405. data/rdoc/RubyXL/TableStyles.html +99 -0
  406. data/rdoc/RubyXL/Text.html +175 -0
  407. data/rdoc/RubyXL/TextImportSettings.html +99 -0
  408. data/rdoc/RubyXL/Theme.html +535 -0
  409. data/rdoc/RubyXL/ThemeElements.html +99 -0
  410. data/rdoc/RubyXL/ThumbnailFile.html +108 -0
  411. data/rdoc/RubyXL/Top10.html +99 -0
  412. data/rdoc/RubyXL/VMLDrawingFile.html +116 -0
  413. data/rdoc/RubyXL/Variant.html +99 -0
  414. data/rdoc/RubyXL/Vector.html +142 -0
  415. data/rdoc/RubyXL/VectorValue.html +97 -0
  416. data/rdoc/RubyXL/VisualProperties.html +99 -0
  417. data/rdoc/RubyXL/WebPublishObject.html +99 -0
  418. data/rdoc/RubyXL/WebPublishObjects.html +99 -0
  419. data/rdoc/RubyXL/WebPublishingItem.html +99 -0
  420. data/rdoc/RubyXL/WebPublishingItems.html +99 -0
  421. data/rdoc/RubyXL/WebPublishingProperties.html +99 -0
  422. data/rdoc/RubyXL/WebQueryProperties.html +99 -0
  423. data/rdoc/RubyXL/Workbook.html +948 -0
  424. data/rdoc/RubyXL/WorkbookConvenienceMethods.html +596 -0
  425. data/rdoc/RubyXL/WorkbookProperties.html +99 -0
  426. data/rdoc/RubyXL/WorkbookProtection.html +99 -0
  427. data/rdoc/RubyXL/WorkbookRoot.html +325 -0
  428. data/rdoc/RubyXL/WorkbookView.html +99 -0
  429. data/rdoc/RubyXL/WorkbookViews.html +99 -0
  430. data/rdoc/RubyXL/Worksheet.html +418 -0
  431. data/rdoc/RubyXL/WorksheetConvenienceMethods.html +2205 -0
  432. data/rdoc/RubyXL/WorksheetDimensions.html +99 -0
  433. data/rdoc/RubyXL/WorksheetFormatProperties.html +97 -0
  434. data/rdoc/RubyXL/WorksheetProperties.html +99 -0
  435. data/rdoc/RubyXL/WorksheetProtection.html +99 -0
  436. data/rdoc/RubyXL/WorksheetView.html +99 -0
  437. data/rdoc/RubyXL/WorksheetViews.html +99 -0
  438. data/rdoc/RubyXL/XF.html +99 -0
  439. data/rdoc/RubyXL.html +338 -0
  440. data/rdoc/created.rid +45 -0
  441. data/rdoc/css/fonts.css +167 -0
  442. data/rdoc/css/rdoc.css +687 -0
  443. data/rdoc/fonts/Lato-Light.ttf +0 -0
  444. data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
  445. data/rdoc/fonts/Lato-Regular.ttf +0 -0
  446. data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
  447. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  448. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  449. data/rdoc/images/add.png +0 -0
  450. data/rdoc/images/arrow_up.png +0 -0
  451. data/rdoc/images/brick.png +0 -0
  452. data/rdoc/images/brick_link.png +0 -0
  453. data/rdoc/images/bug.png +0 -0
  454. data/rdoc/images/bullet_black.png +0 -0
  455. data/rdoc/images/bullet_toggle_minus.png +0 -0
  456. data/rdoc/images/bullet_toggle_plus.png +0 -0
  457. data/rdoc/images/date.png +0 -0
  458. data/rdoc/images/delete.png +0 -0
  459. data/rdoc/images/find.png +0 -0
  460. data/rdoc/images/loadingAnimation.gif +0 -0
  461. data/rdoc/images/macFFBgHack.png +0 -0
  462. data/rdoc/images/package.png +0 -0
  463. data/rdoc/images/page_green.png +0 -0
  464. data/rdoc/images/page_white_text.png +0 -0
  465. data/rdoc/images/page_white_width.png +0 -0
  466. data/rdoc/images/plugin.png +0 -0
  467. data/rdoc/images/ruby.png +0 -0
  468. data/rdoc/images/tag_blue.png +0 -0
  469. data/rdoc/images/tag_green.png +0 -0
  470. data/rdoc/images/transparent.png +0 -0
  471. data/rdoc/images/wrench.png +0 -0
  472. data/rdoc/images/wrench_orange.png +0 -0
  473. data/rdoc/images/zoom.png +0 -0
  474. data/rdoc/index.html +477 -0
  475. data/rdoc/js/darkfish.js +97 -0
  476. data/rdoc/js/navigation.js +105 -0
  477. data/rdoc/js/navigation.js.gz +0 -0
  478. data/rdoc/js/search.js +110 -0
  479. data/rdoc/js/search_index.js +1 -0
  480. data/rdoc/js/search_index.js.gz +0 -0
  481. data/rdoc/js/searcher.js +229 -0
  482. data/rdoc/js/searcher.js.gz +0 -0
  483. data/rdoc/table_of_contents.html +3021 -0
  484. data/rubyXL.gemspec +521 -60
  485. data/spec/lib/cell_spec.rb +386 -143
  486. data/spec/lib/color_spec.rb +11 -4
  487. data/spec/lib/parser_spec.rb +90 -38
  488. data/spec/lib/reference_spec.rb +64 -0
  489. data/spec/lib/rgb_color_spec.rb +29 -0
  490. data/spec/lib/stylesheet_spec.rb +27 -0
  491. data/spec/lib/text_spec.rb +27 -0
  492. data/spec/lib/workbook_spec.rb +168 -22
  493. data/spec/lib/worksheet_spec.rb +1207 -1220
  494. data/spec/spec_helper.rb +13 -0
  495. data/test/input/.gitkeep +0 -0
  496. data/test/output/.gitkeep +0 -0
  497. data/test/test_parse_write.rb +15 -0
  498. data/tmp/.gitignore +1 -0
  499. metadata +634 -168
  500. data/Gemfile.lock +0 -34
  501. data/lib/.DS_Store +0 -0
  502. data/lib/rubyXL/Hash.rb +0 -60
  503. data/lib/rubyXL/color.rb +0 -14
  504. data/lib/rubyXL/private_class.rb +0 -265
  505. data/lib/rubyXL/workbook.rb +0 -450
  506. data/lib/rubyXL/writer/app_writer.rb +0 -62
  507. data/lib/rubyXL/writer/calc_chain_writer.rb +0 -33
  508. data/lib/rubyXL/writer/content_types_writer.rb +0 -77
  509. data/lib/rubyXL/writer/core_writer.rb +0 -51
  510. data/lib/rubyXL/writer/root_rels_writer.rb +0 -25
  511. data/lib/rubyXL/writer/shared_strings_writer.rb +0 -30
  512. data/lib/rubyXL/writer/styles_writer.rb +0 -407
  513. data/lib/rubyXL/writer/theme_writer.rb +0 -343
  514. data/lib/rubyXL/writer/workbook_rels_writer.rb +0 -59
  515. data/lib/rubyXL/writer/workbook_writer.rb +0 -77
  516. data/lib/rubyXL/writer/worksheet_writer.rb +0 -230
  517. data/lib/rubyXL/zip.rb +0 -20
  518. data/spec/lib/hash_spec.rb +0 -28
@@ -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
+ 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,137 @@
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
+ fills[xf.fill_id]&.pattern_fill&.fg_color&.get_rgb(self)&.to_s || 'ffffff'
25
+ end
26
+
27
+ def register_new_fill(new_fill, old_xf)
28
+ new_xf = old_xf.dup
29
+ new_xf.apply_fill = true
30
+ new_xf.fill_id = fills.find_index { |x| x == new_fill } # Reuse existing fill, if it exists
31
+ new_xf.fill_id ||= fills.size # If this fill has never existed before, add it to collection.
32
+ fills[new_xf.fill_id] = new_fill
33
+ new_xf
34
+ end
35
+
36
+ def register_new_font(new_font, old_xf)
37
+ new_xf = old_xf.dup
38
+ new_xf.font_id = fonts.find_index { |x| x == new_font } # Reuse existing font, if it exists
39
+ new_xf.font_id ||= fonts.size # If this font has never existed before, add it to collection.
40
+ fonts[new_xf.font_id] = new_font
41
+ new_xf.apply_font = true
42
+ new_xf
43
+ end
44
+
45
+ def register_new_xf(new_xf)
46
+ new_xf_id = cell_xfs.find_index { |xf| xf == new_xf } # Reuse existing XF, if it exists
47
+ new_xf_id ||= cell_xfs.size # If this XF has never existed before, add it to collection.
48
+ cell_xfs[new_xf_id] = new_xf
49
+ new_xf_id
50
+ end
51
+
52
+ def modify_alignment(style_index, &block)
53
+ old_xf = cell_xfs[style_index || 0]
54
+ new_xf = old_xf.dup
55
+ if old_xf.alignment then
56
+ new_xf.alignment = old_xf.alignment.dup
57
+ else
58
+ new_xf.alignment = RubyXL::Alignment.new
59
+ end
60
+
61
+ yield(new_xf.alignment)
62
+ new_xf.apply_alignment = true
63
+
64
+ register_new_xf(new_xf)
65
+ end
66
+
67
+ def modify_fill(style_index, rgb)
68
+ xf = cell_xfs[style_index || 0].dup
69
+ new_fill = RubyXL::Fill.new(:pattern_fill =>
70
+ RubyXL::PatternFill.new(:pattern_type => 'solid',
71
+ :fg_color => RubyXL::Color.new(:rgb => rgb)))
72
+ register_new_xf(register_new_fill(new_fill, xf))
73
+ end
74
+
75
+ def modify_border(style_index, direction, weight)
76
+ xf = cell_xfs[style_index || 0].dup
77
+ new_border = borders[xf.border_id || 0].dup
78
+
79
+ edge = new_border.send(direction)
80
+ new_border.send("#{direction}=", edge.dup) if edge
81
+
82
+ new_border.set_edge_style(direction, weight)
83
+
84
+ xf.border_id = borders.find_index { |x| x == new_border } # Reuse existing border, if it exists
85
+ xf.border_id ||= borders.size # If this border has never existed before, add it to collection.
86
+ borders[xf.border_id] = new_border
87
+ xf.apply_border = true
88
+
89
+ register_new_xf(xf)
90
+ end
91
+
92
+ def modify_border_color(style_index, direction, color)
93
+ xf = cell_xfs[style_index || 0].dup
94
+ new_border = borders[xf.border_id || 0].dup
95
+ new_border.set_edge_color(direction, color)
96
+
97
+ xf.border_id = borders.find_index { |x| x == new_border } # Reuse existing border, if it exists
98
+ xf.border_id ||= borders.size # If this border has never existed before, add it to collection.
99
+ borders[xf.border_id] = new_border
100
+ xf.apply_border = true
101
+
102
+ register_new_xf(xf)
103
+ end
104
+
105
+ # Calculate password hash from string for use in 'password' fields.
106
+ # https://www.openoffice.org/sc/excelfileformat.pdf
107
+ def password_hash(pwd)
108
+ hsh = 0
109
+ pwd.reverse.each_char { |c|
110
+ hsh = hsh ^ c.ord
111
+ hsh = hsh << 1
112
+ hsh -= 0x7fff if hsh > 0x7fff
113
+ }
114
+
115
+ (hsh ^ pwd.length ^ 0xCE4B).to_s(16)
116
+ end
117
+
118
+ def define_new_name(name, reference)
119
+ self.defined_names ||= RubyXL::DefinedNames.new
120
+ self.defined_names << RubyXL::DefinedName.new({:name => name, :reference => reference})
121
+ end
122
+
123
+ def get_defined_name(name)
124
+ self.defined_names && self.defined_names.find { |n| n.name == name }
125
+ end
126
+
127
+ def title
128
+ self.root.core_properties.dc_title && self.root.core_properties.dc_title.value
129
+ end
130
+
131
+ def title=(v)
132
+ self.root.core_properties.dc_title = v && RubyXL::StringNode.new(:value => v)
133
+ end
134
+ end
135
+
136
+ RubyXL::Workbook.send(:include, RubyXL::WorkbookConvenienceMethods) # ruby 2.1 compat
137
+ end