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
data/Rakefile CHANGED
@@ -1,53 +1,103 @@
1
- # encoding: utf-8
2
-
3
1
  require 'rubygems'
2
+
4
3
  require 'bundler'
5
4
  begin
6
5
  Bundler.setup(:default, :development)
7
6
  rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
7
+ warn e.message
8
+ warn 'Run `bundle install` to install missing gems'
10
9
  exit e.status_code
11
10
  end
12
- require 'rake'
13
11
 
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
12
+ require 'juwelier'
13
+ Juwelier::Tasks.new do |gem|
16
14
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "rubyXL"
18
- gem.homepage = "http://github.com/gilt/rubyXL"
19
- gem.license = "MIT"
20
- gem.summary = %Q{rubyXL is a gem which allows the parsing, creation, and manipulation of Microsoft Excel (.xlsx/.xlsm) Documents}
21
- gem.description = %Q{rubyXL is a gem which allows the parsing, creation, and manipulation of Microsoft Excel (.xlsx/.xlsm) Documents}
22
- gem.email = "bhagwat.vivek@gmail.com"
23
- gem.authors = ["Vivek Bhagwat"]
15
+ gem.name = 'rubyXL'
16
+ gem.homepage = 'http://github.com/gilt/rubyXL'
17
+ gem.license = 'MIT'
18
+ gem.summary = %q{rubyXL is a gem which allows the parsing, creation, and manipulation of Microsoft Excel (.xlsx/.xlsm) Documents}
19
+ gem.description = %q{rubyXL is a gem which allows the parsing, creation, and manipulation of Microsoft Excel (.xlsx/.xlsm) Documents}
20
+ gem.email = 'bhagwat.vivek@gmail.com'
21
+ gem.authors = ['Vivek Bhagwat', 'Wesha']
22
+ # gem.required_ruby_version = '>2.1'
24
23
  # dependencies defined in Gemfile
25
24
  end
26
- Jeweler::RubygemsDotOrgTasks.new
25
+ Juwelier::RubygemsDotOrgTasks.new
27
26
 
28
27
  require 'rake/testtask'
29
28
  Rake::TestTask.new(:test) do |test|
30
29
  test.libs << 'lib' << 'test'
31
30
  test.pattern = 'test/**/test_*.rb'
32
31
  test.verbose = true
32
+ test.warning = true
33
33
  end
34
34
 
35
- require 'rcov/rcovtask'
36
- Rcov::RcovTask.new do |test|
37
- test.libs << 'test'
38
- test.pattern = 'test/**/test_*.rb'
39
- test.verbose = true
40
- test.rcov_opts << '--exclude "gems/*"'
41
- end
35
+ require 'rspec/core/rake_task'
36
+ RSpec::Core::RakeTask.new(:rspec)
37
+ task :default => :rspec
42
38
 
43
- task :default => :test
44
-
45
- require 'rake/rdoctask'
39
+ require 'rdoc/task'
46
40
  Rake::RDocTask.new do |rdoc|
47
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
41
+ version = File.exist?('VERSION') ? File.read('VERSION') : ''
48
42
 
49
43
  rdoc.rdoc_dir = 'rdoc'
50
44
  rdoc.title = "rubyXL #{version}"
51
45
  rdoc.rdoc_files.include('README*')
52
46
  rdoc.rdoc_files.include('lib/**/*.rb')
53
47
  end
48
+
49
+ desc 'Dump profiling data with stackprof'
50
+ task :stackprof do
51
+ require 'benchmark'
52
+ require 'stackprof'
53
+
54
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/lib' # Make Ruby aware of load path
55
+ require './lib/rubyXL'
56
+
57
+ spreadsheets = Dir.glob(File.join('test', 'input', '*.xls?')).sort!
58
+
59
+ spreadsheets.each { |input|
60
+ puts "<<<--- Profiling parsing of #{input}..."
61
+ doc = nil
62
+ StackProf.run(:mode => :cpu, :interval => 100,
63
+ :out => "tmp/stackprof-cpu-parse-#{File.basename(input)}.dump") {
64
+ doc = RubyXL::Parser.parse(input)
65
+ }
66
+
67
+ output = File.join('test', 'output', File.basename(input))
68
+ puts "--->>> Profiling writing of #{output}..."
69
+ StackProf.run(:mode => :cpu, :interval => 100,
70
+ :out => "tmp/stackprof-cpu-write-#{File.basename(input)}.dump") {
71
+ doc.write(output)
72
+ }
73
+ }
74
+ end
75
+
76
+ desc 'Dump profiling data with ruby-prof'
77
+ task :rubyprof do
78
+ require 'benchmark'
79
+ require 'ruby-prof'
80
+
81
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/lib' # Make Ruby aware of load path
82
+ require './lib/rubyXL'
83
+
84
+ spreadsheets = Dir.glob(File.join('test', 'input', '*.xls?')).sort!
85
+
86
+ spreadsheets.each { |input|
87
+ puts "<<<--- Profiling parsing of #{input}..."
88
+ doc = nil
89
+ result = RubyProf.profile {
90
+ doc = RubyXL::Parser.parse(input)
91
+ }
92
+ printer = RubyProf::CallStackPrinter.new(result)
93
+ File.open("tmp/ruby-prof-parse-#{File.basename(input)}.html", 'w') { |f| printer.print(f, {}) }
94
+
95
+ output = File.join('test', 'output', File.basename(input))
96
+ puts "--->>> Profiling writing of #{output}..."
97
+ result = RubyProf.profile {
98
+ doc.write(output)
99
+ }
100
+ printer = RubyProf::CallStackPrinter.new(result)
101
+ File.open("tmp/ruby-prof-write-#{File.basename(input)}.html", 'w') { |f| printer.print(f, {}) }
102
+ }
103
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.10
1
+ 3.4.33
data/lib/rubyXL/cell.rb CHANGED
@@ -1,461 +1,27 @@
1
1
  module RubyXL
2
- class Cell < PrivateClass
3
-
4
- attr_accessor :row, :column, :datatype, :style_index, :formula, :worksheet
5
- attr_reader :workbook,:formula_attributes
6
-
7
- def initialize(worksheet,row,column,value=nil,formula=nil,datatype='s',style_index=0, fmla_attr={})
8
- @worksheet = worksheet
9
-
10
- @workbook = worksheet.workbook
11
- @row = row
12
- @column = column
13
- @datatype = datatype
14
- @value = value
15
- @formula=formula
16
- @style_index = style_index
17
- @formula_attributes = fmla_attr
18
- end
19
-
20
- def value(args = {})
21
- raw_values = args.delete(:raw) || false
22
- return @value if raw_values
23
-
24
- if is_date?
25
- return @workbook.num_to_date(@value)
26
- else
27
- return @value
28
- end
29
- end
30
-
31
- def is_date?
32
- if !@value.is_a?(String)
33
- if @workbook.num_fmts_by_id
34
- num_fmt_id = xf_id()[:numFmtId]
35
- tmp_num_fmt = @workbook.num_fmts_by_id[num_fmt_id]
36
- num_fmt = (tmp_num_fmt &&tmp_num_fmt[:attributes] && tmp_num_fmt[:attributes][:formatCode]) ? tmp_num_fmt[:attributes][:formatCode] : nil
37
- if num_fmt && workbook.date_num_fmt?(num_fmt)
38
- return true
39
- end
40
- end
41
- end
42
- return false
43
- end
44
-
45
- def is_date_format?(num_fmt)
46
- skip_chars = ['$', '-', '+', '/', '(', ')', ':', ' ']
47
- num_chars = ['0', '#', '?']
48
- non_date_formats = ['0.00E+00', '##0.0E+0', 'General', 'GENERAL', 'general', '@']
49
- date_chars = ['y','m','d','h','s']
50
-
51
- state = 0
52
- s = ''
53
- num_fmt.split(//).each do |c|
54
- if state == 0
55
- if c == '"'
56
- state = 1
57
- elsif ['\\', '_', '*'].include?(c)
58
- state = 2
59
- elsif skip_chars.include?(c)
60
- next
61
- else
62
- s << c
63
- end
64
- elsif state == 1
65
- if c == '"'
66
- state = 0
67
- end
68
- elsif state == 2
69
- state = 0
70
- end
71
- end
72
- s.gsub!(/\[[^\]]*\]/, '')
73
- if non_date_formats.include?(s)
74
- return false
75
- end
76
- separator = ';'
77
- got_sep = 0
78
- date_count = 0
79
- num_count = 0
80
- s.split(//).each do |c|
81
- if date_chars.include?(c)
82
- date_count += 1
83
- elsif num_chars.include?(c)
84
- num_count += 1
85
- elsif c == separator
86
- got_sep = 1
87
- end
88
- end
89
- if date_count > 0 && num_count == 0
90
- return true
91
- elsif num_count > 0 && date_count == 0
92
- return false
93
- elsif date_count
94
- # ambiguous result
95
- elsif got_sep == 0
96
- # constant result
97
- end
98
- return date_count > num_count
99
- end
100
-
101
- # changes fill color of cell
102
- def change_fill(rgb='ffffff')
103
- validate_worksheet
104
- Color.validate_color(rgb)
105
- @style_index = modify_fill(@workbook, @style_index,rgb)
106
- end
107
-
108
- # Changes font name of cell
109
- def change_font_name(font_name='Verdana')
110
- validate_worksheet
111
- # Get copy of font object with modified name
112
- font = deep_copy(workbook.fonts[font_id().to_s][:font])
113
- font[:name][:attributes][:val] = font_name.to_s
114
- # Update font and xf array
115
- change_font(font)
116
- end
117
-
118
- # Changes font size of cell
119
- def change_font_size(font_size=10)
120
- validate_worksheet
121
- if font_size.is_a?(Integer) || font_size.is_a?(Float)
122
- # Get copy of font object with modified size
123
- font = deep_copy(workbook.fonts[font_id().to_s][:font])
124
- font[:sz][:attributes][:val] = font_size
125
- # Update font and xf array
126
- change_font(font)
127
- else
128
- raise 'Argument must be a number'
129
- end
130
- end
131
-
132
- # Changes font color of cell
133
- def change_font_color(font_color='000000')
134
- validate_worksheet
135
- #if arg is a color name, convert to integer
136
- Color.validate_color(font_color)
137
- # Get copy of font object with modified color
138
- font = deep_copy(workbook.fonts[font_id().to_s][:font])
139
- font = modify_font_color(font, font_color.to_s)
140
- # Update font and xf array
141
- change_font(font)
142
- end
143
-
144
- # Changes font italics settings of cell
145
- def change_font_italics(italicized=false)
146
- validate_worksheet
147
- # Get copy of font object with modified italics settings
148
- font = deep_copy(workbook.fonts[font_id().to_s][:font])
149
- font = modify_font_italics(font, italicized)
150
- # Update font and xf array
151
- change_font(font)
152
- end
153
-
154
- # Changes font bold settings of cell
155
- def change_font_bold(bolded=false)
156
- validate_worksheet
157
- # Get copy of font object with modified bold settings
158
- font = deep_copy(workbook.fonts[font_id().to_s][:font])
159
- font = modify_font_bold(font, bolded)
160
- # Update font and xf array
161
- change_font(font)
162
- end
163
-
164
- # Changes font underline settings of cell
165
- def change_font_underline(underlined=false)
166
- validate_worksheet
167
- # Get copy of font object with modified underline settings
168
- font = deep_copy(workbook.fonts[font_id().to_s][:font])
169
- font = modify_font_underline(font, underlined)
170
- # Update font and xf array
171
- change_font(font)
172
- end
173
-
174
- # Changes font strikethrough settings of cell
175
- def change_font_strikethrough(struckthrough=false)
176
- validate_worksheet
177
- # Get copy of font object with modified strikethrough settings
178
- font = deep_copy(workbook.fonts[font_id().to_s][:font])
179
- font = modify_font_strikethrough(font, struckthrough)
180
- # Update font and xf array
181
- change_font(font)
182
- end
183
-
184
- # Helper method to update the font array and xf array
185
- def change_font(font)
186
- # Modify font array and retrieve new font id
187
- font_id = modify_font(@workbook, font, font_id())
188
- # Get copy of xf object with modified font id
189
- xf = deep_copy(xf_id())
190
- xf[:fontId] = Integer(font_id.to_i)
191
- # Modify xf array and retrieve new xf id
192
- @style_index = modify_xf(@workbook, xf)
193
- end
194
-
195
- # changes horizontal alignment of cell
196
- def change_horizontal_alignment(alignment='center')
197
- validate_worksheet
198
- validate_horizontal_alignment(alignment)
199
- @style_index = modify_alignment(@workbook,@style_index,true,alignment)
200
- end
201
-
202
- # changes vertical alignment of cell
203
- def change_vertical_alignment(alignment='center')
204
- validate_worksheet
205
- validate_vertical_alignment(alignment)
206
- @style_index = modify_alignment(@workbook,@style_index,false,alignment)
207
- end
208
-
209
- # changes top border of cell
210
- def change_border_top(weight='thin')
211
- change_border(:top, weight)
212
- end
213
-
214
- # changes left border of cell
215
- def change_border_left(weight='thin')
216
- change_border(:left, weight)
217
- end
218
-
219
- # changes right border of cell
220
- def change_border_right(weight='thin')
221
- change_border(:right, weight)
222
- end
223
-
224
- # changes bottom border of cell
225
- def change_border_bottom(weight='thin')
226
- change_border(:bottom, weight)
227
- end
228
-
229
- # changes diagonal border of cell
230
- def change_border_diagonal(weight='thin')
231
- change_border(:diagonal, weight)
232
- end
233
-
234
- # changes contents of cell, with formula option
235
- def change_contents(data, formula=nil)
236
- validate_worksheet
237
- @datatype='str'
238
- if data.is_a?(Date) || data.is_a?(DateTime)
239
- data = @workbook.date_to_num(data)
240
- end
241
- if (data.is_a?Integer) || (data.is_a?Float)
242
- @datatype = ''
243
- end
244
- @value=data
245
- @formula=formula
246
- end
247
-
248
- # returns if font is italicized
249
- def is_italicized()
250
- validate_worksheet
251
- if @workbook.fonts[font_id()][:font][:i].nil?
252
- false
253
- else
254
- true
255
- end
256
- end
257
-
258
- # returns if font is bolded
259
- def is_bolded()
260
- validate_worksheet
261
- if @workbook.fonts[font_id()][:font][:b].nil?
262
- false
263
- else
264
- true
265
- end
266
- end
267
-
268
- # returns if font is underlined
269
- def is_underlined()
270
- validate_worksheet
271
- xf = @workbook.get_style_attributes(@workbook.get_style(@style_index))
272
- if @workbook.fonts[font_id()][:font][:u].nil?
273
- false
274
- else
275
- true
276
- end
277
- end
278
-
279
- # returns if font has a strike through it
280
- def is_struckthrough()
281
- validate_worksheet
282
- xf = @workbook.get_style_attributes(@workbook.get_style(@style_index))
283
- if @workbook.fonts[font_id()][:font][:strike].nil?
284
- false
285
- else
286
- true
287
- end
288
- end
289
-
290
- # returns cell's font name
291
- def font_name()
292
- validate_worksheet
293
- @workbook.fonts[font_id()][:font][:name][:attributes][:val]
294
- end
295
-
296
- # returns cell's font size
297
- def font_size()
298
- validate_worksheet
299
- return @workbook.fonts[font_id()][:font][:sz][:attributes][:val]
300
- end
301
-
302
- # returns cell's font color
303
- def font_color()
304
- validate_worksheet
305
- if @workbook.fonts[font_id()][:font][:color].nil?
306
- '000000' #black
307
- else
308
- @workbook.fonts[font_id()][:font][:color][:attributes][:rgb]
309
- end
310
- end
311
-
312
- # returns cell's fill color
313
- def fill_color()
314
- validate_worksheet
315
- xf = @workbook.get_style_attributes(@workbook.get_style(@style_index))
316
- return @workbook.get_fill_color(xf)
317
- end
318
-
319
- # returns cell's horizontal alignment
320
- def horizontal_alignment()
321
- validate_worksheet
322
- xf_obj = @workbook.get_style(@style_index)
323
- if xf_obj[:alignment].nil? || xf_obj[:alignment][:attributes].nil?
324
- return nil
325
- end
326
- xf_obj[:alignment][:attributes][:horizontal].to_s
327
- end
328
-
329
- # returns cell's vertical alignment
330
- def vertical_alignment()
331
- validate_worksheet
332
- xf_obj = @workbook.get_style(@style_index)
333
- if xf_obj[:alignment].nil? || xf_obj[:alignment][:attributes].nil?
334
- return nil
335
- end
336
- xf_obj[:alignment][:attributes][:vertical].to_s
337
- end
338
-
339
- # returns cell's top border
340
- def border_top()
341
- return get_border(:top)
342
- end
343
-
344
- # returns cell's left border
345
- def border_left()
346
- return get_border(:left)
347
- end
348
-
349
- # returns cell's right border
350
- def border_right()
351
- return get_border(:right)
352
- end
353
-
354
- # returns cell's bottom border
355
- def border_bottom()
356
- return get_border(:bottom)
357
- end
358
-
359
- # returns cell's diagonal border
360
- def border_diagonal()
361
- return get_border(:diagonal)
362
- end
363
-
364
- # returns Excel-style cell string from matrix indices
365
- def Cell.convert_to_cell(row=0,col=0)
366
- row_string = (row + 1).to_s #+1 for 0 indexing
367
- col_string = ''
368
-
369
- if row < 0 || col < 0
370
- raise 'Invalid input: cannot convert negative numbers'
371
- end
372
-
373
- unless col == 0
374
- col_length = 1+Integer(Math.log(col) / Math.log(26)) #opposite of 26**
375
- else
376
- col_length = 1
377
- end
378
-
379
- 1.upto(col_length) do |i|
380
-
381
- #for the last digit, 0 should mean A. easy way to do this.
382
- if i == col_length
383
- col+=1
384
- end
385
-
386
- if col >= 26**(col_length-i)
387
- int_val = col / 26**(col_length-i) #+1 for 0 indexing
388
- int_val += 64 #converts 1 to A, etc.
389
-
390
- col_string += int_val.chr
391
-
392
- #intval multiplier decrements by placeholder, essentially
393
- #a B subtracts more than an A this way.
394
- col -= (int_val-64)*26**(col_length-i)
395
- end
396
- end
397
- col_string+row_string
398
- end
399
-
400
- def inspect
401
- str = "(#{@row},#{@column}): #{@value}"
402
- str += " =#{@formula}" if @formula
403
- str += ", datatype = #{@datatype}, style_index = #{@style_index}"
404
- return str
2
+ module LegacyCell
3
+ def workbook
4
+ @worksheet.workbook
405
5
  end
406
6
 
407
7
  private
408
8
 
409
- def change_border(direction, weight)
410
- validate_worksheet
411
- validate_border(weight)
412
- @style_index = modify_border(@workbook,@style_index)
413
- if @workbook.borders[border_id()][:border][direction][:attributes].nil?
414
- @workbook.borders[border_id()][:border][direction][:attributes] = { :style => nil }
415
- end
416
- @workbook.borders[border_id()][:border][direction][:attributes][:style] = weight.to_s
417
- end
418
-
419
- def get_border(direction)
420
- validate_worksheet
421
-
422
- if @workbook.borders[border_id()][:border][direction][:attributes].nil?
423
- return nil
424
- end
425
- return @workbook.borders[border_id()][:border][direction][:attributes][:style]
426
- end
427
-
428
- def validate_workbook()
429
- unless @workbook.nil? || @workbook.worksheets.nil?
430
- @workbook.worksheets.each do |sheet|
431
- unless sheet.nil? || sheet.sheet_data.nil? || sheet.sheet_data[@row].nil?
432
- if sheet.sheet_data[@row][@column] == self
9
+ def validate_workbook
10
+ unless workbook.nil? || workbook.worksheets.nil?
11
+ workbook.worksheets.each { |sheet|
12
+ unless sheet.nil? || sheet.sheet_data.nil? || sheet.sheet_data[row].nil?
13
+ if sheet.sheet_data[row][column] == self
433
14
  return
434
15
  end
435
16
  end
436
- end
17
+ }
437
18
  end
438
- raise "This cell #{self} is not in workbook #{@workbook}"
439
- end
440
-
441
- def validate_worksheet()
442
- if !@worksheet.nil? && @worksheet[@row][@column] == self
443
- return
444
- else
445
- raise "This cell #{self} is not in worksheet #{worksheet}"
446
- end
447
- end
448
-
449
- def xf_id()
450
- @workbook.get_style_attributes(@workbook.get_style(@style_index.to_s))
451
- end
452
-
453
- def border_id()
454
- xf_id()[:borderId].to_s
19
+ raise "This cell #{self} is not in workbook #{workbook}"
455
20
  end
456
21
 
457
- def font_id()
458
- xf_id()[:fontId].to_s
22
+ def validate_worksheet
23
+ return if @worksheet && @worksheet[row] && @worksheet[row][column].equal?(self)
24
+ raise "Cell #{self} is not in worksheet #{worksheet}"
459
25
  end
460
26
  end
461
27
  end