rubyXL 3.3.33 → 3.4.25

Sign up to get free protection for your applications and to get access to all the features.
Files changed (463) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +60 -0
  3. data/Gemfile +9 -8
  4. data/Gemfile.lock +124 -0
  5. data/LICENSE.txt +1 -1
  6. data/README.rdoc +46 -22
  7. data/Rakefile +29 -29
  8. data/VERSION +1 -1
  9. data/lib/rubyXL/cell.rb +2 -29
  10. data/lib/rubyXL/convenience_methods/cell.rb +276 -0
  11. data/lib/rubyXL/convenience_methods/color.rb +156 -0
  12. data/lib/rubyXL/convenience_methods/font.rb +63 -0
  13. data/lib/rubyXL/convenience_methods/workbook.rb +141 -0
  14. data/lib/rubyXL/convenience_methods/worksheet.rb +714 -0
  15. data/lib/rubyXL/convenience_methods.rb +5 -1301
  16. data/lib/rubyXL/objects/border.rb +0 -3
  17. data/lib/rubyXL/objects/calculation_chain.rb +2 -2
  18. data/lib/rubyXL/objects/cell_style.rb +1 -3
  19. data/lib/rubyXL/objects/chartsheet.rb +8 -12
  20. data/lib/rubyXL/objects/color.rb +3 -7
  21. data/lib/rubyXL/objects/column_range.rb +0 -3
  22. data/lib/rubyXL/objects/comments.rb +1 -4
  23. data/lib/rubyXL/objects/connection.rb +175 -0
  24. data/lib/rubyXL/objects/container_nodes.rb +1 -5
  25. data/lib/rubyXL/objects/content_types.rb +3 -6
  26. data/lib/rubyXL/objects/data_validation.rb +2 -2
  27. data/lib/rubyXL/objects/document_properties.rb +11 -15
  28. data/lib/rubyXL/objects/extensions.rb +0 -2
  29. data/lib/rubyXL/objects/external_links.rb +30 -8
  30. data/lib/rubyXL/objects/fill.rb +2 -5
  31. data/lib/rubyXL/objects/filters.rb +5 -7
  32. data/lib/rubyXL/objects/font.rb +2 -7
  33. data/lib/rubyXL/objects/formula.rb +3 -5
  34. data/lib/rubyXL/objects/ooxml_object.rb +26 -19
  35. data/lib/rubyXL/objects/query_table.rb +104 -0
  36. data/lib/rubyXL/objects/reference.rb +6 -8
  37. data/lib/rubyXL/objects/relationships.rb +13 -13
  38. data/lib/rubyXL/objects/root.rb +0 -2
  39. data/lib/rubyXL/objects/shared_strings.rb +3 -6
  40. data/lib/rubyXL/objects/sheet_common.rb +1 -3
  41. data/lib/rubyXL/objects/sheet_data.rb +38 -11
  42. data/lib/rubyXL/objects/simple_types.rb +16 -1
  43. data/lib/rubyXL/objects/storage.rb +51 -50
  44. data/lib/rubyXL/objects/stylesheet.rb +8 -15
  45. data/lib/rubyXL/objects/text.rb +5 -7
  46. data/lib/rubyXL/objects/theme.rb +5 -8
  47. data/lib/rubyXL/objects/workbook.rb +140 -33
  48. data/lib/rubyXL/objects/worksheet.rb +44 -31
  49. data/lib/rubyXL/parser.rb +1 -3
  50. data/lib/rubyXL/worksheet.rb +83 -91
  51. data/lib/rubyXL.rb +1 -1
  52. data/rdoc/README_rdoc.html +111 -126
  53. data/rdoc/RubyXL/AExtension.html +20 -60
  54. data/rdoc/RubyXL/AExtensionStorageArea.html +11 -17
  55. data/rdoc/RubyXL/ActiveX.html +19 -47
  56. data/rdoc/RubyXL/ActiveXBinary.html +11 -22
  57. data/rdoc/RubyXL/AdjustHandleList.html +12 -19
  58. data/rdoc/RubyXL/Alignment.html +12 -19
  59. data/rdoc/RubyXL/AlternateContent.html +11 -17
  60. data/rdoc/RubyXL/Authors.html +12 -19
  61. data/rdoc/RubyXL/AutoFilter.html +12 -19
  62. data/rdoc/RubyXL/AutoFilterColumn.html +12 -19
  63. data/rdoc/RubyXL/BinaryImageFile.html +11 -25
  64. data/rdoc/RubyXL/BodyProperties.html +12 -19
  65. data/rdoc/RubyXL/BooleanNode.html +11 -17
  66. data/rdoc/RubyXL/BooleanValue.html +11 -17
  67. data/rdoc/RubyXL/Border.html +24 -84
  68. data/rdoc/RubyXL/BorderEdge.html +19 -52
  69. data/rdoc/RubyXL/Borders.html +18 -39
  70. data/rdoc/RubyXL/Break.html +12 -19
  71. data/rdoc/RubyXL/BreakList.html +12 -19
  72. data/rdoc/RubyXL/CT_AdjPoint2D.html +12 -19
  73. data/rdoc/RubyXL/CT_AlphaBiLevelEffect.html +12 -19
  74. data/rdoc/RubyXL/CT_AlphaModulateEffect.html +12 -19
  75. data/rdoc/RubyXL/CT_AlphaModulateFixedEffect.html +12 -19
  76. data/rdoc/RubyXL/CT_AlphaOutsetEffect.html +12 -19
  77. data/rdoc/RubyXL/CT_AlphaReplaceEffect.html +12 -19
  78. data/rdoc/RubyXL/CT_Backdrop.html +12 -19
  79. data/rdoc/RubyXL/CT_Bevel.html +12 -19
  80. data/rdoc/RubyXL/CT_BiLevelEffect.html +12 -19
  81. data/rdoc/RubyXL/CT_BlendEffect.html +12 -19
  82. data/rdoc/RubyXL/CT_Blip.html +12 -19
  83. data/rdoc/RubyXL/CT_BlipFillProperties.html +12 -19
  84. data/rdoc/RubyXL/CT_BlurEffect.html +12 -19
  85. data/rdoc/RubyXL/CT_Camera.html +12 -19
  86. data/rdoc/RubyXL/CT_Color.html +12 -19
  87. data/rdoc/RubyXL/CT_ColorChangeEffect.html +12 -19
  88. data/rdoc/RubyXL/CT_ColorMapping.html +12 -19
  89. data/rdoc/RubyXL/CT_ColorScheme.html +12 -19
  90. data/rdoc/RubyXL/CT_ColorSchemeAndMapping.html +12 -19
  91. data/rdoc/RubyXL/CT_ConnectionSite.html +12 -19
  92. data/rdoc/RubyXL/CT_ConnectionSiteList.html +12 -19
  93. data/rdoc/RubyXL/CT_DashStop.html +12 -19
  94. data/rdoc/RubyXL/CT_DashStopList.html +12 -19
  95. data/rdoc/RubyXL/CT_DefaultShapeDefinition.html +12 -19
  96. data/rdoc/RubyXL/CT_DuotoneEffect.html +12 -19
  97. data/rdoc/RubyXL/CT_EffectContainer.html +12 -19
  98. data/rdoc/RubyXL/CT_EffectList.html +12 -19
  99. data/rdoc/RubyXL/CT_EffectReference.html +12 -19
  100. data/rdoc/RubyXL/CT_EffectStyleItem.html +12 -19
  101. data/rdoc/RubyXL/CT_EffectStyleList.html +12 -19
  102. data/rdoc/RubyXL/CT_EmbeddedWAVAudioFile.html +12 -19
  103. data/rdoc/RubyXL/CT_FillEffect.html +12 -19
  104. data/rdoc/RubyXL/CT_FillOverlayEffect.html +12 -19
  105. data/rdoc/RubyXL/CT_FillStyleList.html +12 -19
  106. data/rdoc/RubyXL/CT_FlatText.html +12 -19
  107. data/rdoc/RubyXL/CT_FontCollection.html +12 -19
  108. data/rdoc/RubyXL/CT_FontReference.html +12 -19
  109. data/rdoc/RubyXL/CT_GeomGuideList.html +12 -19
  110. data/rdoc/RubyXL/CT_GlowEffect.html +12 -19
  111. data/rdoc/RubyXL/CT_GradientFillProperties.html +12 -19
  112. data/rdoc/RubyXL/CT_GradientStop.html +12 -19
  113. data/rdoc/RubyXL/CT_GradientStopList.html +12 -19
  114. data/rdoc/RubyXL/CT_HSLEffect.html +12 -19
  115. data/rdoc/RubyXL/CT_HslColor.html +12 -19
  116. data/rdoc/RubyXL/CT_Hyperlink.html +12 -19
  117. data/rdoc/RubyXL/CT_InnerShadowEffect.html +12 -19
  118. data/rdoc/RubyXL/CT_LightRig.html +12 -19
  119. data/rdoc/RubyXL/CT_LineEndProperties.html +12 -19
  120. data/rdoc/RubyXL/CT_LineJoinMiterProperties.html +12 -19
  121. data/rdoc/RubyXL/CT_LineProperties.html +12 -19
  122. data/rdoc/RubyXL/CT_LineStyleList.html +12 -19
  123. data/rdoc/RubyXL/CT_LinearShadeProperties.html +12 -19
  124. data/rdoc/RubyXL/CT_LuminanceEffect.html +12 -19
  125. data/rdoc/RubyXL/CT_ObjectStyleDefaults.html +12 -19
  126. data/rdoc/RubyXL/CT_OuterShadowEffect.html +12 -19
  127. data/rdoc/RubyXL/CT_Path2D.html +12 -19
  128. data/rdoc/RubyXL/CT_Path2DArcTo.html +12 -19
  129. data/rdoc/RubyXL/CT_Path2DCubicBezierTo.html +12 -19
  130. data/rdoc/RubyXL/CT_Path2DList.html +12 -19
  131. data/rdoc/RubyXL/CT_Path2DQuadBezierTo.html +12 -19
  132. data/rdoc/RubyXL/CT_Path2DTo.html +12 -19
  133. data/rdoc/RubyXL/CT_PathShadeProperties.html +12 -19
  134. data/rdoc/RubyXL/CT_PatternFillProperties.html +12 -19
  135. data/rdoc/RubyXL/CT_Point3D.html +12 -19
  136. data/rdoc/RubyXL/CT_PolarAdjustHandle.html +12 -19
  137. data/rdoc/RubyXL/CT_PresetColor.html +12 -19
  138. data/rdoc/RubyXL/CT_PresetLineDashProperties.html +12 -19
  139. data/rdoc/RubyXL/CT_PresetShadowEffect.html +12 -19
  140. data/rdoc/RubyXL/CT_PresetTextShape.html +12 -19
  141. data/rdoc/RubyXL/CT_ReflectionEffect.html +12 -19
  142. data/rdoc/RubyXL/CT_RelativeOffsetEffect.html +12 -19
  143. data/rdoc/RubyXL/CT_RelativeRect.html +12 -19
  144. data/rdoc/RubyXL/CT_SRgbColor.html +12 -19
  145. data/rdoc/RubyXL/CT_ScRgbColor.html +12 -19
  146. data/rdoc/RubyXL/CT_Scene3D.html +12 -19
  147. data/rdoc/RubyXL/CT_SchemeColor.html +12 -19
  148. data/rdoc/RubyXL/CT_Shape3D.html +12 -19
  149. data/rdoc/RubyXL/CT_ShapeStyle.html +12 -19
  150. data/rdoc/RubyXL/CT_SoftEdgesEffect.html +12 -19
  151. data/rdoc/RubyXL/CT_SphereCoords.html +12 -19
  152. data/rdoc/RubyXL/CT_StretchInfoProperties.html +12 -19
  153. data/rdoc/RubyXL/CT_StyleMatrix.html +12 -19
  154. data/rdoc/RubyXL/CT_StyleMatrixReference.html +12 -19
  155. data/rdoc/RubyXL/CT_SupplementalFont.html +12 -19
  156. data/rdoc/RubyXL/CT_SystemColor.html +12 -19
  157. data/rdoc/RubyXL/CT_TextAutonumberBullet.html +12 -19
  158. data/rdoc/RubyXL/CT_TextBlipBullet.html +12 -19
  159. data/rdoc/RubyXL/CT_TextCharBullet.html +12 -19
  160. data/rdoc/RubyXL/CT_TextCharacterProperties.html +12 -19
  161. data/rdoc/RubyXL/CT_TextFont.html +12 -19
  162. data/rdoc/RubyXL/CT_TextListStyle.html +12 -19
  163. data/rdoc/RubyXL/CT_TextNormalAutofit.html +12 -19
  164. data/rdoc/RubyXL/CT_TextParagraphProperties.html +12 -19
  165. data/rdoc/RubyXL/CT_TextSpacing.html +12 -19
  166. data/rdoc/RubyXL/CT_TextTabStop.html +12 -19
  167. data/rdoc/RubyXL/CT_TextTabStopList.html +12 -19
  168. data/rdoc/RubyXL/CT_TileInfoProperties.html +12 -19
  169. data/rdoc/RubyXL/CT_TintEffect.html +12 -19
  170. data/rdoc/RubyXL/CT_Transform2D.html +12 -19
  171. data/rdoc/RubyXL/CT_TransformEffect.html +12 -19
  172. data/rdoc/RubyXL/CT_Vector3D.html +12 -19
  173. data/rdoc/RubyXL/CT_XYAdjustHandle.html +12 -19
  174. data/rdoc/RubyXL/CalculationChain.html +16 -45
  175. data/rdoc/RubyXL/CalculationChainCell.html +12 -19
  176. data/rdoc/RubyXL/CalculationProperties.html +12 -19
  177. data/rdoc/RubyXL/Cell.html +133 -209
  178. data/rdoc/RubyXL/CellConvenienceMethods.html +168 -522
  179. data/rdoc/RubyXL/CellExt.html +12 -19
  180. data/rdoc/RubyXL/CellSmartTag.html +12 -19
  181. data/rdoc/RubyXL/CellSmartTagProperty.html +12 -19
  182. data/rdoc/RubyXL/CellSmartTags.html +12 -19
  183. data/rdoc/RubyXL/CellStyle.html +12 -19
  184. data/rdoc/RubyXL/CellStyleXFs.html +18 -39
  185. data/rdoc/RubyXL/CellStyles.html +18 -39
  186. data/rdoc/RubyXL/CellValue.html +17 -38
  187. data/rdoc/RubyXL/CellWatch.html +12 -19
  188. data/rdoc/RubyXL/CellWatches.html +12 -19
  189. data/rdoc/RubyXL/CellXFs.html +19 -42
  190. data/rdoc/RubyXL/ChartColorsFile.html +11 -25
  191. data/rdoc/RubyXL/ChartFile.html +18 -49
  192. data/rdoc/RubyXL/ChartStyleFile.html +11 -25
  193. data/rdoc/RubyXL/ChartUserShapesFile.html +11 -25
  194. data/rdoc/RubyXL/Chartsheet.html +19 -68
  195. data/rdoc/RubyXL/ChartsheetPageSetup.html +12 -19
  196. data/rdoc/RubyXL/ChartsheetProperties.html +12 -19
  197. data/rdoc/RubyXL/ChartsheetProtection.html +12 -19
  198. data/rdoc/RubyXL/ChartsheetView.html +12 -19
  199. data/rdoc/RubyXL/ChartsheetViews.html +12 -19
  200. data/rdoc/RubyXL/Color.html +18 -55
  201. data/rdoc/RubyXL/ColorConvenienceClasses/HlsColor.html +18 -65
  202. data/rdoc/RubyXL/ColorConvenienceClasses/RgbColor.html +28 -88
  203. data/rdoc/RubyXL/ColorConvenienceClasses.html +9 -14
  204. data/rdoc/RubyXL/ColorConvenienceMethods.html +14 -33
  205. data/rdoc/RubyXL/ColorFilter.html +12 -19
  206. data/rdoc/RubyXL/ColorScale.html +12 -19
  207. data/rdoc/RubyXL/ColorSet.html +12 -19
  208. data/rdoc/RubyXL/Colors.html +12 -19
  209. data/rdoc/RubyXL/ColumnRange.html +22 -74
  210. data/rdoc/RubyXL/ColumnRanges.html +23 -83
  211. data/rdoc/RubyXL/Comment.html +12 -19
  212. data/rdoc/RubyXL/CommentList.html +12 -19
  213. data/rdoc/RubyXL/CommentsFile.html +17 -51
  214. data/rdoc/RubyXL/ConditionalFormatValue.html +12 -19
  215. data/rdoc/RubyXL/ConditionalFormatting.html +12 -19
  216. data/rdoc/RubyXL/ConditionalFormattingRule.html +12 -19
  217. data/rdoc/RubyXL/Connection.html +99 -0
  218. data/rdoc/RubyXL/ConnectionTable.html +99 -0
  219. data/rdoc/RubyXL/ConnectionTables.html +99 -0
  220. data/rdoc/RubyXL/ConnectionTextField.html +99 -0
  221. data/rdoc/RubyXL/ConnectionTextFields.html +99 -0
  222. data/rdoc/RubyXL/Connections.html +147 -0
  223. data/rdoc/RubyXL/ContentTypeDefault.html +11 -17
  224. data/rdoc/RubyXL/ContentTypeOverride.html +11 -17
  225. data/rdoc/RubyXL/ContentTypes.html +22 -63
  226. data/rdoc/RubyXL/ControlPropertiesFile.html +13 -22
  227. data/rdoc/RubyXL/CorePropertiesFile.html +34 -171
  228. data/rdoc/RubyXL/CustomColor.html +12 -19
  229. data/rdoc/RubyXL/CustomColorList.html +12 -19
  230. data/rdoc/RubyXL/CustomFilter.html +12 -19
  231. data/rdoc/RubyXL/CustomFilters.html +12 -19
  232. data/rdoc/RubyXL/CustomGeometry.html +12 -19
  233. data/rdoc/RubyXL/CustomProperties.html +12 -19
  234. data/rdoc/RubyXL/CustomPropertiesFile.html +11 -25
  235. data/rdoc/RubyXL/CustomProperty.html +12 -19
  236. data/rdoc/RubyXL/CustomPropertyFile.html +11 -25
  237. data/rdoc/RubyXL/CustomSheetView.html +12 -19
  238. data/rdoc/RubyXL/CustomSheetViews.html +12 -19
  239. data/rdoc/RubyXL/CustomWorkbookView.html +12 -19
  240. data/rdoc/RubyXL/CustomWorkbookViews.html +12 -19
  241. data/rdoc/RubyXL/CustomXMLFile.html +11 -22
  242. data/rdoc/RubyXL/DXF.html +12 -19
  243. data/rdoc/RubyXL/DXFs.html +12 -19
  244. data/rdoc/RubyXL/DataBar.html +12 -19
  245. data/rdoc/RubyXL/DataConsolidate.html +12 -19
  246. data/rdoc/RubyXL/DataConsolidationReference.html +12 -19
  247. data/rdoc/RubyXL/DataConsolidationReferences.html +12 -19
  248. data/rdoc/RubyXL/DataType.html +10 -39
  249. data/rdoc/RubyXL/DataValidation.html +12 -19
  250. data/rdoc/RubyXL/DataValidations.html +12 -19
  251. data/rdoc/RubyXL/DateGroupItem.html +12 -19
  252. data/rdoc/RubyXL/DefinedName.html +12 -19
  253. data/rdoc/RubyXL/DefinedNameExt.html +12 -19
  254. data/rdoc/RubyXL/DefinedNames.html +12 -19
  255. data/rdoc/RubyXL/DefinedNamesExt.html +12 -19
  256. data/rdoc/RubyXL/DocumentPropertiesFile.html +21 -68
  257. data/rdoc/RubyXL/DrawingFile.html +18 -49
  258. data/rdoc/RubyXL/DynamicFilter.html +12 -19
  259. data/rdoc/RubyXL/EmbeddedControl.html +12 -19
  260. data/rdoc/RubyXL/EmbeddedControls.html +12 -19
  261. data/rdoc/RubyXL/Extension.html +12 -19
  262. data/rdoc/RubyXL/ExtensionStorageArea.html +12 -19
  263. data/rdoc/RubyXL/Extents.html +12 -19
  264. data/rdoc/RubyXL/ExternalBook.html +12 -19
  265. data/rdoc/RubyXL/ExternalLinksFile.html +18 -49
  266. data/rdoc/RubyXL/ExternalReference.html +12 -19
  267. data/rdoc/RubyXL/ExternalReferences.html +12 -19
  268. data/rdoc/RubyXL/ExtraColorSchemeList.html +12 -19
  269. data/rdoc/RubyXL/FieldItem.html +12 -19
  270. data/rdoc/RubyXL/FileRecoveryProperties.html +12 -19
  271. data/rdoc/RubyXL/FileSharing.html +12 -19
  272. data/rdoc/RubyXL/FileVersion.html +12 -19
  273. data/rdoc/RubyXL/Fill.html +18 -39
  274. data/rdoc/RubyXL/Fills.html +18 -39
  275. data/rdoc/RubyXL/FilterContainer.html +12 -19
  276. data/rdoc/RubyXL/FloatNode.html +11 -17
  277. data/rdoc/RubyXL/FloatValue.html +11 -17
  278. data/rdoc/RubyXL/Font.html +21 -59
  279. data/rdoc/RubyXL/FontConvenienceMethods.html +48 -237
  280. data/rdoc/RubyXL/FontScheme.html +12 -19
  281. data/rdoc/RubyXL/Fonts.html +18 -39
  282. data/rdoc/RubyXL/Formula.html +12 -19
  283. data/rdoc/RubyXL/FunctionGroup.html +12 -19
  284. data/rdoc/RubyXL/FunctionGroups.html +12 -19
  285. data/rdoc/RubyXL/GenericStorageObject.html +21 -84
  286. data/rdoc/RubyXL/GradientFill.html +12 -19
  287. data/rdoc/RubyXL/HeaderFooterSettings.html +12 -19
  288. data/rdoc/RubyXL/Hyperlink.html +12 -19
  289. data/rdoc/RubyXL/HyperlinkRelFile.html +11 -22
  290. data/rdoc/RubyXL/Hyperlinks.html +12 -19
  291. data/rdoc/RubyXL/IconFilter.html +12 -19
  292. data/rdoc/RubyXL/IconSet.html +12 -19
  293. data/rdoc/RubyXL/IgnoredError.html +12 -19
  294. data/rdoc/RubyXL/IgnoredErrors.html +12 -19
  295. data/rdoc/RubyXL/IndexedColors.html +12 -19
  296. data/rdoc/RubyXL/InputCells.html +12 -19
  297. data/rdoc/RubyXL/IntegerNode.html +11 -17
  298. data/rdoc/RubyXL/IntegerValue.html +11 -17
  299. data/rdoc/RubyXL/LegacyCell.html +13 -66
  300. data/rdoc/RubyXL/LegacyWorksheet.html +25 -99
  301. data/rdoc/RubyXL/MRUColors.html +12 -19
  302. data/rdoc/RubyXL/MacrosFile.html +11 -25
  303. data/rdoc/RubyXL/MergedCell.html +12 -19
  304. data/rdoc/RubyXL/MergedCells.html +12 -19
  305. data/rdoc/RubyXL/NumFmt.html +12 -19
  306. data/rdoc/RubyXL/NumberFormat.html +18 -39
  307. data/rdoc/RubyXL/NumberFormats.html +18 -45
  308. data/rdoc/RubyXL/OLEObject.html +12 -19
  309. data/rdoc/RubyXL/OLEObjectFile.html +11 -25
  310. data/rdoc/RubyXL/OLEObjects.html +12 -19
  311. data/rdoc/RubyXL/OLESize.html +12 -19
  312. data/rdoc/RubyXL/OOXMLContainerObject.html +35 -132
  313. data/rdoc/RubyXL/OOXMLIgnored.html +19 -53
  314. data/rdoc/RubyXL/OOXMLObject.html +14 -25
  315. data/rdoc/RubyXL/OOXMLObjectClassMethods.html +91 -183
  316. data/rdoc/RubyXL/OOXMLObjectInstanceMethods.html +48 -185
  317. data/rdoc/RubyXL/OOXMLRelationshipsFile.html +47 -200
  318. data/rdoc/RubyXL/OOXMLTopLevelObject.html +36 -133
  319. data/rdoc/RubyXL/OdbcOleDbProperties.html +99 -0
  320. data/rdoc/RubyXL/Offset.html +12 -19
  321. data/rdoc/RubyXL/OlapProperties.html +99 -0
  322. data/rdoc/RubyXL/OleItem.html +99 -0
  323. data/rdoc/RubyXL/OleItems.html +99 -0
  324. data/rdoc/RubyXL/OleLink.html +99 -0
  325. data/rdoc/RubyXL/OutlineProperties.html +12 -19
  326. data/rdoc/RubyXL/PageMargins.html +12 -19
  327. data/rdoc/RubyXL/PageSetup.html +12 -19
  328. data/rdoc/RubyXL/PageSetupProperties.html +12 -19
  329. data/rdoc/RubyXL/Pane.html +12 -19
  330. data/rdoc/RubyXL/Parser.html +22 -56
  331. data/rdoc/RubyXL/PatternFill.html +12 -19
  332. data/rdoc/RubyXL/PhoneticProperties.html +12 -19
  333. data/rdoc/RubyXL/PhoneticRun.html +12 -19
  334. data/rdoc/RubyXL/PivotArea.html +12 -19
  335. data/rdoc/RubyXL/PivotCache.html +12 -19
  336. data/rdoc/RubyXL/PivotCacheDefinitionFile.html +13 -30
  337. data/rdoc/RubyXL/PivotCacheRecordsFile.html +11 -25
  338. data/rdoc/RubyXL/PivotCaches.html +12 -19
  339. data/rdoc/RubyXL/PivotReference.html +12 -19
  340. data/rdoc/RubyXL/PivotReferences.html +12 -19
  341. data/rdoc/RubyXL/PivotTableFile.html +13 -30
  342. data/rdoc/RubyXL/PivotTableSelection.html +12 -19
  343. data/rdoc/RubyXL/PresetGeometry.html +12 -19
  344. data/rdoc/RubyXL/PrintOptions.html +12 -19
  345. data/rdoc/RubyXL/PrinterSettingsFile.html +11 -25
  346. data/rdoc/RubyXL/ProtectedRange.html +12 -19
  347. data/rdoc/RubyXL/ProtectedRanges.html +12 -19
  348. data/rdoc/RubyXL/Protection.html +12 -19
  349. data/rdoc/RubyXL/QueryParameter.html +99 -0
  350. data/rdoc/RubyXL/QueryParameters.html +99 -0
  351. data/rdoc/RubyXL/QueryTable.html +155 -0
  352. data/rdoc/RubyXL/QueryTableDeletedField.html +99 -0
  353. data/rdoc/RubyXL/QueryTableDeletedFields.html +99 -0
  354. data/rdoc/RubyXL/QueryTableField.html +99 -0
  355. data/rdoc/RubyXL/QueryTableFields.html +99 -0
  356. data/rdoc/RubyXL/QueryTableRefresh.html +99 -0
  357. data/rdoc/RubyXL/RID.html +11 -17
  358. data/rdoc/RubyXL/RawOOXML.html +20 -60
  359. data/rdoc/RubyXL/Reference.html +62 -228
  360. data/rdoc/RubyXL/Relationship.html +11 -17
  361. data/rdoc/RubyXL/RelationshipSupport/ClassMehods.html +13 -32
  362. data/rdoc/RubyXL/RelationshipSupport.html +25 -120
  363. data/rdoc/RubyXL/RevisionPointer.html +12 -22
  364. data/rdoc/RubyXL/RichText.html +19 -39
  365. data/rdoc/RubyXL/RichTextRun.html +17 -38
  366. data/rdoc/RubyXL/Row.html +33 -168
  367. data/rdoc/RubyXL/RowExt.html +12 -19
  368. data/rdoc/RubyXL/RunProperties.html +12 -19
  369. data/rdoc/RubyXL/Scenario.html +12 -19
  370. data/rdoc/RubyXL/Scenarios.html +12 -19
  371. data/rdoc/RubyXL/Selection.html +16 -37
  372. data/rdoc/RubyXL/ShapeGuide.html +12 -19
  373. data/rdoc/RubyXL/ShapeTextRectangle.html +12 -19
  374. data/rdoc/RubyXL/SharedStringsTable.html +37 -147
  375. data/rdoc/RubyXL/Sheet.html +12 -19
  376. data/rdoc/RubyXL/SheetCalculationProperties.html +12 -19
  377. data/rdoc/RubyXL/SheetData.html +19 -53
  378. data/rdoc/RubyXL/SheetDataExt.html +12 -19
  379. data/rdoc/RubyXL/SheetDataSet.html +12 -19
  380. data/rdoc/RubyXL/SheetMetadata.html +108 -0
  381. data/rdoc/RubyXL/SheetName.html +12 -19
  382. data/rdoc/RubyXL/SheetNames.html +12 -19
  383. data/rdoc/RubyXL/Sheets.html +12 -19
  384. data/rdoc/RubyXL/SlicerCacheFile.html +11 -25
  385. data/rdoc/RubyXL/SlicerFile.html +11 -25
  386. data/rdoc/RubyXL/SmartTagProperties.html +12 -19
  387. data/rdoc/RubyXL/SmartTagType.html +12 -19
  388. data/rdoc/RubyXL/SmartTagTypes.html +12 -19
  389. data/rdoc/RubyXL/SmartTags.html +12 -19
  390. data/rdoc/RubyXL/SortCondition.html +12 -19
  391. data/rdoc/RubyXL/SortState.html +12 -19
  392. data/rdoc/RubyXL/Sqref.html +19 -53
  393. data/rdoc/RubyXL/Stop.html +12 -19
  394. data/rdoc/RubyXL/StringNode.html +11 -17
  395. data/rdoc/RubyXL/StringNodeW3C.html +20 -54
  396. data/rdoc/RubyXL/StringValue.html +11 -17
  397. data/rdoc/RubyXL/Stylesheet.html +34 -117
  398. data/rdoc/RubyXL/TableFile.html +11 -25
  399. data/rdoc/RubyXL/TableParts.html +11 -17
  400. data/rdoc/RubyXL/TableStyle.html +12 -19
  401. data/rdoc/RubyXL/TableStyles.html +12 -19
  402. data/rdoc/RubyXL/Text.html +22 -67
  403. data/rdoc/RubyXL/TextImportSettings.html +99 -0
  404. data/rdoc/RubyXL/Theme.html +19 -75
  405. data/rdoc/RubyXL/ThemeElements.html +12 -19
  406. data/rdoc/RubyXL/ThumbnailFile.html +11 -25
  407. data/rdoc/RubyXL/Top10.html +12 -19
  408. data/rdoc/RubyXL/VMLDrawingFile.html +14 -32
  409. data/rdoc/RubyXL/Variant.html +12 -19
  410. data/rdoc/RubyXL/Vector.html +17 -38
  411. data/rdoc/RubyXL/VectorValue.html +11 -17
  412. data/rdoc/RubyXL/VisualProperties.html +12 -19
  413. data/rdoc/RubyXL/WebPublishObject.html +12 -19
  414. data/rdoc/RubyXL/WebPublishObjects.html +12 -19
  415. data/rdoc/RubyXL/WebPublishingItem.html +12 -19
  416. data/rdoc/RubyXL/WebPublishingItems.html +12 -19
  417. data/rdoc/RubyXL/WebPublishingProperties.html +12 -19
  418. data/rdoc/RubyXL/WebQueryProperties.html +99 -0
  419. data/rdoc/RubyXL/Workbook.html +486 -227
  420. data/rdoc/RubyXL/WorkbookConvenienceMethods.html +130 -888
  421. data/rdoc/RubyXL/WorkbookProperties.html +12 -19
  422. data/rdoc/RubyXL/WorkbookProtection.html +12 -19
  423. data/rdoc/RubyXL/WorkbookRoot.html +27 -114
  424. data/rdoc/RubyXL/WorkbookView.html +12 -19
  425. data/rdoc/RubyXL/WorkbookViews.html +12 -19
  426. data/rdoc/RubyXL/Worksheet.html +92 -121
  427. data/rdoc/RubyXL/WorksheetConvenienceMethods.html +298 -1109
  428. data/rdoc/RubyXL/WorksheetDimensions.html +12 -19
  429. data/rdoc/RubyXL/WorksheetFormatProperties.html +11 -17
  430. data/rdoc/RubyXL/WorksheetProperties.html +12 -19
  431. data/rdoc/RubyXL/WorksheetProtection.html +12 -19
  432. data/rdoc/RubyXL/WorksheetView.html +12 -19
  433. data/rdoc/RubyXL/WorksheetViews.html +12 -19
  434. data/rdoc/RubyXL/XF.html +12 -19
  435. data/rdoc/RubyXL.html +39 -318
  436. data/rdoc/created.rid +45 -38
  437. data/rdoc/css/rdoc.css +55 -6
  438. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  439. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  440. data/rdoc/index.html +33 -373
  441. data/rdoc/js/darkfish.js +22 -99
  442. data/rdoc/js/navigation.js +4 -41
  443. data/rdoc/js/navigation.js.gz +0 -0
  444. data/rdoc/js/search.js +32 -31
  445. data/rdoc/js/search_index.js +1 -1
  446. data/rdoc/js/search_index.js.gz +0 -0
  447. data/rdoc/js/searcher.js +6 -6
  448. data/rdoc/js/searcher.js.gz +0 -0
  449. data/rdoc/table_of_contents.html +205 -45
  450. data/rubyXL.gemspec +53 -29
  451. data/spec/lib/cell_spec.rb +57 -6
  452. data/spec/lib/color_spec.rb +2 -1
  453. data/spec/lib/parser_spec.rb +24 -27
  454. data/spec/lib/reference_spec.rb +9 -3
  455. data/spec/lib/rgb_color_spec.rb +27 -0
  456. data/spec/lib/stylesheet_spec.rb +8 -11
  457. data/spec/lib/text_spec.rb +1 -5
  458. data/spec/lib/workbook_spec.rb +25 -4
  459. data/spec/lib/worksheet_spec.rb +873 -479
  460. data/spec/spec_helper.rb +2 -0
  461. data/test/test_parse_write.rb +15 -15
  462. metadata +54 -10
  463. data/rdoc/js/jquery.js +0 -4
@@ -0,0 +1,714 @@
1
+ module RubyXL
2
+ module WorksheetConvenienceMethods
3
+ NAME = 0
4
+ SIZE = 1
5
+ COLOR = 2
6
+ ITALICS = 3
7
+ BOLD = 4
8
+ UNDERLINE = 5
9
+ STRIKETHROUGH = 6
10
+
11
+ def insert_cell(row = 0, col = 0, data = nil, formula = nil, shift = nil)
12
+ validate_workbook
13
+ ensure_cell_exists(row, col)
14
+
15
+ case shift
16
+ when nil then # No shifting at all
17
+ when :right then
18
+ sheet_data.rows[row].insert_cell_shift_right(nil, col)
19
+ when :down then
20
+ add_row(sheet_data.size, :cells => Array.new(sheet_data.rows[row].size))
21
+ (sheet_data.size - 1).downto(row + 1) { |index|
22
+ old_row = sheet_data.rows[index - 1]
23
+ if old_row.nil? then
24
+ sheet_data.rows[index] = nil
25
+ else
26
+ new_row = sheet_data.rows[index] || add_row(index)
27
+ new_row.cells[col] = old_row.cells[col]
28
+ end
29
+ }
30
+ else
31
+ raise 'invalid shift option'
32
+ end
33
+
34
+ return add_cell(row, col, data, formula)
35
+ end
36
+
37
+ # by default, only sets cell to nil
38
+ # if :left is specified, method will shift row contents to the right of the deleted cell to the left
39
+ # if :up is specified, method will shift column contents below the deleted cell upward
40
+ def delete_cell(row_index = 0, column_index=0, shift=nil)
41
+ validate_workbook
42
+ validate_nonnegative(row_index)
43
+ validate_nonnegative(column_index)
44
+
45
+ row = sheet_data[row_index]
46
+ old_cell = row && row[column_index]
47
+
48
+ case shift
49
+ when nil then
50
+ row.cells[column_index] = nil if row
51
+ when :left then
52
+ row.delete_cell_shift_left(column_index) if row
53
+ when :up then
54
+ (row_index...(sheet_data.size - 1)).each { |index|
55
+ old_row = sheet_data.rows[index + 1]
56
+ if old_row.nil? then
57
+ sheet_data.rows[index] = nil
58
+ else
59
+ new_row = sheet_data.rows[index] || add_row(index)
60
+ c = new_row.cells[column_index] = old_row.cells[column_index]
61
+ c.row = (index + 1) if c.is_a?(Cell)
62
+ end
63
+ }
64
+ else
65
+ raise 'invalid shift option'
66
+ end
67
+
68
+ return old_cell
69
+ end
70
+
71
+ # Inserts row at row_index, pushes down, copies style from the row above (that's what Excel 2013 does!)
72
+ # NOTE: use of this method will break formulas which reference cells which are being "pushed down"
73
+ def insert_row(row_index = 0)
74
+ validate_workbook
75
+ ensure_cell_exists(row_index)
76
+
77
+ old_row = new_cells = nil
78
+
79
+ if row_index > 0 then
80
+ old_row = sheet_data.rows[row_index - 1]
81
+ if old_row then
82
+ new_cells = old_row.cells.collect { |c|
83
+ if c.nil? then nil
84
+ else nc = RubyXL::Cell.new(:style_index => c.style_index)
85
+ nc.worksheet = self
86
+ nc
87
+ end
88
+ }
89
+ end
90
+ end
91
+
92
+ row0 = sheet_data.rows[0]
93
+ new_cells ||= Array.new((row0 && row0.cells.size) || 0)
94
+
95
+ sheet_data.rows.insert(row_index, nil)
96
+ new_row = add_row(row_index, :cells => new_cells, :style_index => old_row && old_row.style_index)
97
+
98
+ # Update row values for all rows below
99
+ row_index.upto(sheet_data.rows.size - 1) { |r|
100
+ row = sheet_data.rows[r]
101
+ next if row.nil?
102
+ row.cells.each_with_index { |cell, c|
103
+ next if cell.nil?
104
+ cell.r = RubyXL::Reference.new(r, c)
105
+ }
106
+ }
107
+
108
+ # Update merged cells for all rows below
109
+ if self.merged_cells then
110
+ merged_cells.each { |mc|
111
+ next if mc.ref.row_range.last < row_index
112
+
113
+ in_merged_cell = mc.ref.row_range.first < row_index
114
+ mc.ref = RubyXL::Reference.new(
115
+ mc.ref.row_range.first + (in_merged_cell ? 0 : 1),
116
+ mc.ref.row_range.last + 1,
117
+ mc.ref.col_range.first,
118
+ mc.ref.col_range.last,
119
+ )
120
+ }
121
+ end
122
+
123
+ return new_row
124
+ end
125
+
126
+ def delete_row(row_index=0)
127
+ validate_workbook
128
+ validate_nonnegative(row_index)
129
+
130
+ deleted = sheet_data.rows.delete_at(row_index)
131
+
132
+ # Update row number of each cell
133
+ row_index.upto(sheet_data.size - 1) { |index|
134
+ row = sheet_data[index]
135
+ row && row.cells.each{ |c| c.row -= 1 unless c.nil? }
136
+ }
137
+
138
+ # Update row number of merged cells
139
+ if self.merged_cells then
140
+ merged_cells.delete_if { |mc| mc.ref.row_range == (row_index..row_index) }
141
+ merged_cells.each { |mc|
142
+ next if mc.ref.row_range.last < row_index
143
+
144
+ in_merged_cell = mc.ref.row_range.first <= row_index
145
+ mc.ref = RubyXL::Reference.new(
146
+ mc.ref.row_range.first - (in_merged_cell ? 0 : 1),
147
+ mc.ref.row_range.last - 1,
148
+ mc.ref.col_range.first,
149
+ mc.ref.col_range.last,
150
+ )
151
+ }
152
+ merged_cells.delete_if { |mc| mc.ref.single_cell? }
153
+ end
154
+
155
+ return deleted
156
+ end
157
+
158
+ # Inserts column at +column_index+, pushes everything right, takes styles from column to left
159
+ # NOTE: use of this method will break formulas which reference cells which are being "pushed right"
160
+ def insert_column(column_index = 0)
161
+ validate_workbook
162
+ ensure_cell_exists(0, column_index)
163
+
164
+ old_range = cols.get_range(column_index)
165
+
166
+ # Go through each cell in column
167
+ sheet_data.rows.each_with_index { |row, row_index|
168
+ next if row.nil? # Do not process blank rows
169
+
170
+ old_cell = row[column_index]
171
+ c = nil
172
+
173
+ if old_cell && old_cell.style_index != 0 &&
174
+ old_range && old_range.style_index != old_cell.style_index then
175
+
176
+ c = RubyXL::Cell.new(:style_index => old_cell.style_index, :worksheet => self,
177
+ :row => row_index, :column => column_index,
178
+ :datatype => RubyXL::DataType::SHARED_STRING)
179
+ end
180
+
181
+ row.insert_cell_shift_right(c, column_index)
182
+ }
183
+
184
+ cols.insert_column(column_index)
185
+
186
+ # Update merged cells for all rows below
187
+ if self.merged_cells then
188
+ merged_cells.each { |mc|
189
+ next if mc.ref.col_range.last < column_index
190
+
191
+ in_merged_cell = mc.ref.row_range.first < column_index
192
+ mc.ref = RubyXL::Reference.new(
193
+ mc.ref.row_range.first,
194
+ mc.ref.row_range.last,
195
+ mc.ref.col_range.first + (in_merged_cell ? 0 : 1),
196
+ mc.ref.col_range.last + 1,
197
+ )
198
+ }
199
+ end
200
+
201
+ # TODO: update column numbers
202
+ end
203
+
204
+ def delete_column(column_index = 0)
205
+ validate_workbook
206
+ validate_nonnegative(column_index)
207
+
208
+ # Delete column
209
+ sheet_data.rows.each { |row| row && row.cells.delete_at(column_index) }
210
+
211
+ # Update column numbers for cells to the right of the deleted column
212
+ sheet_data.rows.each_with_index { |row, row_index|
213
+ next if row.nil?
214
+ row.cells.each_with_index { |c, ci|
215
+ c.column = ci if c.is_a?(Cell)
216
+ }
217
+ }
218
+
219
+ cols.each { |range| range.delete_column(column_index) }
220
+
221
+ # Update row number of merged cells
222
+ return unless self.merged_cells
223
+
224
+ merged_cells.delete_if { |mc| mc.ref.col_range == (column_index..column_index) }
225
+ merged_cells.each { |mc|
226
+ next if mc.ref.col_range.last < column_index
227
+
228
+ in_merged_cell = mc.ref.col_range.first <= column_index
229
+ mc.ref = RubyXL::Reference.new(
230
+ mc.ref.row_range.first,
231
+ mc.ref.row_range.last,
232
+ mc.ref.col_range.first - (in_merged_cell ? 0 : 1),
233
+ mc.ref.col_range.last - 1,
234
+ )
235
+ }
236
+
237
+ merged_cells.delete_if { |mc| mc.ref.single_cell? }
238
+ end
239
+
240
+ def get_row_style(row_index)
241
+ row = sheet_data.rows[row_index]
242
+ (row && row.style_index) || 0
243
+ end
244
+
245
+ def get_row_fill(row = 0)
246
+ (row = sheet_data.rows[row]) && row.get_fill_color
247
+ end
248
+
249
+ def get_row_font_name(row = 0)
250
+ (font = row_font(row)) && font.get_name
251
+ end
252
+
253
+ def get_row_font_size(row = 0)
254
+ (font = row_font(row)) && font.get_size
255
+ end
256
+
257
+ def get_row_font_color(row = 0)
258
+ font = row_font(row)
259
+ color = font && font.color
260
+ color && (color.rgb || '000000')
261
+ end
262
+
263
+ def is_row_italicized(row = 0)
264
+ (font = row_font(row)) && font.is_italic
265
+ end
266
+
267
+ def is_row_bolded(row = 0)
268
+ (font = row_font(row)) && font.is_bold
269
+ end
270
+
271
+ def is_row_underlined(row = 0)
272
+ (font = row_font(row)) && font.is_underlined
273
+ end
274
+
275
+ def is_row_struckthrough(row = 0)
276
+ (font = row_font(row)) && font.is_strikethrough
277
+ end
278
+
279
+ def get_row_height(row = 0)
280
+ validate_workbook
281
+ validate_nonnegative(row)
282
+ row = sheet_data.rows[row]
283
+ row && row.ht || RubyXL::Row::DEFAULT_HEIGHT
284
+ end
285
+
286
+ def get_row_border(row, border_direction)
287
+ validate_workbook
288
+
289
+ border = @workbook.borders[get_row_xf(row).border_id]
290
+ border && border.get_edge_style(border_direction)
291
+ end
292
+
293
+ def get_row_border_color(row, border_direction)
294
+ validate_workbook
295
+
296
+ border = @workbook.borders[get_row_xf(row).border_id]
297
+ border && border.get_edge_color(border_direction)
298
+ end
299
+
300
+ def row_font(row)
301
+ (row = sheet_data.rows[row]) && row.get_font
302
+ end
303
+
304
+ def get_row_alignment(row, is_horizontal)
305
+ validate_workbook
306
+
307
+ xf_obj = get_row_xf(row)
308
+ return nil if xf_obj.alignment.nil?
309
+
310
+ if is_horizontal then return xf_obj.alignment.horizontal
311
+ else return xf_obj.alignment.vertical
312
+ end
313
+ end
314
+
315
+ def get_cols_style_index(column_index)
316
+ validate_nonnegative(column_index)
317
+ range = cols.locate_range(column_index)
318
+ (range && range.style_index) || 0
319
+ end
320
+
321
+ def get_column_font_name(col = 0)
322
+ font = column_font(col)
323
+ font && font.get_name
324
+ end
325
+
326
+ def get_column_font_size(col = 0)
327
+ font = column_font(col)
328
+ font && font.get_size
329
+ end
330
+
331
+ def get_column_font_color(col = 0)
332
+ font = column_font(col)
333
+ font && (font.get_rgb_color || '000000')
334
+ end
335
+
336
+ def is_column_italicized(col = 0)
337
+ font = column_font(col)
338
+ font && font.is_italic
339
+ end
340
+
341
+ def is_column_bolded(col = 0)
342
+ font = column_font(col)
343
+ font && font.is_bold
344
+ end
345
+
346
+ def is_column_underlined(col = 0)
347
+ font = column_font(col)
348
+ font && font.is_underlined
349
+ end
350
+
351
+ def is_column_struckthrough(col = 0)
352
+ font = column_font(col)
353
+ font && font.is_strikethrough
354
+ end
355
+
356
+ # Get raw column width value as stored in the file
357
+ def get_column_width_raw(column_index = 0)
358
+ validate_workbook
359
+ validate_nonnegative(column_index)
360
+
361
+ range = cols.locate_range(column_index)
362
+ range && range.width
363
+ end
364
+
365
+ # Get column width measured in number of digits, as per
366
+ # http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.column%28v=office.14%29.aspx
367
+ def get_column_width(column_index = 0)
368
+ width = get_column_width_raw(column_index)
369
+ return RubyXL::ColumnRange::DEFAULT_WIDTH if width.nil?
370
+ (width - (5.0 / RubyXL::Font::MAX_DIGIT_WIDTH)).round
371
+ end
372
+
373
+ # Set raw column width value
374
+ def change_column_width_raw(column_index, width)
375
+ validate_workbook
376
+ ensure_cell_exists(0, column_index)
377
+ range = cols.get_range(column_index)
378
+ range.width = width
379
+ range.custom_width = true
380
+ end
381
+
382
+ # Get column width measured in number of digits, as per
383
+ # http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.column%28v=office.14%29.aspx
384
+ def change_column_width(column_index, width_in_chars = RubyXL::ColumnRange::DEFAULT_WIDTH)
385
+ change_column_width_raw(column_index, ((width_in_chars + (5.0 / RubyXL::Font::MAX_DIGIT_WIDTH)) * 256).to_i / 256.0)
386
+ end
387
+
388
+ # Helper method to get the style index for a column
389
+ def get_col_style(column_index)
390
+ range = cols.locate_range(column_index)
391
+ (range && range.style_index) || 0
392
+ end
393
+
394
+ def get_column_fill(col=0)
395
+ validate_workbook
396
+ validate_nonnegative(col)
397
+
398
+ @workbook.get_fill_color(get_col_xf(col))
399
+ end
400
+
401
+ def change_column_fill(column_index, color_code = 'ffffff')
402
+ validate_workbook
403
+ RubyXL::Color.validate_color(color_code)
404
+ ensure_cell_exists(0, column_index)
405
+
406
+ cols.get_range(column_index).style_index = @workbook.modify_fill(get_col_style(column_index), color_code)
407
+
408
+ sheet_data.rows.each { |row|
409
+ next if row.nil?
410
+ c = row[column_index]
411
+ next if c.nil?
412
+ c.change_fill(color_code)
413
+ }
414
+ end
415
+
416
+ def get_column_border(col, border_direction)
417
+ validate_workbook
418
+
419
+ xf = @workbook.cell_xfs[get_cols_style_index(col)]
420
+ border = @workbook.borders[xf.border_id]
421
+ border && border.get_edge_style(border_direction)
422
+ end
423
+
424
+ def get_column_border_color(col, border_direction)
425
+ validate_workbook
426
+
427
+ xf = @workbook.cell_xfs[get_cols_style_index(col)]
428
+ border = @workbook.borders[xf.border_id]
429
+ border && border.get_edge_color(border_direction)
430
+ end
431
+
432
+ def column_font(col)
433
+ validate_workbook
434
+
435
+ @workbook.fonts[@workbook.cell_xfs[get_cols_style_index(col)].font_id]
436
+ end
437
+
438
+ def get_column_alignment(col, type)
439
+ validate_workbook
440
+
441
+ xf = @workbook.cell_xfs[get_cols_style_index(col)]
442
+ xf.alignment && xf.alignment.send(type)
443
+ end
444
+
445
+ def change_row_horizontal_alignment(row = 0, alignment = 'center')
446
+ validate_workbook
447
+ validate_nonnegative(row)
448
+ change_row_alignment(row) { |a| a.horizontal = alignment }
449
+ end
450
+
451
+ def change_row_vertical_alignment(row = 0, alignment = 'center')
452
+ validate_workbook
453
+ validate_nonnegative(row)
454
+ change_row_alignment(row) { |a| a.vertical = alignment }
455
+ end
456
+
457
+ def change_row_border(row, direction, weight)
458
+ validate_workbook
459
+ ensure_cell_exists(row)
460
+
461
+ sheet_data.rows[row].style_index = @workbook.modify_border(get_row_style(row), direction, weight)
462
+
463
+ sheet_data[row].cells.each { |c|
464
+ c.change_border(direction, weight) unless c.nil?
465
+ }
466
+ end
467
+
468
+ def change_row_border_color(row, direction, color = '000000')
469
+ validate_workbook
470
+ ensure_cell_exists(row)
471
+ Color.validate_color(color)
472
+
473
+ sheet_data.rows[row].style_index = @workbook.modify_border_color(get_row_style(row), direction, color)
474
+
475
+ sheet_data[row].cells.each { |c|
476
+ c.change_border_color(direction, color) unless c.nil?
477
+ }
478
+ end
479
+
480
+ def change_row_fill(row_index = 0, rgb = 'ffffff')
481
+ validate_workbook
482
+ ensure_cell_exists(row_index)
483
+ Color.validate_color(rgb)
484
+
485
+ sheet_data.rows[row_index].style_index = @workbook.modify_fill(get_row_style(row_index), rgb)
486
+ sheet_data[row_index].cells.each { |c| c.change_fill(rgb) unless c.nil? }
487
+ end
488
+
489
+ # Helper method to update the row styles array
490
+ # change_type - NAME or SIZE or COLOR etc
491
+ # main method to change font, called from each separate font mutator method
492
+ def change_row_font(row_index, change_type, arg, font)
493
+ validate_workbook
494
+ ensure_cell_exists(row_index)
495
+
496
+ xf = workbook.register_new_font(font, get_row_xf(row_index))
497
+ row = sheet_data[row_index]
498
+ row.style_index = workbook.register_new_xf(xf)
499
+ row.cells.each { |c| c.font_switch(change_type, arg) unless c.nil? }
500
+ end
501
+
502
+ def change_row_font_name(row = 0, font_name = 'Verdana')
503
+ ensure_cell_exists(row)
504
+ font = row_font(row).dup
505
+ font.set_name(font_name)
506
+ change_row_font(row, Worksheet::NAME, font_name, font)
507
+ end
508
+
509
+ def change_row_font_size(row = 0, font_size=10)
510
+ ensure_cell_exists(row)
511
+ font = row_font(row).dup
512
+ font.set_size(font_size)
513
+ change_row_font(row, Worksheet::SIZE, font_size, font)
514
+ end
515
+
516
+ def change_row_font_color(row = 0, font_color = '000000')
517
+ ensure_cell_exists(row)
518
+ Color.validate_color(font_color)
519
+ font = row_font(row).dup
520
+ font.set_rgb_color(font_color)
521
+ change_row_font(row, Worksheet::COLOR, font_color, font)
522
+ end
523
+
524
+ def change_row_italics(row = 0, italicized = false)
525
+ ensure_cell_exists(row)
526
+ font = row_font(row).dup
527
+ font.set_italic(italicized)
528
+ change_row_font(row, Worksheet::ITALICS, italicized, font)
529
+ end
530
+
531
+ def change_row_bold(row = 0, bolded = false)
532
+ ensure_cell_exists(row)
533
+ font = row_font(row).dup
534
+ font.set_bold(bolded)
535
+ change_row_font(row, Worksheet::BOLD, bolded, font)
536
+ end
537
+
538
+ def change_row_underline(row = 0, underlined=false)
539
+ ensure_cell_exists(row)
540
+ font = row_font(row).dup
541
+ font.set_underline(underlined)
542
+ change_row_font(row, Worksheet::UNDERLINE, underlined, font)
543
+ end
544
+
545
+ def change_row_strikethrough(row = 0, struckthrough=false)
546
+ ensure_cell_exists(row)
547
+ font = row_font(row).dup
548
+ font.set_strikethrough(struckthrough)
549
+ change_row_font(row, Worksheet::STRIKETHROUGH, struckthrough, font)
550
+ end
551
+
552
+ def change_row_height(row = 0, height = 10)
553
+ validate_workbook
554
+ ensure_cell_exists(row)
555
+
556
+ c = sheet_data.rows[row]
557
+ c.ht = height
558
+ c.custom_height = true
559
+ end
560
+
561
+ # Helper method to update the fonts and cell styles array
562
+ # main method to change font, called from each separate font mutator method
563
+ def change_column_font(column_index, change_type, arg, font, xf)
564
+ validate_workbook
565
+ ensure_cell_exists(0, column_index)
566
+
567
+ xf = workbook.register_new_font(font, xf)
568
+ cols.get_range(column_index).style_index = workbook.register_new_xf(xf)
569
+
570
+ sheet_data.rows.each { |row|
571
+ c = row && row[column_index]
572
+ c.font_switch(change_type, arg) unless c.nil?
573
+ }
574
+ end
575
+
576
+ def change_column_font_name(column_index = 0, font_name = 'Verdana')
577
+ xf = get_col_xf(column_index)
578
+ font = @workbook.fonts[xf.font_id].dup
579
+ font.set_name(font_name)
580
+ change_column_font(column_index, Worksheet::NAME, font_name, font, xf)
581
+ end
582
+
583
+ def change_column_font_size(column_index, font_size=10)
584
+ xf = get_col_xf(column_index)
585
+ font = @workbook.fonts[xf.font_id].dup
586
+ font.set_size(font_size)
587
+ change_column_font(column_index, Worksheet::SIZE, font_size, font, xf)
588
+ end
589
+
590
+ def change_column_font_color(column_index, font_color='000000')
591
+ Color.validate_color(font_color)
592
+
593
+ xf = get_col_xf(column_index)
594
+ font = @workbook.fonts[xf.font_id].dup
595
+ font.set_rgb_color(font_color)
596
+ change_column_font(column_index, Worksheet::COLOR, font_color, font, xf)
597
+ end
598
+
599
+ def change_column_italics(column_index, italicized = false)
600
+ xf = get_col_xf(column_index)
601
+ font = @workbook.fonts[xf.font_id].dup
602
+ font.set_italic(italicized)
603
+ change_column_font(column_index, Worksheet::ITALICS, italicized, font, xf)
604
+ end
605
+
606
+ def change_column_bold(column_index, bolded = false)
607
+ xf = get_col_xf(column_index)
608
+ font = @workbook.fonts[xf.font_id].dup
609
+ font.set_bold(bolded)
610
+ change_column_font(column_index, Worksheet::BOLD, bolded, font, xf)
611
+ end
612
+
613
+ def change_column_underline(column_index, underlined = false)
614
+ xf = get_col_xf(column_index)
615
+ font = @workbook.fonts[xf.font_id].dup
616
+ font.set_underline(underlined)
617
+ change_column_font(column_index, Worksheet::UNDERLINE, underlined, font, xf)
618
+ end
619
+
620
+ def change_column_strikethrough(column_index, struckthrough=false)
621
+ xf = get_col_xf(column_index)
622
+ font = @workbook.fonts[xf.font_id].dup
623
+ font.set_strikethrough(struckthrough)
624
+ change_column_font(column_index, Worksheet::STRIKETHROUGH, struckthrough, font, xf)
625
+ end
626
+
627
+ def change_column_horizontal_alignment(column_index, alignment = 'center')
628
+ change_column_alignment(column_index) { |a| a.horizontal = alignment }
629
+ end
630
+
631
+ def change_column_vertical_alignment(column_index, alignment = 'center')
632
+ change_column_alignment(column_index) { |a| a.vertical = alignment }
633
+ end
634
+
635
+ def change_column_border(column_index, direction, weight)
636
+ validate_workbook
637
+ ensure_cell_exists(0, column_index)
638
+
639
+ cols.get_range(column_index).style_index = @workbook.modify_border(get_col_style(column_index), direction, weight)
640
+
641
+ sheet_data.rows.each { |row|
642
+ next if row.nil?
643
+ c = row.cells[column_index]
644
+ next if c.nil?
645
+ c.change_border(direction, weight)
646
+ }
647
+ end
648
+
649
+ def change_column_border_color(column_index, direction, color)
650
+ validate_workbook
651
+ ensure_cell_exists(0, column_index)
652
+ Color.validate_color(color)
653
+
654
+ cols.get_range(column_index).style_index = @workbook.modify_border_color(get_col_style(column_index), direction, color)
655
+
656
+ sheet_data.rows.each { |row|
657
+ c = row.cells[column_index]
658
+ c.change_border_color(direction, color) unless c.nil?
659
+ }
660
+ end
661
+
662
+ def change_row_alignment(row, &block)
663
+ validate_workbook
664
+ validate_nonnegative(row)
665
+ ensure_cell_exists(row)
666
+
667
+ sheet_data.rows[row].style_index = @workbook.modify_alignment(get_row_style(row), &block)
668
+
669
+ sheet_data[row].cells.each { |c|
670
+ next if c.nil?
671
+ c.style_index = @workbook.modify_alignment(c.style_index, &block)
672
+ }
673
+ end
674
+
675
+ def change_column_alignment(column_index, &block)
676
+ validate_workbook
677
+ ensure_cell_exists(0, column_index)
678
+
679
+ cols.get_range(column_index).style_index = @workbook.modify_alignment(get_col_style(column_index), &block)
680
+ # Excel gets confused if width is not explicitly set for a column that had alignment changes
681
+ change_column_width(column_index) if get_column_width_raw(column_index).nil?
682
+
683
+ sheet_data.rows.each { |row|
684
+ next if row.nil?
685
+ c = row[column_index]
686
+ next if c.nil?
687
+ c.style_index = @workbook.modify_alignment(c.style_index, &block)
688
+ }
689
+ end
690
+
691
+ # Merges cells within a rectangular area
692
+ def merge_cells(start_row, start_col, end_row, end_col)
693
+ validate_workbook
694
+
695
+ self.merged_cells ||= RubyXL::MergedCells.new
696
+ # TODO: add validation to make sure ranges are not intersecting with existing ones
697
+ merged_cells << RubyXL::MergedCell.new(:ref => RubyXL::Reference.new(start_row, end_row, start_col, end_col))
698
+ end
699
+
700
+ def add_validation_list(ref, list_arr)
701
+ # "Any double quote characters in the value should be escaped with another double quote.
702
+ # If the value does not contain a comma, newline or double quote, then the String value should be returned unchanged.
703
+ # If the value contains a comma, newline or double quote, then the String value should be returned enclosed in double quotes."
704
+ expr = '"' + list_arr.collect{ |str| str.gsub('"', '""') }.join(',') + '"'
705
+ self.data_validations ||= RubyXL::DataValidations.new
706
+ self.data_validations <<
707
+ RubyXL::DataValidation.new({:sqref => RubyXL::Reference.new(ref),
708
+ :formula1 => RubyXL::Formula.new(:expression => expr),
709
+ :type => 'list'})
710
+ end
711
+ end
712
+
713
+ RubyXL::Worksheet.send(:include, RubyXL::WorksheetConvenienceMethods) # ruby 2.1 compat
714
+ end