rubyXL 3.3.29 → 3.4.27

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 (466) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +60 -0
  3. data/.rubocop.yml +96 -0
  4. data/CHANGELOG.md +12 -0
  5. data/Gemfile +11 -8
  6. data/LICENSE.txt +1 -1
  7. data/README.rdoc +54 -18
  8. data/Rakefile +29 -29
  9. data/VERSION +1 -1
  10. data/lib/rubyXL/cell.rb +2 -29
  11. data/lib/rubyXL/convenience_methods/cell.rb +276 -0
  12. data/lib/rubyXL/convenience_methods/color.rb +156 -0
  13. data/lib/rubyXL/convenience_methods/font.rb +63 -0
  14. data/lib/rubyXL/convenience_methods/workbook.rb +141 -0
  15. data/lib/rubyXL/convenience_methods/worksheet.rb +714 -0
  16. data/lib/rubyXL/convenience_methods.rb +5 -1122
  17. data/lib/rubyXL/objects/border.rb +0 -3
  18. data/lib/rubyXL/objects/calculation_chain.rb +2 -2
  19. data/lib/rubyXL/objects/cell_style.rb +4 -6
  20. data/lib/rubyXL/objects/chartsheet.rb +8 -12
  21. data/lib/rubyXL/objects/color.rb +3 -5
  22. data/lib/rubyXL/objects/column_range.rb +0 -3
  23. data/lib/rubyXL/objects/comments.rb +1 -4
  24. data/lib/rubyXL/objects/connection.rb +175 -0
  25. data/lib/rubyXL/objects/container_nodes.rb +1 -5
  26. data/lib/rubyXL/objects/content_types.rb +3 -6
  27. data/lib/rubyXL/objects/data_validation.rb +2 -2
  28. data/lib/rubyXL/objects/document_properties.rb +11 -15
  29. data/lib/rubyXL/objects/extensions.rb +0 -2
  30. data/lib/rubyXL/objects/external_links.rb +38 -8
  31. data/lib/rubyXL/objects/fill.rb +2 -5
  32. data/lib/rubyXL/objects/filters.rb +5 -7
  33. data/lib/rubyXL/objects/font.rb +2 -7
  34. data/lib/rubyXL/objects/formula.rb +3 -5
  35. data/lib/rubyXL/objects/ooxml_object.rb +26 -19
  36. data/lib/rubyXL/objects/query_table.rb +104 -0
  37. data/lib/rubyXL/objects/reference.rb +17 -12
  38. data/lib/rubyXL/objects/relationships.rb +13 -13
  39. data/lib/rubyXL/objects/root.rb +0 -2
  40. data/lib/rubyXL/objects/shared_strings.rb +3 -6
  41. data/lib/rubyXL/objects/sheet_common.rb +1 -3
  42. data/lib/rubyXL/objects/sheet_data.rb +38 -11
  43. data/lib/rubyXL/objects/simple_types.rb +19 -2
  44. data/lib/rubyXL/objects/storage.rb +59 -48
  45. data/lib/rubyXL/objects/stylesheet.rb +8 -15
  46. data/lib/rubyXL/objects/text.rb +5 -7
  47. data/lib/rubyXL/objects/theme.rb +24 -8
  48. data/lib/rubyXL/objects/workbook.rb +141 -33
  49. data/lib/rubyXL/objects/worksheet.rb +46 -32
  50. data/lib/rubyXL/parser.rb +1 -3
  51. data/lib/rubyXL/worksheet.rb +91 -91
  52. data/lib/rubyXL.rb +1 -1
  53. data/rdoc/README_rdoc.html +209 -151
  54. data/rdoc/RubyXL/AExtension.html +33 -69
  55. data/rdoc/RubyXL/AExtensionStorageArea.html +12 -18
  56. data/rdoc/RubyXL/ActiveX.html +26 -52
  57. data/rdoc/RubyXL/ActiveXBinary.html +12 -23
  58. data/rdoc/RubyXL/AdjustHandleList.html +13 -20
  59. data/rdoc/RubyXL/Alignment.html +13 -20
  60. data/rdoc/RubyXL/AlternateContent.html +12 -18
  61. data/rdoc/RubyXL/AlternateUrls.html +99 -0
  62. data/rdoc/RubyXL/Authors.html +13 -20
  63. data/rdoc/RubyXL/AutoFilter.html +13 -20
  64. data/rdoc/RubyXL/AutoFilterColumn.html +13 -20
  65. data/rdoc/RubyXL/BinaryImageFile.html +12 -26
  66. data/rdoc/RubyXL/BodyProperties.html +13 -20
  67. data/rdoc/RubyXL/BooleanNode.html +12 -18
  68. data/rdoc/RubyXL/BooleanValue.html +12 -18
  69. data/rdoc/RubyXL/Border.html +49 -101
  70. data/rdoc/RubyXL/BorderEdge.html +32 -61
  71. data/rdoc/RubyXL/Borders.html +25 -44
  72. data/rdoc/RubyXL/Break.html +13 -20
  73. data/rdoc/RubyXL/BreakList.html +13 -20
  74. data/rdoc/RubyXL/CT_AdjPoint2D.html +13 -20
  75. data/rdoc/RubyXL/CT_AlphaBiLevelEffect.html +13 -20
  76. data/rdoc/RubyXL/CT_AlphaModulateEffect.html +13 -20
  77. data/rdoc/RubyXL/CT_AlphaModulateFixedEffect.html +13 -20
  78. data/rdoc/RubyXL/CT_AlphaOutsetEffect.html +13 -20
  79. data/rdoc/RubyXL/CT_AlphaReplaceEffect.html +13 -20
  80. data/rdoc/RubyXL/CT_Backdrop.html +13 -20
  81. data/rdoc/RubyXL/CT_Bevel.html +13 -20
  82. data/rdoc/RubyXL/CT_BiLevelEffect.html +13 -20
  83. data/rdoc/RubyXL/CT_BlendEffect.html +13 -20
  84. data/rdoc/RubyXL/CT_Blip.html +13 -20
  85. data/rdoc/RubyXL/CT_BlipFillProperties.html +13 -20
  86. data/rdoc/RubyXL/CT_BlurEffect.html +13 -20
  87. data/rdoc/RubyXL/CT_Camera.html +13 -20
  88. data/rdoc/RubyXL/CT_Color.html +13 -20
  89. data/rdoc/RubyXL/CT_ColorChangeEffect.html +13 -20
  90. data/rdoc/RubyXL/CT_ColorMapping.html +13 -20
  91. data/rdoc/RubyXL/CT_ColorScheme.html +13 -20
  92. data/rdoc/RubyXL/CT_ColorSchemeAndMapping.html +13 -20
  93. data/rdoc/RubyXL/CT_ConnectionSite.html +13 -20
  94. data/rdoc/RubyXL/CT_ConnectionSiteList.html +13 -20
  95. data/rdoc/RubyXL/CT_DashStop.html +13 -20
  96. data/rdoc/RubyXL/CT_DashStopList.html +13 -20
  97. data/rdoc/RubyXL/CT_DefaultShapeDefinition.html +13 -20
  98. data/rdoc/RubyXL/CT_DuotoneEffect.html +13 -20
  99. data/rdoc/RubyXL/CT_EffectContainer.html +13 -20
  100. data/rdoc/RubyXL/CT_EffectList.html +13 -20
  101. data/rdoc/RubyXL/CT_EffectReference.html +13 -20
  102. data/rdoc/RubyXL/CT_EffectStyleItem.html +13 -20
  103. data/rdoc/RubyXL/CT_EffectStyleList.html +13 -20
  104. data/rdoc/RubyXL/CT_EmbeddedWAVAudioFile.html +13 -20
  105. data/rdoc/RubyXL/CT_FillEffect.html +13 -20
  106. data/rdoc/RubyXL/CT_FillOverlayEffect.html +13 -20
  107. data/rdoc/RubyXL/CT_FillStyleList.html +13 -20
  108. data/rdoc/RubyXL/CT_FlatText.html +13 -20
  109. data/rdoc/RubyXL/CT_FontCollection.html +13 -20
  110. data/rdoc/RubyXL/CT_FontReference.html +13 -20
  111. data/rdoc/RubyXL/CT_GeomGuideList.html +13 -20
  112. data/rdoc/RubyXL/CT_GlowEffect.html +13 -20
  113. data/rdoc/RubyXL/CT_GradientFillProperties.html +13 -20
  114. data/rdoc/RubyXL/CT_GradientStop.html +13 -20
  115. data/rdoc/RubyXL/CT_GradientStopList.html +13 -20
  116. data/rdoc/RubyXL/CT_HSLEffect.html +13 -20
  117. data/rdoc/RubyXL/CT_HslColor.html +13 -20
  118. data/rdoc/RubyXL/CT_Hyperlink.html +13 -20
  119. data/rdoc/RubyXL/CT_InnerShadowEffect.html +13 -20
  120. data/rdoc/RubyXL/CT_LightRig.html +13 -20
  121. data/rdoc/RubyXL/CT_LineEndProperties.html +13 -20
  122. data/rdoc/RubyXL/CT_LineJoinMiterProperties.html +13 -20
  123. data/rdoc/RubyXL/CT_LineProperties.html +13 -20
  124. data/rdoc/RubyXL/CT_LineStyleList.html +13 -20
  125. data/rdoc/RubyXL/CT_LinearShadeProperties.html +13 -20
  126. data/rdoc/RubyXL/CT_LuminanceEffect.html +13 -20
  127. data/rdoc/RubyXL/CT_ObjectStyleDefaults.html +13 -20
  128. data/rdoc/RubyXL/CT_OuterShadowEffect.html +13 -20
  129. data/rdoc/RubyXL/CT_Path2D.html +13 -20
  130. data/rdoc/RubyXL/CT_Path2DArcTo.html +13 -20
  131. data/rdoc/RubyXL/CT_Path2DCubicBezierTo.html +13 -20
  132. data/rdoc/RubyXL/CT_Path2DList.html +13 -20
  133. data/rdoc/RubyXL/CT_Path2DQuadBezierTo.html +13 -20
  134. data/rdoc/RubyXL/CT_Path2DTo.html +13 -20
  135. data/rdoc/RubyXL/CT_PathShadeProperties.html +13 -20
  136. data/rdoc/RubyXL/CT_PatternFillProperties.html +13 -20
  137. data/rdoc/RubyXL/CT_Point3D.html +13 -20
  138. data/rdoc/RubyXL/CT_PolarAdjustHandle.html +13 -20
  139. data/rdoc/RubyXL/CT_PresetColor.html +13 -20
  140. data/rdoc/RubyXL/CT_PresetLineDashProperties.html +13 -20
  141. data/rdoc/RubyXL/CT_PresetShadowEffect.html +13 -20
  142. data/rdoc/RubyXL/CT_PresetTextShape.html +13 -20
  143. data/rdoc/RubyXL/CT_ReflectionEffect.html +13 -20
  144. data/rdoc/RubyXL/CT_RelativeOffsetEffect.html +13 -20
  145. data/rdoc/RubyXL/CT_RelativeRect.html +13 -20
  146. data/rdoc/RubyXL/CT_SRgbColor.html +13 -20
  147. data/rdoc/RubyXL/CT_ScRgbColor.html +13 -20
  148. data/rdoc/RubyXL/CT_Scene3D.html +13 -20
  149. data/rdoc/RubyXL/CT_SchemeColor.html +13 -20
  150. data/rdoc/RubyXL/CT_Shape3D.html +13 -20
  151. data/rdoc/RubyXL/CT_ShapeStyle.html +13 -20
  152. data/rdoc/RubyXL/CT_SoftEdgesEffect.html +13 -20
  153. data/rdoc/RubyXL/CT_SphereCoords.html +13 -20
  154. data/rdoc/RubyXL/CT_StretchInfoProperties.html +13 -20
  155. data/rdoc/RubyXL/CT_StyleMatrix.html +13 -20
  156. data/rdoc/RubyXL/CT_StyleMatrixReference.html +13 -20
  157. data/rdoc/RubyXL/CT_SupplementalFont.html +13 -20
  158. data/rdoc/RubyXL/CT_SystemColor.html +13 -20
  159. data/rdoc/RubyXL/CT_TextAutonumberBullet.html +13 -20
  160. data/rdoc/RubyXL/CT_TextBlipBullet.html +13 -20
  161. data/rdoc/RubyXL/CT_TextCharBullet.html +13 -20
  162. data/rdoc/RubyXL/CT_TextCharacterProperties.html +13 -20
  163. data/rdoc/RubyXL/CT_TextFont.html +13 -20
  164. data/rdoc/RubyXL/CT_TextListStyle.html +13 -20
  165. data/rdoc/RubyXL/CT_TextNormalAutofit.html +13 -20
  166. data/rdoc/RubyXL/CT_TextParagraphProperties.html +13 -20
  167. data/rdoc/RubyXL/CT_TextSpacing.html +13 -20
  168. data/rdoc/RubyXL/CT_TextTabStop.html +13 -20
  169. data/rdoc/RubyXL/CT_TextTabStopList.html +13 -20
  170. data/rdoc/RubyXL/CT_TileInfoProperties.html +13 -20
  171. data/rdoc/RubyXL/CT_TintEffect.html +13 -20
  172. data/rdoc/RubyXL/CT_Transform2D.html +13 -20
  173. data/rdoc/RubyXL/CT_TransformEffect.html +13 -20
  174. data/rdoc/RubyXL/CT_Vector3D.html +13 -20
  175. data/rdoc/RubyXL/CT_XYAdjustHandle.html +13 -20
  176. data/rdoc/RubyXL/CalculationChain.html +23 -50
  177. data/rdoc/RubyXL/CalculationChainCell.html +13 -20
  178. data/rdoc/RubyXL/CalculationProperties.html +13 -20
  179. data/rdoc/RubyXL/Cell.html +205 -253
  180. data/rdoc/RubyXL/CellConvenienceMethods.html +437 -571
  181. data/rdoc/RubyXL/CellExt.html +13 -20
  182. data/rdoc/RubyXL/CellSmartTag.html +13 -20
  183. data/rdoc/RubyXL/CellSmartTagProperty.html +13 -20
  184. data/rdoc/RubyXL/CellSmartTags.html +13 -20
  185. data/rdoc/RubyXL/CellStyle.html +13 -20
  186. data/rdoc/RubyXL/CellStyleXFs.html +25 -44
  187. data/rdoc/RubyXL/CellStyles.html +25 -44
  188. data/rdoc/RubyXL/CellValue.html +24 -43
  189. data/rdoc/RubyXL/CellWatch.html +13 -20
  190. data/rdoc/RubyXL/CellWatches.html +13 -20
  191. data/rdoc/RubyXL/CellXFs.html +26 -47
  192. data/rdoc/RubyXL/ChartColorsFile.html +12 -26
  193. data/rdoc/RubyXL/ChartFile.html +25 -54
  194. data/rdoc/RubyXL/ChartStyleFile.html +12 -26
  195. data/rdoc/RubyXL/ChartUserShapesFile.html +12 -26
  196. data/rdoc/RubyXL/Chartsheet.html +26 -73
  197. data/rdoc/RubyXL/ChartsheetPageSetup.html +13 -20
  198. data/rdoc/RubyXL/ChartsheetProperties.html +13 -20
  199. data/rdoc/RubyXL/ChartsheetProtection.html +13 -20
  200. data/rdoc/RubyXL/ChartsheetView.html +13 -20
  201. data/rdoc/RubyXL/ChartsheetViews.html +13 -20
  202. data/rdoc/RubyXL/Color.html +24 -48
  203. data/rdoc/RubyXL/ColorConvenienceClasses/HlsColor.html +246 -0
  204. data/rdoc/RubyXL/ColorConvenienceClasses/RgbColor.html +285 -0
  205. data/rdoc/RubyXL/ColorConvenienceClasses.html +91 -0
  206. data/rdoc/RubyXL/ColorConvenienceMethods.html +139 -0
  207. data/rdoc/RubyXL/ColorFilter.html +13 -20
  208. data/rdoc/RubyXL/ColorScale.html +13 -20
  209. data/rdoc/RubyXL/ColorSet.html +13 -20
  210. data/rdoc/RubyXL/Colors.html +13 -20
  211. data/rdoc/RubyXL/ColumnRange.html +41 -87
  212. data/rdoc/RubyXL/ColumnRanges.html +48 -100
  213. data/rdoc/RubyXL/Comment.html +13 -20
  214. data/rdoc/RubyXL/CommentList.html +13 -20
  215. data/rdoc/RubyXL/CommentsFile.html +24 -56
  216. data/rdoc/RubyXL/ConditionalFormatValue.html +13 -20
  217. data/rdoc/RubyXL/ConditionalFormatting.html +13 -20
  218. data/rdoc/RubyXL/ConditionalFormattingRule.html +13 -20
  219. data/rdoc/RubyXL/Connection.html +99 -0
  220. data/rdoc/RubyXL/ConnectionTable.html +99 -0
  221. data/rdoc/RubyXL/ConnectionTables.html +99 -0
  222. data/rdoc/RubyXL/ConnectionTextField.html +99 -0
  223. data/rdoc/RubyXL/ConnectionTextFields.html +99 -0
  224. data/rdoc/RubyXL/Connections.html +149 -0
  225. data/rdoc/RubyXL/ContentTypeDefault.html +12 -18
  226. data/rdoc/RubyXL/ContentTypeOverride.html +12 -18
  227. data/rdoc/RubyXL/ContentTypes.html +35 -72
  228. data/rdoc/RubyXL/ControlPropertiesFile.html +14 -23
  229. data/rdoc/RubyXL/CorePropertiesFile.html +89 -208
  230. data/rdoc/RubyXL/CustomColor.html +13 -20
  231. data/rdoc/RubyXL/CustomColorList.html +13 -20
  232. data/rdoc/RubyXL/CustomFilter.html +13 -20
  233. data/rdoc/RubyXL/CustomFilters.html +13 -20
  234. data/rdoc/RubyXL/CustomGeometry.html +13 -20
  235. data/rdoc/RubyXL/CustomProperties.html +13 -20
  236. data/rdoc/RubyXL/CustomPropertiesFile.html +12 -26
  237. data/rdoc/RubyXL/CustomProperty.html +13 -20
  238. data/rdoc/RubyXL/CustomPropertyFile.html +108 -0
  239. data/rdoc/RubyXL/CustomSheetView.html +13 -20
  240. data/rdoc/RubyXL/CustomSheetViews.html +13 -20
  241. data/rdoc/RubyXL/CustomWorkbookView.html +13 -20
  242. data/rdoc/RubyXL/CustomWorkbookViews.html +13 -20
  243. data/rdoc/RubyXL/CustomXMLFile.html +12 -23
  244. data/rdoc/RubyXL/DXF.html +13 -20
  245. data/rdoc/RubyXL/DXFs.html +13 -20
  246. data/rdoc/RubyXL/DataBar.html +13 -20
  247. data/rdoc/RubyXL/DataConsolidate.html +13 -20
  248. data/rdoc/RubyXL/DataConsolidationReference.html +13 -20
  249. data/rdoc/RubyXL/DataConsolidationReferences.html +13 -20
  250. data/rdoc/RubyXL/DataType.html +11 -40
  251. data/rdoc/RubyXL/DataValidation.html +13 -20
  252. data/rdoc/RubyXL/DataValidations.html +13 -20
  253. data/rdoc/RubyXL/DateGroupItem.html +13 -20
  254. data/rdoc/RubyXL/DefinedName.html +13 -20
  255. data/rdoc/RubyXL/DefinedNameExt.html +13 -20
  256. data/rdoc/RubyXL/DefinedNames.html +13 -20
  257. data/rdoc/RubyXL/DefinedNamesExt.html +13 -20
  258. data/rdoc/RubyXL/DocumentPropertiesFile.html +34 -77
  259. data/rdoc/RubyXL/DrawingFile.html +25 -54
  260. data/rdoc/RubyXL/DynamicFilter.html +13 -20
  261. data/rdoc/RubyXL/EmbeddedControl.html +13 -20
  262. data/rdoc/RubyXL/EmbeddedControls.html +13 -20
  263. data/rdoc/RubyXL/Extension.html +13 -20
  264. data/rdoc/RubyXL/ExtensionStorageArea.html +13 -20
  265. data/rdoc/RubyXL/Extents.html +13 -20
  266. data/rdoc/RubyXL/ExternalBook.html +13 -20
  267. data/rdoc/RubyXL/ExternalLinksFile.html +25 -54
  268. data/rdoc/RubyXL/ExternalReference.html +13 -20
  269. data/rdoc/RubyXL/ExternalReferences.html +13 -20
  270. data/rdoc/RubyXL/ExtraColorSchemeList.html +13 -20
  271. data/rdoc/RubyXL/FieldItem.html +13 -20
  272. data/rdoc/RubyXL/FileRecoveryProperties.html +13 -20
  273. data/rdoc/RubyXL/FileSharing.html +13 -20
  274. data/rdoc/RubyXL/FileVersion.html +13 -20
  275. data/rdoc/RubyXL/Fill.html +25 -44
  276. data/rdoc/RubyXL/Fills.html +25 -44
  277. data/rdoc/RubyXL/FilterContainer.html +13 -20
  278. data/rdoc/RubyXL/FloatNode.html +12 -18
  279. data/rdoc/RubyXL/FloatValue.html +12 -18
  280. data/rdoc/RubyXL/Font.html +28 -64
  281. data/rdoc/RubyXL/FontConvenienceMethods.html +133 -294
  282. data/rdoc/RubyXL/FontScheme.html +13 -20
  283. data/rdoc/RubyXL/Fonts.html +25 -44
  284. data/rdoc/RubyXL/Formula.html +13 -20
  285. data/rdoc/RubyXL/FunctionGroup.html +13 -20
  286. data/rdoc/RubyXL/FunctionGroups.html +13 -20
  287. data/rdoc/RubyXL/GenericStorageObject.html +40 -97
  288. data/rdoc/RubyXL/GradientFill.html +13 -20
  289. data/rdoc/RubyXL/HeaderFooterSettings.html +13 -20
  290. data/rdoc/RubyXL/Hyperlink.html +13 -20
  291. data/rdoc/RubyXL/HyperlinkRelFile.html +12 -23
  292. data/rdoc/RubyXL/Hyperlinks.html +13 -20
  293. data/rdoc/RubyXL/IconFilter.html +13 -20
  294. data/rdoc/RubyXL/IconSet.html +13 -20
  295. data/rdoc/RubyXL/IgnoredError.html +13 -20
  296. data/rdoc/RubyXL/IgnoredErrors.html +13 -20
  297. data/rdoc/RubyXL/IndexedColors.html +13 -20
  298. data/rdoc/RubyXL/InputCells.html +13 -20
  299. data/rdoc/RubyXL/IntegerNode.html +12 -18
  300. data/rdoc/RubyXL/IntegerValue.html +12 -18
  301. data/rdoc/RubyXL/LegacyCell.html +20 -71
  302. data/rdoc/RubyXL/LegacyWorksheet.html +75 -124
  303. data/rdoc/RubyXL/MRUColors.html +13 -20
  304. data/rdoc/RubyXL/MacrosFile.html +12 -26
  305. data/rdoc/RubyXL/MergedCell.html +13 -20
  306. data/rdoc/RubyXL/MergedCells.html +13 -20
  307. data/rdoc/RubyXL/NumFmt.html +13 -20
  308. data/rdoc/RubyXL/NumberFormat.html +25 -44
  309. data/rdoc/RubyXL/NumberFormats.html +25 -50
  310. data/rdoc/RubyXL/OLEObject.html +13 -20
  311. data/rdoc/RubyXL/OLEObjectFile.html +12 -26
  312. data/rdoc/RubyXL/OLEObjects.html +13 -20
  313. data/rdoc/RubyXL/OLESize.html +13 -20
  314. data/rdoc/RubyXL/OOXMLContainerObject.html +72 -157
  315. data/rdoc/RubyXL/OOXMLIgnored.html +32 -62
  316. data/rdoc/RubyXL/OOXMLObject.html +15 -26
  317. data/rdoc/RubyXL/OOXMLObjectClassMethods.html +122 -202
  318. data/rdoc/RubyXL/OOXMLObjectInstanceMethods.html +96 -217
  319. data/rdoc/RubyXL/OOXMLRelationshipsFile.html +108 -241
  320. data/rdoc/RubyXL/OOXMLTopLevelObject.html +67 -154
  321. data/rdoc/RubyXL/OdbcOleDbProperties.html +99 -0
  322. data/rdoc/RubyXL/Offset.html +13 -20
  323. data/rdoc/RubyXL/OlapProperties.html +99 -0
  324. data/rdoc/RubyXL/OleItem.html +99 -0
  325. data/rdoc/RubyXL/OleItems.html +99 -0
  326. data/rdoc/RubyXL/OleLink.html +99 -0
  327. data/rdoc/RubyXL/OutlineProperties.html +13 -20
  328. data/rdoc/RubyXL/PageMargins.html +13 -20
  329. data/rdoc/RubyXL/PageSetup.html +13 -20
  330. data/rdoc/RubyXL/PageSetupProperties.html +13 -20
  331. data/rdoc/RubyXL/Pane.html +13 -20
  332. data/rdoc/RubyXL/Parser.html +35 -65
  333. data/rdoc/RubyXL/PatternFill.html +13 -20
  334. data/rdoc/RubyXL/PersonMetadata.html +108 -0
  335. data/rdoc/RubyXL/PhoneticProperties.html +13 -20
  336. data/rdoc/RubyXL/PhoneticRun.html +13 -20
  337. data/rdoc/RubyXL/PivotArea.html +13 -20
  338. data/rdoc/RubyXL/PivotCache.html +13 -20
  339. data/rdoc/RubyXL/PivotCacheDefinitionFile.html +14 -31
  340. data/rdoc/RubyXL/PivotCacheRecordsFile.html +12 -26
  341. data/rdoc/RubyXL/PivotCaches.html +13 -20
  342. data/rdoc/RubyXL/PivotReference.html +13 -20
  343. data/rdoc/RubyXL/PivotReferences.html +13 -20
  344. data/rdoc/RubyXL/PivotTableFile.html +14 -31
  345. data/rdoc/RubyXL/PivotTableSelection.html +13 -20
  346. data/rdoc/RubyXL/PresetGeometry.html +13 -20
  347. data/rdoc/RubyXL/PrintOptions.html +13 -20
  348. data/rdoc/RubyXL/PrinterSettingsFile.html +12 -26
  349. data/rdoc/RubyXL/ProtectedRange.html +13 -20
  350. data/rdoc/RubyXL/ProtectedRanges.html +13 -20
  351. data/rdoc/RubyXL/Protection.html +13 -20
  352. data/rdoc/RubyXL/QueryParameter.html +99 -0
  353. data/rdoc/RubyXL/QueryParameters.html +99 -0
  354. data/rdoc/RubyXL/QueryTable.html +157 -0
  355. data/rdoc/RubyXL/QueryTableDeletedField.html +99 -0
  356. data/rdoc/RubyXL/QueryTableDeletedFields.html +99 -0
  357. data/rdoc/RubyXL/QueryTableField.html +99 -0
  358. data/rdoc/RubyXL/QueryTableFields.html +99 -0
  359. data/rdoc/RubyXL/QueryTableRefresh.html +99 -0
  360. data/rdoc/RubyXL/RID.html +12 -18
  361. data/rdoc/RubyXL/RawOOXML.html +33 -69
  362. data/rdoc/RubyXL/Reference.html +149 -283
  363. data/rdoc/RubyXL/Relationship.html +12 -18
  364. data/rdoc/RubyXL/RelationshipSupport/ClassMehods.html +20 -37
  365. data/rdoc/RubyXL/RelationshipSupport.html +62 -145
  366. data/rdoc/RubyXL/RevisionPointer.html +13 -23
  367. data/rdoc/RubyXL/RichText.html +26 -44
  368. data/rdoc/RubyXL/RichTextRun.html +24 -43
  369. data/rdoc/RubyXL/Row.html +88 -205
  370. data/rdoc/RubyXL/RowExt.html +13 -20
  371. data/rdoc/RubyXL/RunProperties.html +13 -20
  372. data/rdoc/RubyXL/Scenario.html +13 -20
  373. data/rdoc/RubyXL/Scenarios.html +13 -20
  374. data/rdoc/RubyXL/Selection.html +23 -42
  375. data/rdoc/RubyXL/ShapeGuide.html +13 -20
  376. data/rdoc/RubyXL/ShapeTextRectangle.html +13 -20
  377. data/rdoc/RubyXL/SharedStringsTable.html +80 -176
  378. data/rdoc/RubyXL/Sheet.html +13 -20
  379. data/rdoc/RubyXL/SheetCalculationProperties.html +13 -20
  380. data/rdoc/RubyXL/SheetData.html +32 -62
  381. data/rdoc/RubyXL/SheetDataExt.html +13 -20
  382. data/rdoc/RubyXL/SheetDataSet.html +13 -20
  383. data/rdoc/RubyXL/SheetMetadata.html +108 -0
  384. data/rdoc/RubyXL/SheetName.html +13 -20
  385. data/rdoc/RubyXL/SheetNames.html +13 -20
  386. data/rdoc/RubyXL/Sheets.html +13 -20
  387. data/rdoc/RubyXL/SlicerCacheFile.html +12 -26
  388. data/rdoc/RubyXL/SlicerFile.html +12 -26
  389. data/rdoc/RubyXL/SmartTagProperties.html +13 -20
  390. data/rdoc/RubyXL/SmartTagType.html +13 -20
  391. data/rdoc/RubyXL/SmartTagTypes.html +13 -20
  392. data/rdoc/RubyXL/SmartTags.html +13 -20
  393. data/rdoc/RubyXL/SortCondition.html +13 -20
  394. data/rdoc/RubyXL/SortState.html +13 -20
  395. data/rdoc/RubyXL/Sqref.html +32 -62
  396. data/rdoc/RubyXL/Stop.html +13 -20
  397. data/rdoc/RubyXL/StringNode.html +12 -18
  398. data/rdoc/RubyXL/StringNodeW3C.html +33 -63
  399. data/rdoc/RubyXL/StringValue.html +12 -18
  400. data/rdoc/RubyXL/Stylesheet.html +65 -138
  401. data/rdoc/RubyXL/TableFile.html +12 -26
  402. data/rdoc/RubyXL/TableParts.html +12 -18
  403. data/rdoc/RubyXL/TableStyle.html +13 -20
  404. data/rdoc/RubyXL/TableStyles.html +13 -20
  405. data/rdoc/RubyXL/Text.html +35 -76
  406. data/rdoc/RubyXL/TextImportSettings.html +99 -0
  407. data/rdoc/RubyXL/Theme.html +71 -71
  408. data/rdoc/RubyXL/ThemeElements.html +13 -20
  409. data/rdoc/RubyXL/ThumbnailFile.html +12 -26
  410. data/rdoc/RubyXL/Top10.html +13 -20
  411. data/rdoc/RubyXL/VMLDrawingFile.html +15 -33
  412. data/rdoc/RubyXL/Variant.html +13 -20
  413. data/rdoc/RubyXL/Vector.html +24 -43
  414. data/rdoc/RubyXL/VectorValue.html +12 -18
  415. data/rdoc/RubyXL/VisualProperties.html +13 -20
  416. data/rdoc/RubyXL/WebPublishObject.html +13 -20
  417. data/rdoc/RubyXL/WebPublishObjects.html +13 -20
  418. data/rdoc/RubyXL/WebPublishingItem.html +13 -20
  419. data/rdoc/RubyXL/WebPublishingItems.html +13 -20
  420. data/rdoc/RubyXL/WebPublishingProperties.html +13 -20
  421. data/rdoc/RubyXL/WebQueryProperties.html +99 -0
  422. data/rdoc/RubyXL/Workbook.html +580 -265
  423. data/rdoc/RubyXL/WorkbookConvenienceMethods.html +229 -950
  424. data/rdoc/RubyXL/WorkbookProperties.html +13 -20
  425. data/rdoc/RubyXL/WorkbookProtection.html +13 -20
  426. data/rdoc/RubyXL/WorkbookRoot.html +58 -135
  427. data/rdoc/RubyXL/WorkbookView.html +13 -20
  428. data/rdoc/RubyXL/WorkbookViews.html +13 -20
  429. data/rdoc/RubyXL/Worksheet.html +122 -137
  430. data/rdoc/RubyXL/WorksheetConvenienceMethods.html +698 -1371
  431. data/rdoc/RubyXL/WorksheetDimensions.html +13 -20
  432. data/rdoc/RubyXL/WorksheetFormatProperties.html +12 -18
  433. data/rdoc/RubyXL/WorksheetProperties.html +13 -20
  434. data/rdoc/RubyXL/WorksheetProtection.html +13 -20
  435. data/rdoc/RubyXL/WorksheetView.html +13 -20
  436. data/rdoc/RubyXL/WorksheetViews.html +13 -20
  437. data/rdoc/RubyXL/XF.html +13 -20
  438. data/rdoc/RubyXL.html +46 -306
  439. data/rdoc/created.rid +45 -38
  440. data/rdoc/css/rdoc.css +109 -12
  441. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  442. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  443. data/rdoc/index.html +403 -726
  444. data/rdoc/js/darkfish.js +33 -97
  445. data/rdoc/js/navigation.js +12 -49
  446. data/rdoc/js/navigation.js.gz +0 -0
  447. data/rdoc/js/search.js +35 -34
  448. data/rdoc/js/search_index.js +1 -1
  449. data/rdoc/js/search_index.js.gz +0 -0
  450. data/rdoc/js/searcher.js +6 -6
  451. data/rdoc/js/searcher.js.gz +0 -0
  452. data/rdoc/table_of_contents.html +282 -45
  453. data/rubyXL.gemspec +77 -43
  454. data/spec/lib/cell_spec.rb +117 -6
  455. data/spec/lib/color_spec.rb +2 -1
  456. data/spec/lib/parser_spec.rb +24 -27
  457. data/spec/lib/reference_spec.rb +40 -5
  458. data/spec/lib/rgb_color_spec.rb +27 -0
  459. data/spec/lib/stylesheet_spec.rb +10 -11
  460. data/spec/lib/text_spec.rb +1 -5
  461. data/spec/lib/workbook_spec.rb +27 -6
  462. data/spec/lib/worksheet_spec.rb +873 -479
  463. data/spec/spec_helper.rb +2 -0
  464. data/test/test_parse_write.rb +15 -15
  465. metadata +76 -10
  466. 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