rubyXL 3.4.12 → 3.4.25
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +2 -1
- data/Gemfile +8 -8
- data/Gemfile.lock +82 -50
- data/README.rdoc +26 -9
- data/Rakefile +26 -27
- data/VERSION +1 -1
- data/lib/rubyXL/cell.rb +2 -4
- data/lib/rubyXL/convenience_methods/cell.rb +35 -31
- data/lib/rubyXL/convenience_methods/color.rb +6 -8
- data/lib/rubyXL/convenience_methods/workbook.rb +9 -4
- data/lib/rubyXL/convenience_methods/worksheet.rb +77 -1
- data/lib/rubyXL/objects/border.rb +0 -3
- data/lib/rubyXL/objects/calculation_chain.rb +2 -2
- data/lib/rubyXL/objects/cell_style.rb +1 -3
- data/lib/rubyXL/objects/chartsheet.rb +6 -10
- data/lib/rubyXL/objects/color.rb +1 -3
- data/lib/rubyXL/objects/column_range.rb +0 -3
- data/lib/rubyXL/objects/comments.rb +1 -4
- data/lib/rubyXL/objects/connection.rb +11 -11
- data/lib/rubyXL/objects/container_nodes.rb +1 -5
- data/lib/rubyXL/objects/content_types.rb +3 -6
- data/lib/rubyXL/objects/data_validation.rb +2 -2
- data/lib/rubyXL/objects/document_properties.rb +9 -13
- data/lib/rubyXL/objects/extensions.rb +0 -2
- data/lib/rubyXL/objects/external_links.rb +29 -7
- data/lib/rubyXL/objects/fill.rb +2 -5
- data/lib/rubyXL/objects/filters.rb +5 -7
- data/lib/rubyXL/objects/font.rb +2 -4
- data/lib/rubyXL/objects/formula.rb +3 -5
- data/lib/rubyXL/objects/ooxml_object.rb +18 -18
- data/lib/rubyXL/objects/query_table.rb +3 -3
- data/lib/rubyXL/objects/reference.rb +6 -8
- data/lib/rubyXL/objects/relationships.rb +6 -11
- data/lib/rubyXL/objects/root.rb +0 -2
- data/lib/rubyXL/objects/shared_strings.rb +3 -6
- data/lib/rubyXL/objects/sheet_common.rb +1 -3
- data/lib/rubyXL/objects/sheet_data.rb +6 -8
- data/lib/rubyXL/objects/simple_types.rb +3 -1
- data/lib/rubyXL/objects/storage.rb +51 -50
- data/lib/rubyXL/objects/stylesheet.rb +8 -15
- data/lib/rubyXL/objects/text.rb +5 -7
- data/lib/rubyXL/objects/theme.rb +5 -8
- data/lib/rubyXL/objects/workbook.rb +35 -31
- data/lib/rubyXL/objects/worksheet.rb +33 -29
- data/lib/rubyXL/parser.rb +1 -3
- data/lib/rubyXL/worksheet.rb +83 -84
- data/lib/rubyXL.rb +0 -1
- data/rdoc/README_rdoc.html +42 -28
- data/rdoc/RubyXL/AExtension.html +9 -49
- data/rdoc/RubyXL/AExtensionStorageArea.html +5 -12
- data/rdoc/RubyXL/ActiveX.html +12 -41
- data/rdoc/RubyXL/ActiveXBinary.html +5 -17
- data/rdoc/RubyXL/AdjustHandleList.html +5 -12
- data/rdoc/RubyXL/Alignment.html +5 -12
- data/rdoc/RubyXL/AlternateContent.html +5 -12
- data/rdoc/RubyXL/Authors.html +5 -12
- data/rdoc/RubyXL/AutoFilter.html +5 -12
- data/rdoc/RubyXL/AutoFilterColumn.html +5 -12
- data/rdoc/RubyXL/BinaryImageFile.html +5 -20
- data/rdoc/RubyXL/BodyProperties.html +5 -12
- data/rdoc/RubyXL/BooleanNode.html +5 -12
- data/rdoc/RubyXL/BooleanValue.html +5 -12
- data/rdoc/RubyXL/Border.html +12 -72
- data/rdoc/RubyXL/BorderEdge.html +10 -44
- data/rdoc/RubyXL/Borders.html +9 -30
- data/rdoc/RubyXL/Break.html +5 -12
- data/rdoc/RubyXL/BreakList.html +5 -12
- data/rdoc/RubyXL/CT_AdjPoint2D.html +5 -12
- data/rdoc/RubyXL/CT_AlphaBiLevelEffect.html +5 -12
- data/rdoc/RubyXL/CT_AlphaModulateEffect.html +5 -12
- data/rdoc/RubyXL/CT_AlphaModulateFixedEffect.html +5 -12
- data/rdoc/RubyXL/CT_AlphaOutsetEffect.html +5 -12
- data/rdoc/RubyXL/CT_AlphaReplaceEffect.html +5 -12
- data/rdoc/RubyXL/CT_Backdrop.html +5 -12
- data/rdoc/RubyXL/CT_Bevel.html +5 -12
- data/rdoc/RubyXL/CT_BiLevelEffect.html +5 -12
- data/rdoc/RubyXL/CT_BlendEffect.html +5 -12
- data/rdoc/RubyXL/CT_Blip.html +5 -12
- data/rdoc/RubyXL/CT_BlipFillProperties.html +5 -12
- data/rdoc/RubyXL/CT_BlurEffect.html +5 -12
- data/rdoc/RubyXL/CT_Camera.html +5 -12
- data/rdoc/RubyXL/CT_Color.html +5 -12
- data/rdoc/RubyXL/CT_ColorChangeEffect.html +5 -12
- data/rdoc/RubyXL/CT_ColorMapping.html +5 -12
- data/rdoc/RubyXL/CT_ColorScheme.html +5 -12
- data/rdoc/RubyXL/CT_ColorSchemeAndMapping.html +5 -12
- data/rdoc/RubyXL/CT_ConnectionSite.html +5 -12
- data/rdoc/RubyXL/CT_ConnectionSiteList.html +5 -12
- data/rdoc/RubyXL/CT_DashStop.html +5 -12
- data/rdoc/RubyXL/CT_DashStopList.html +5 -12
- data/rdoc/RubyXL/CT_DefaultShapeDefinition.html +5 -12
- data/rdoc/RubyXL/CT_DuotoneEffect.html +5 -12
- data/rdoc/RubyXL/CT_EffectContainer.html +5 -12
- data/rdoc/RubyXL/CT_EffectList.html +5 -12
- data/rdoc/RubyXL/CT_EffectReference.html +5 -12
- data/rdoc/RubyXL/CT_EffectStyleItem.html +5 -12
- data/rdoc/RubyXL/CT_EffectStyleList.html +5 -12
- data/rdoc/RubyXL/CT_EmbeddedWAVAudioFile.html +5 -12
- data/rdoc/RubyXL/CT_FillEffect.html +5 -12
- data/rdoc/RubyXL/CT_FillOverlayEffect.html +5 -12
- data/rdoc/RubyXL/CT_FillStyleList.html +5 -12
- data/rdoc/RubyXL/CT_FlatText.html +5 -12
- data/rdoc/RubyXL/CT_FontCollection.html +5 -12
- data/rdoc/RubyXL/CT_FontReference.html +5 -12
- data/rdoc/RubyXL/CT_GeomGuideList.html +5 -12
- data/rdoc/RubyXL/CT_GlowEffect.html +5 -12
- data/rdoc/RubyXL/CT_GradientFillProperties.html +5 -12
- data/rdoc/RubyXL/CT_GradientStop.html +5 -12
- data/rdoc/RubyXL/CT_GradientStopList.html +5 -12
- data/rdoc/RubyXL/CT_HSLEffect.html +5 -12
- data/rdoc/RubyXL/CT_HslColor.html +5 -12
- data/rdoc/RubyXL/CT_Hyperlink.html +5 -12
- data/rdoc/RubyXL/CT_InnerShadowEffect.html +5 -12
- data/rdoc/RubyXL/CT_LightRig.html +5 -12
- data/rdoc/RubyXL/CT_LineEndProperties.html +5 -12
- data/rdoc/RubyXL/CT_LineJoinMiterProperties.html +5 -12
- data/rdoc/RubyXL/CT_LineProperties.html +5 -12
- data/rdoc/RubyXL/CT_LineStyleList.html +5 -12
- data/rdoc/RubyXL/CT_LinearShadeProperties.html +5 -12
- data/rdoc/RubyXL/CT_LuminanceEffect.html +5 -12
- data/rdoc/RubyXL/CT_ObjectStyleDefaults.html +5 -12
- data/rdoc/RubyXL/CT_OuterShadowEffect.html +5 -12
- data/rdoc/RubyXL/CT_Path2D.html +5 -12
- data/rdoc/RubyXL/CT_Path2DArcTo.html +5 -12
- data/rdoc/RubyXL/CT_Path2DCubicBezierTo.html +5 -12
- data/rdoc/RubyXL/CT_Path2DList.html +5 -12
- data/rdoc/RubyXL/CT_Path2DQuadBezierTo.html +5 -12
- data/rdoc/RubyXL/CT_Path2DTo.html +5 -12
- data/rdoc/RubyXL/CT_PathShadeProperties.html +5 -12
- data/rdoc/RubyXL/CT_PatternFillProperties.html +5 -12
- data/rdoc/RubyXL/CT_Point3D.html +5 -12
- data/rdoc/RubyXL/CT_PolarAdjustHandle.html +5 -12
- data/rdoc/RubyXL/CT_PresetColor.html +5 -12
- data/rdoc/RubyXL/CT_PresetLineDashProperties.html +5 -12
- data/rdoc/RubyXL/CT_PresetShadowEffect.html +5 -12
- data/rdoc/RubyXL/CT_PresetTextShape.html +5 -12
- data/rdoc/RubyXL/CT_ReflectionEffect.html +5 -12
- data/rdoc/RubyXL/CT_RelativeOffsetEffect.html +5 -12
- data/rdoc/RubyXL/CT_RelativeRect.html +5 -12
- data/rdoc/RubyXL/CT_SRgbColor.html +5 -12
- data/rdoc/RubyXL/CT_ScRgbColor.html +5 -12
- data/rdoc/RubyXL/CT_Scene3D.html +5 -12
- data/rdoc/RubyXL/CT_SchemeColor.html +5 -12
- data/rdoc/RubyXL/CT_Shape3D.html +5 -12
- data/rdoc/RubyXL/CT_ShapeStyle.html +5 -12
- data/rdoc/RubyXL/CT_SoftEdgesEffect.html +5 -12
- data/rdoc/RubyXL/CT_SphereCoords.html +5 -12
- data/rdoc/RubyXL/CT_StretchInfoProperties.html +5 -12
- data/rdoc/RubyXL/CT_StyleMatrix.html +5 -12
- data/rdoc/RubyXL/CT_StyleMatrixReference.html +5 -12
- data/rdoc/RubyXL/CT_SupplementalFont.html +5 -12
- data/rdoc/RubyXL/CT_SystemColor.html +5 -12
- data/rdoc/RubyXL/CT_TextAutonumberBullet.html +5 -12
- data/rdoc/RubyXL/CT_TextBlipBullet.html +5 -12
- data/rdoc/RubyXL/CT_TextCharBullet.html +5 -12
- data/rdoc/RubyXL/CT_TextCharacterProperties.html +5 -12
- data/rdoc/RubyXL/CT_TextFont.html +5 -12
- data/rdoc/RubyXL/CT_TextListStyle.html +5 -12
- data/rdoc/RubyXL/CT_TextNormalAutofit.html +5 -12
- data/rdoc/RubyXL/CT_TextParagraphProperties.html +5 -12
- data/rdoc/RubyXL/CT_TextSpacing.html +5 -12
- data/rdoc/RubyXL/CT_TextTabStop.html +5 -12
- data/rdoc/RubyXL/CT_TextTabStopList.html +5 -12
- data/rdoc/RubyXL/CT_TileInfoProperties.html +5 -12
- data/rdoc/RubyXL/CT_TintEffect.html +5 -12
- data/rdoc/RubyXL/CT_Transform2D.html +5 -12
- data/rdoc/RubyXL/CT_TransformEffect.html +5 -12
- data/rdoc/RubyXL/CT_Vector3D.html +5 -12
- data/rdoc/RubyXL/CT_XYAdjustHandle.html +5 -12
- data/rdoc/RubyXL/CalculationChain.html +8 -37
- data/rdoc/RubyXL/CalculationChainCell.html +5 -12
- data/rdoc/RubyXL/CalculationProperties.html +5 -12
- data/rdoc/RubyXL/Cell.html +26 -228
- data/rdoc/RubyXL/CellConvenienceMethods.html +108 -503
- data/rdoc/RubyXL/CellExt.html +5 -12
- data/rdoc/RubyXL/CellSmartTag.html +5 -12
- data/rdoc/RubyXL/CellSmartTagProperty.html +5 -12
- data/rdoc/RubyXL/CellSmartTags.html +5 -12
- data/rdoc/RubyXL/CellStyle.html +5 -12
- data/rdoc/RubyXL/CellStyleXFs.html +9 -30
- data/rdoc/RubyXL/CellStyles.html +9 -30
- data/rdoc/RubyXL/CellValue.html +9 -30
- data/rdoc/RubyXL/CellWatch.html +5 -12
- data/rdoc/RubyXL/CellWatches.html +5 -12
- data/rdoc/RubyXL/CellXFs.html +10 -33
- data/rdoc/RubyXL/ChartColorsFile.html +5 -20
- data/rdoc/RubyXL/ChartFile.html +11 -43
- data/rdoc/RubyXL/ChartStyleFile.html +5 -20
- data/rdoc/RubyXL/ChartUserShapesFile.html +5 -20
- data/rdoc/RubyXL/Chartsheet.html +11 -60
- data/rdoc/RubyXL/ChartsheetPageSetup.html +5 -12
- data/rdoc/RubyXL/ChartsheetProperties.html +5 -12
- data/rdoc/RubyXL/ChartsheetProtection.html +5 -12
- data/rdoc/RubyXL/ChartsheetView.html +5 -12
- data/rdoc/RubyXL/ChartsheetViews.html +5 -12
- data/rdoc/RubyXL/Color.html +10 -36
- data/rdoc/RubyXL/ColorConvenienceClasses/HlsColor.html +10 -58
- data/rdoc/RubyXL/ColorConvenienceClasses/RgbColor.html +18 -78
- data/rdoc/RubyXL/ColorConvenienceClasses.html +3 -9
- data/rdoc/RubyXL/ColorConvenienceMethods.html +7 -27
- data/rdoc/RubyXL/ColorFilter.html +5 -12
- data/rdoc/RubyXL/ColorScale.html +5 -12
- data/rdoc/RubyXL/ColorSet.html +5 -12
- data/rdoc/RubyXL/Colors.html +5 -12
- data/rdoc/RubyXL/ColumnRange.html +11 -63
- data/rdoc/RubyXL/ColumnRanges.html +12 -72
- data/rdoc/RubyXL/Comment.html +5 -12
- data/rdoc/RubyXL/CommentList.html +5 -12
- data/rdoc/RubyXL/CommentsFile.html +9 -43
- data/rdoc/RubyXL/ConditionalFormatValue.html +5 -12
- data/rdoc/RubyXL/ConditionalFormatting.html +5 -12
- data/rdoc/RubyXL/ConditionalFormattingRule.html +5 -12
- data/rdoc/RubyXL/Connection.html +5 -12
- data/rdoc/RubyXL/ConnectionTable.html +5 -12
- data/rdoc/RubyXL/ConnectionTables.html +5 -12
- data/rdoc/RubyXL/ConnectionTextField.html +5 -12
- data/rdoc/RubyXL/ConnectionTextFields.html +5 -12
- data/rdoc/RubyXL/Connections.html +8 -37
- data/rdoc/RubyXL/ContentTypeDefault.html +5 -12
- data/rdoc/RubyXL/ContentTypeOverride.html +5 -12
- data/rdoc/RubyXL/ContentTypes.html +12 -54
- data/rdoc/RubyXL/ControlPropertiesFile.html +7 -17
- data/rdoc/RubyXL/CorePropertiesFile.html +17 -155
- data/rdoc/RubyXL/CustomColor.html +5 -12
- data/rdoc/RubyXL/CustomColorList.html +5 -12
- data/rdoc/RubyXL/CustomFilter.html +5 -12
- data/rdoc/RubyXL/CustomFilters.html +5 -12
- data/rdoc/RubyXL/CustomGeometry.html +5 -12
- data/rdoc/RubyXL/CustomProperties.html +5 -12
- data/rdoc/RubyXL/CustomPropertiesFile.html +5 -20
- data/rdoc/RubyXL/CustomProperty.html +5 -12
- data/rdoc/RubyXL/CustomPropertyFile.html +5 -20
- data/rdoc/RubyXL/CustomSheetView.html +5 -12
- data/rdoc/RubyXL/CustomSheetViews.html +5 -12
- data/rdoc/RubyXL/CustomWorkbookView.html +5 -12
- data/rdoc/RubyXL/CustomWorkbookViews.html +5 -12
- data/rdoc/RubyXL/CustomXMLFile.html +5 -17
- data/rdoc/RubyXL/DXF.html +5 -12
- data/rdoc/RubyXL/DXFs.html +5 -12
- data/rdoc/RubyXL/DataBar.html +5 -12
- data/rdoc/RubyXL/DataConsolidate.html +5 -12
- data/rdoc/RubyXL/DataConsolidationReference.html +5 -12
- data/rdoc/RubyXL/DataConsolidationReferences.html +5 -12
- data/rdoc/RubyXL/DataType.html +3 -32
- data/rdoc/RubyXL/DataValidation.html +5 -12
- data/rdoc/RubyXL/DataValidations.html +5 -12
- data/rdoc/RubyXL/DateGroupItem.html +5 -12
- data/rdoc/RubyXL/DefinedName.html +5 -12
- data/rdoc/RubyXL/DefinedNameExt.html +5 -12
- data/rdoc/RubyXL/DefinedNames.html +5 -12
- data/rdoc/RubyXL/DefinedNamesExt.html +5 -12
- data/rdoc/RubyXL/DocumentPropertiesFile.html +10 -57
- data/rdoc/RubyXL/DrawingFile.html +11 -43
- data/rdoc/RubyXL/DynamicFilter.html +5 -12
- data/rdoc/RubyXL/EmbeddedControl.html +5 -12
- data/rdoc/RubyXL/EmbeddedControls.html +5 -12
- data/rdoc/RubyXL/Extension.html +5 -12
- data/rdoc/RubyXL/ExtensionStorageArea.html +5 -12
- data/rdoc/RubyXL/Extents.html +5 -12
- data/rdoc/RubyXL/ExternalBook.html +5 -12
- data/rdoc/RubyXL/ExternalLinksFile.html +11 -43
- data/rdoc/RubyXL/ExternalReference.html +5 -12
- data/rdoc/RubyXL/ExternalReferences.html +5 -12
- data/rdoc/RubyXL/ExtraColorSchemeList.html +5 -12
- data/rdoc/RubyXL/FieldItem.html +5 -12
- data/rdoc/RubyXL/FileRecoveryProperties.html +5 -12
- data/rdoc/RubyXL/FileSharing.html +5 -12
- data/rdoc/RubyXL/FileVersion.html +5 -12
- data/rdoc/RubyXL/Fill.html +9 -30
- data/rdoc/RubyXL/Fills.html +9 -30
- data/rdoc/RubyXL/FilterContainer.html +5 -12
- data/rdoc/RubyXL/FloatNode.html +5 -12
- data/rdoc/RubyXL/FloatValue.html +5 -12
- data/rdoc/RubyXL/Font.html +11 -37
- data/rdoc/RubyXL/FontConvenienceMethods.html +7 -196
- data/rdoc/RubyXL/FontScheme.html +5 -12
- data/rdoc/RubyXL/Fonts.html +9 -30
- data/rdoc/RubyXL/Formula.html +5 -12
- data/rdoc/RubyXL/FunctionGroup.html +5 -12
- data/rdoc/RubyXL/FunctionGroups.html +5 -12
- data/rdoc/RubyXL/GenericStorageObject.html +12 -76
- data/rdoc/RubyXL/GradientFill.html +5 -12
- data/rdoc/RubyXL/HeaderFooterSettings.html +5 -12
- data/rdoc/RubyXL/Hyperlink.html +5 -12
- data/rdoc/RubyXL/HyperlinkRelFile.html +5 -17
- data/rdoc/RubyXL/Hyperlinks.html +5 -12
- data/rdoc/RubyXL/IconFilter.html +5 -12
- data/rdoc/RubyXL/IconSet.html +5 -12
- data/rdoc/RubyXL/IgnoredError.html +5 -12
- data/rdoc/RubyXL/IgnoredErrors.html +5 -12
- data/rdoc/RubyXL/IndexedColors.html +5 -12
- data/rdoc/RubyXL/InputCells.html +5 -12
- data/rdoc/RubyXL/IntegerNode.html +5 -12
- data/rdoc/RubyXL/IntegerValue.html +5 -12
- data/rdoc/RubyXL/LegacyCell.html +7 -27
- data/rdoc/RubyXL/LegacyWorksheet.html +11 -88
- data/rdoc/RubyXL/MRUColors.html +5 -12
- data/rdoc/RubyXL/MacrosFile.html +5 -20
- data/rdoc/RubyXL/MergedCell.html +5 -12
- data/rdoc/RubyXL/MergedCells.html +5 -12
- data/rdoc/RubyXL/NumFmt.html +5 -12
- data/rdoc/RubyXL/NumberFormat.html +10 -31
- data/rdoc/RubyXL/NumberFormats.html +9 -35
- data/rdoc/RubyXL/OLEObject.html +5 -12
- data/rdoc/RubyXL/OLEObjectFile.html +5 -20
- data/rdoc/RubyXL/OLEObjects.html +5 -12
- data/rdoc/RubyXL/OLESize.html +5 -12
- data/rdoc/RubyXL/OOXMLContainerObject.html +19 -114
- data/rdoc/RubyXL/OOXMLIgnored.html +11 -46
- data/rdoc/RubyXL/OOXMLObject.html +8 -18
- data/rdoc/RubyXL/OOXMLObjectClassMethods.html +42 -92
- data/rdoc/RubyXL/OOXMLObjectInstanceMethods.html +23 -144
- data/rdoc/RubyXL/OOXMLRelationshipsFile.html +24 -181
- data/rdoc/RubyXL/OOXMLTopLevelObject.html +15 -102
- data/rdoc/RubyXL/OdbcOleDbProperties.html +5 -12
- data/rdoc/RubyXL/Offset.html +5 -12
- data/rdoc/RubyXL/OlapProperties.html +5 -12
- data/rdoc/RubyXL/OleItem.html +99 -0
- data/rdoc/RubyXL/OleItems.html +99 -0
- data/rdoc/RubyXL/OleLink.html +99 -0
- data/rdoc/RubyXL/OutlineProperties.html +5 -12
- data/rdoc/RubyXL/PageMargins.html +5 -12
- data/rdoc/RubyXL/PageSetup.html +5 -12
- data/rdoc/RubyXL/PageSetupProperties.html +5 -12
- data/rdoc/RubyXL/Pane.html +5 -12
- data/rdoc/RubyXL/Parser.html +11 -45
- data/rdoc/RubyXL/PatternFill.html +5 -12
- data/rdoc/RubyXL/PhoneticProperties.html +5 -12
- data/rdoc/RubyXL/PhoneticRun.html +5 -12
- data/rdoc/RubyXL/PivotArea.html +5 -12
- data/rdoc/RubyXL/PivotCache.html +5 -12
- data/rdoc/RubyXL/PivotCacheDefinitionFile.html +7 -25
- data/rdoc/RubyXL/PivotCacheRecordsFile.html +5 -20
- data/rdoc/RubyXL/PivotCaches.html +5 -12
- data/rdoc/RubyXL/PivotReference.html +5 -12
- data/rdoc/RubyXL/PivotReferences.html +5 -12
- data/rdoc/RubyXL/PivotTableFile.html +7 -25
- data/rdoc/RubyXL/PivotTableSelection.html +5 -12
- data/rdoc/RubyXL/PresetGeometry.html +5 -12
- data/rdoc/RubyXL/PrintOptions.html +5 -12
- data/rdoc/RubyXL/PrinterSettingsFile.html +5 -20
- data/rdoc/RubyXL/ProtectedRange.html +5 -12
- data/rdoc/RubyXL/ProtectedRanges.html +5 -12
- data/rdoc/RubyXL/Protection.html +5 -12
- data/rdoc/RubyXL/QueryParameter.html +5 -12
- data/rdoc/RubyXL/QueryParameters.html +5 -12
- data/rdoc/RubyXL/QueryTable.html +10 -42
- data/rdoc/RubyXL/QueryTableDeletedField.html +5 -12
- data/rdoc/RubyXL/QueryTableDeletedFields.html +5 -12
- data/rdoc/RubyXL/QueryTableField.html +5 -12
- data/rdoc/RubyXL/QueryTableFields.html +5 -12
- data/rdoc/RubyXL/QueryTableRefresh.html +5 -12
- data/rdoc/RubyXL/RID.html +5 -12
- data/rdoc/RubyXL/RawOOXML.html +11 -51
- data/rdoc/RubyXL/Reference.html +42 -204
- data/rdoc/RubyXL/Relationship.html +5 -12
- data/rdoc/RubyXL/RelationshipSupport/ClassMehods.html +7 -27
- data/rdoc/RubyXL/RelationshipSupport.html +15 -112
- data/rdoc/RubyXL/RevisionPointer.html +5 -12
- data/rdoc/RubyXL/RichText.html +11 -31
- data/rdoc/RubyXL/RichTextRun.html +9 -30
- data/rdoc/RubyXL/Row.html +8 -143
- data/rdoc/RubyXL/RowExt.html +5 -12
- data/rdoc/RubyXL/RunProperties.html +5 -12
- data/rdoc/RubyXL/Scenario.html +5 -12
- data/rdoc/RubyXL/Scenarios.html +5 -12
- data/rdoc/RubyXL/Selection.html +9 -30
- data/rdoc/RubyXL/ShapeGuide.html +5 -12
- data/rdoc/RubyXL/ShapeTextRectangle.html +5 -12
- data/rdoc/RubyXL/SharedStringsTable.html +16 -126
- data/rdoc/RubyXL/Sheet.html +5 -12
- data/rdoc/RubyXL/SheetCalculationProperties.html +5 -12
- data/rdoc/RubyXL/SheetData.html +8 -42
- data/rdoc/RubyXL/SheetDataExt.html +5 -12
- data/rdoc/RubyXL/SheetDataSet.html +5 -12
- data/rdoc/RubyXL/SheetMetadata.html +108 -0
- data/rdoc/RubyXL/SheetName.html +5 -12
- data/rdoc/RubyXL/SheetNames.html +5 -12
- data/rdoc/RubyXL/Sheets.html +5 -12
- data/rdoc/RubyXL/SlicerCacheFile.html +5 -20
- data/rdoc/RubyXL/SlicerFile.html +5 -20
- data/rdoc/RubyXL/SmartTagProperties.html +5 -12
- data/rdoc/RubyXL/SmartTagType.html +5 -12
- data/rdoc/RubyXL/SmartTagTypes.html +5 -12
- data/rdoc/RubyXL/SmartTags.html +5 -12
- data/rdoc/RubyXL/SortCondition.html +5 -12
- data/rdoc/RubyXL/SortState.html +5 -12
- data/rdoc/RubyXL/Sqref.html +11 -46
- data/rdoc/RubyXL/Stop.html +5 -12
- data/rdoc/RubyXL/StringNode.html +5 -12
- data/rdoc/RubyXL/StringNodeW3C.html +11 -46
- data/rdoc/RubyXL/StringValue.html +5 -12
- data/rdoc/RubyXL/Stylesheet.html +14 -97
- data/rdoc/RubyXL/TableFile.html +5 -20
- data/rdoc/RubyXL/TableParts.html +5 -12
- data/rdoc/RubyXL/TableStyle.html +5 -12
- data/rdoc/RubyXL/TableStyles.html +5 -12
- data/rdoc/RubyXL/Text.html +12 -54
- data/rdoc/RubyXL/TextImportSettings.html +5 -12
- data/rdoc/RubyXL/Theme.html +12 -68
- data/rdoc/RubyXL/ThemeElements.html +5 -12
- data/rdoc/RubyXL/ThumbnailFile.html +5 -20
- data/rdoc/RubyXL/Top10.html +5 -12
- data/rdoc/RubyXL/VMLDrawingFile.html +8 -26
- data/rdoc/RubyXL/Variant.html +5 -12
- data/rdoc/RubyXL/Vector.html +9 -30
- data/rdoc/RubyXL/VectorValue.html +5 -12
- data/rdoc/RubyXL/VisualProperties.html +5 -12
- data/rdoc/RubyXL/WebPublishObject.html +5 -12
- data/rdoc/RubyXL/WebPublishObjects.html +5 -12
- data/rdoc/RubyXL/WebPublishingItem.html +5 -12
- data/rdoc/RubyXL/WebPublishingItems.html +5 -12
- data/rdoc/RubyXL/WebPublishingProperties.html +5 -12
- data/rdoc/RubyXL/WebQueryProperties.html +5 -12
- data/rdoc/RubyXL/Workbook.html +45 -462
- data/rdoc/RubyXL/WorkbookConvenienceMethods.html +68 -239
- data/rdoc/RubyXL/WorkbookProperties.html +5 -12
- data/rdoc/RubyXL/WorkbookProtection.html +5 -12
- data/rdoc/RubyXL/WorkbookRoot.html +16 -104
- data/rdoc/RubyXL/WorkbookView.html +5 -12
- data/rdoc/RubyXL/WorkbookViews.html +5 -12
- data/rdoc/RubyXL/Worksheet.html +40 -135
- data/rdoc/RubyXL/WorksheetConvenienceMethods.html +170 -989
- data/rdoc/RubyXL/WorksheetDimensions.html +5 -12
- data/rdoc/RubyXL/WorksheetFormatProperties.html +5 -12
- data/rdoc/RubyXL/WorksheetProperties.html +5 -12
- data/rdoc/RubyXL/WorksheetProtection.html +5 -12
- data/rdoc/RubyXL/WorksheetView.html +5 -12
- data/rdoc/RubyXL/WorksheetViews.html +5 -12
- data/rdoc/RubyXL/XF.html +5 -12
- data/rdoc/RubyXL.html +8 -319
- data/rdoc/created.rid +44 -44
- data/rdoc/css/rdoc.css +21 -1
- data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/rdoc/index.html +9 -388
- data/rdoc/js/navigation.js.gz +0 -0
- data/rdoc/js/search_index.js +1 -1
- data/rdoc/js/search_index.js.gz +0 -0
- data/rdoc/js/searcher.js.gz +0 -0
- data/rdoc/table_of_contents.html +57 -5
- data/rubyXL.gemspec +24 -30
- data/spec/lib/cell_spec.rb +38 -6
- data/spec/lib/color_spec.rb +1 -1
- data/spec/lib/parser_spec.rb +24 -27
- data/spec/lib/reference_spec.rb +9 -3
- data/spec/lib/rgb_color_spec.rb +27 -0
- data/spec/lib/stylesheet_spec.rb +8 -11
- data/spec/lib/text_spec.rb +1 -5
- data/spec/lib/workbook_spec.rb +14 -4
- data/spec/lib/worksheet_spec.rb +790 -447
- data/spec/spec_helper.rb +2 -0
- data/test/test_parse_write.rb +3 -3
- metadata +11 -8
- data/test/output/test.xlsx +0 -0
data/spec/lib/worksheet_spec.rb
CHANGED
@@ -4,458 +4,465 @@ require 'rubyXL/convenience_methods/worksheet'
|
|
4
4
|
SKIP_ROW_COL = 3
|
5
5
|
|
6
6
|
describe RubyXL::Worksheet do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
(0..10).each do |
|
12
|
-
(0..10).each do |
|
13
|
-
next if
|
14
|
-
|
7
|
+
subject do
|
8
|
+
workbook = RubyXL::Workbook.new
|
9
|
+
worksheet = workbook.add_worksheet
|
10
|
+
|
11
|
+
(0..10).each do |y|
|
12
|
+
(0..10).each do |x|
|
13
|
+
next if y == SKIP_ROW_COL || x == SKIP_ROW_COL # Skip some rows/cells
|
14
|
+
worksheet.add_cell(y, x, "#{x}:#{y}", "F#{x}:#{y}")
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
worksheet
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'addressing cells' do
|
22
|
+
it 'should be able to address cells by row and column indices' do
|
23
|
+
expect(subject[2][4].value).to eq('4:2')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should be able to address cells by reference' do
|
27
|
+
expect(subject.cell_at('B5').value).to eq('1:4')
|
28
|
+
end
|
21
29
|
end
|
22
30
|
|
23
31
|
describe '.change_row_fill' do
|
24
32
|
it 'should raise error if hex color code not passed' do
|
25
33
|
expect {
|
26
|
-
|
34
|
+
subject.change_row_fill(0, 'G')
|
27
35
|
}.to raise_error(RuntimeError)
|
28
36
|
end
|
29
37
|
|
30
38
|
it 'should raise error if hex color code includes # character' do
|
31
39
|
expect {
|
32
|
-
|
40
|
+
subject.change_row_fill(3, '#FFF000')
|
33
41
|
}.to raise_error(RuntimeError)
|
34
42
|
end
|
35
43
|
|
36
44
|
it 'should make row and cell fill colors equal hex color code passed' do
|
37
|
-
|
38
|
-
expect(
|
39
|
-
expect(
|
45
|
+
subject.change_row_fill(0, '111111')
|
46
|
+
expect(subject.get_row_fill(0)).to eq('111111')
|
47
|
+
expect(subject[0][5].fill_color).to eq('111111')
|
40
48
|
end
|
41
49
|
|
42
50
|
it 'should cause error if a negative argument is passed in' do
|
43
51
|
expect {
|
44
|
-
|
52
|
+
subject.change_row_fill(-1, '111111')
|
45
53
|
}.to raise_error(RuntimeError)
|
46
54
|
end
|
47
55
|
|
48
56
|
it 'should create a new row if it did not exist before' do
|
49
|
-
expect(
|
50
|
-
|
51
|
-
expect(
|
52
|
-
expect(
|
57
|
+
expect(subject.sheet_data[11]).to be_nil
|
58
|
+
subject.change_row_fill(11, '111111')
|
59
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
60
|
+
expect(subject.get_row_fill(11)).to eq('111111')
|
53
61
|
end
|
54
62
|
end
|
55
63
|
|
56
64
|
describe '.change_row_font_name' do
|
57
65
|
it 'should make row and cell font names equal font name passed' do
|
58
|
-
|
59
|
-
expect(
|
60
|
-
expect(
|
66
|
+
subject.change_row_font_name(0, 'Arial')
|
67
|
+
expect(subject.get_row_font_name(0)).to eq('Arial')
|
68
|
+
expect(subject[0][5].font_name).to eq('Arial')
|
61
69
|
end
|
62
70
|
|
63
71
|
it 'should cause error if a negative argument is passed in' do
|
64
72
|
expect {
|
65
|
-
|
73
|
+
subject.change_row_font_name(-1, 'Arial')
|
66
74
|
}.to raise_error(RuntimeError)
|
67
75
|
end
|
68
76
|
|
69
77
|
it 'should create a new row if it did not exist before' do
|
70
|
-
expect(
|
71
|
-
|
72
|
-
expect(
|
73
|
-
expect(
|
78
|
+
expect(subject.sheet_data[11]).to be_nil
|
79
|
+
subject.change_row_font_name(11, 'Arial')
|
80
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
81
|
+
expect(subject.get_row_font_name(11)).to eq('Arial')
|
74
82
|
end
|
75
83
|
end
|
76
84
|
|
77
85
|
describe '.change_row_font_size' do
|
78
86
|
it 'should make row and cell font sizes equal font number passed' do
|
79
|
-
|
80
|
-
expect(
|
81
|
-
expect(
|
87
|
+
subject.change_row_font_size(0, 20)
|
88
|
+
expect(subject.get_row_font_size(0)).to eq(20)
|
89
|
+
expect(subject[0][5].font_size).to eq(20)
|
82
90
|
end
|
83
91
|
|
84
92
|
it 'should cause an error if a string passed' do
|
85
93
|
expect {
|
86
|
-
|
94
|
+
subject.change_row_font_size(0, '20')
|
87
95
|
}.to raise_error(RuntimeError)
|
88
96
|
end
|
89
97
|
|
90
98
|
it 'should cause error if a negative argument is passed in' do
|
91
99
|
expect {
|
92
|
-
|
100
|
+
subject.change_row_font_size(-1, 20)
|
93
101
|
}.to raise_error(RuntimeError)
|
94
102
|
end
|
95
103
|
|
96
104
|
it 'should create a new row if it did not exist before' do
|
97
|
-
expect(
|
98
|
-
|
99
|
-
expect(
|
100
|
-
expect(
|
105
|
+
expect(subject.sheet_data[11]).to be_nil
|
106
|
+
subject.change_row_font_size(11, 20)
|
107
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
108
|
+
expect(subject.get_row_font_size(11)).to eq(20)
|
101
109
|
end
|
102
110
|
end
|
103
111
|
|
104
112
|
describe '.change_row_font_color' do
|
105
113
|
it 'should make row and cell font colors equal to font color passed' do
|
106
|
-
|
107
|
-
expect(
|
108
|
-
expect(
|
114
|
+
subject.change_row_font_color(0, '0f0f0f')
|
115
|
+
expect(subject.get_row_font_color(0)).to eq('0f0f0f')
|
116
|
+
expect(subject[0][5].font_color).to eq('0f0f0f')
|
109
117
|
end
|
110
118
|
|
111
119
|
it 'should raise error if hex color code not passed' do
|
112
120
|
expect {
|
113
|
-
|
121
|
+
subject.change_row_font_color(0, 'G')
|
114
122
|
}.to raise_error(RuntimeError)
|
115
123
|
end
|
116
124
|
|
117
125
|
it 'should raise error if hex color code includes # character' do
|
118
126
|
expect {
|
119
|
-
|
127
|
+
subject.change_row_font_color(3, '#FFF000')
|
120
128
|
}.to raise_error(RuntimeError)
|
121
129
|
end
|
122
130
|
|
123
131
|
it 'should cause error if a negative argument is passed in' do
|
124
132
|
expect {
|
125
|
-
|
133
|
+
subject.change_row_font_color(-1, '0f0f0f')
|
126
134
|
}.to raise_error(RuntimeError)
|
127
135
|
end
|
128
136
|
|
129
137
|
it 'should create a new row if it did not exist before' do
|
130
|
-
expect(
|
131
|
-
|
132
|
-
expect(
|
133
|
-
expect(
|
138
|
+
expect(subject.sheet_data[11]).to be_nil
|
139
|
+
subject.change_row_font_color(11, '0f0f0f')
|
140
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
141
|
+
expect(subject.get_row_font_color(11)).to eq('0f0f0f')
|
134
142
|
end
|
135
143
|
end
|
136
144
|
|
137
145
|
describe '.change_row_italics' do
|
138
146
|
it 'should make row and cell fonts italicized when true is passed' do
|
139
|
-
|
140
|
-
expect(
|
141
|
-
expect(
|
147
|
+
subject.change_row_italics(0, true)
|
148
|
+
expect(subject.is_row_italicized(0)).to eq(true)
|
149
|
+
expect(subject[0][5].is_italicized).to eq(true)
|
142
150
|
end
|
143
151
|
|
144
152
|
it 'should cause error if a negative argument is passed in' do
|
145
153
|
expect {
|
146
|
-
|
154
|
+
subject.change_row_italics(-1, false)
|
147
155
|
}.to raise_error(RuntimeError)
|
148
156
|
end
|
149
157
|
|
150
158
|
it 'should create a new row if it did not exist before' do
|
151
|
-
expect(
|
152
|
-
|
153
|
-
expect(
|
154
|
-
expect(
|
159
|
+
expect(subject.sheet_data[11]).to be_nil
|
160
|
+
subject.change_row_italics(11, true)
|
161
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
162
|
+
expect(subject.is_row_italicized(11)).to eq(true)
|
155
163
|
end
|
156
164
|
end
|
157
165
|
|
158
166
|
describe '.change_row_bold' do
|
159
167
|
it 'should make row and cell fonts bolded when true is passed' do
|
160
|
-
|
161
|
-
expect(
|
162
|
-
expect(
|
168
|
+
subject.change_row_bold(0, true)
|
169
|
+
expect(subject.is_row_bolded(0)).to eq(true)
|
170
|
+
expect(subject[0][5].is_bolded).to eq(true)
|
163
171
|
end
|
164
172
|
|
165
173
|
it 'should cause error if a negative argument is passed in' do
|
166
174
|
expect {
|
167
|
-
|
175
|
+
subject.change_row_bold(-1, false)
|
168
176
|
}.to raise_error(RuntimeError)
|
169
177
|
end
|
170
178
|
|
171
179
|
it 'should create a new row if it did not exist before' do
|
172
|
-
expect(
|
173
|
-
|
174
|
-
expect(
|
175
|
-
expect(
|
180
|
+
expect(subject.sheet_data[11]).to be_nil
|
181
|
+
subject.change_row_bold(11, true)
|
182
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
183
|
+
expect(subject.is_row_bolded(11)).to eq(true)
|
176
184
|
end
|
177
185
|
end
|
178
186
|
|
179
187
|
describe '.change_row_underline' do
|
180
188
|
it 'should make row and cell fonts underlined when true is passed' do
|
181
|
-
|
182
|
-
expect(
|
183
|
-
expect(
|
189
|
+
subject.change_row_underline(0, true)
|
190
|
+
expect(subject.is_row_underlined(0)).to eq(true)
|
191
|
+
expect(subject[0][5].is_underlined).to eq(true)
|
184
192
|
end
|
185
193
|
|
186
194
|
it 'should cause error if a negative argument is passed in' do
|
187
195
|
expect {
|
188
|
-
|
196
|
+
subject.change_row_underline(-1, false)
|
189
197
|
}.to raise_error(RuntimeError)
|
190
198
|
end
|
191
199
|
|
192
200
|
it 'should create a new row if it did not exist before' do
|
193
|
-
expect(
|
194
|
-
|
195
|
-
expect(
|
196
|
-
expect(
|
201
|
+
expect(subject.sheet_data[11]).to be_nil
|
202
|
+
subject.change_row_underline(11, true)
|
203
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
204
|
+
expect(subject.is_row_underlined(11)).to eq(true)
|
197
205
|
end
|
198
206
|
end
|
199
207
|
|
200
208
|
describe '.change_row_strikethrough' do
|
201
209
|
it 'should make row and cell fonts struckthrough when true is passed' do
|
202
|
-
|
203
|
-
expect(
|
204
|
-
expect(
|
210
|
+
subject.change_row_strikethrough(0, true)
|
211
|
+
expect(subject.is_row_struckthrough(0)).to eq(true)
|
212
|
+
expect(subject[0][5].is_struckthrough).to eq(true)
|
205
213
|
end
|
206
214
|
|
207
215
|
it 'should cause error if a negative argument is passed in' do
|
208
216
|
expect {
|
209
|
-
|
217
|
+
subject.change_row_strikethrough(-1, false)
|
210
218
|
}.to raise_error(RuntimeError)
|
211
219
|
end
|
212
220
|
|
213
221
|
it 'should create a new row if it did not exist before' do
|
214
|
-
expect(
|
215
|
-
|
216
|
-
expect(
|
217
|
-
expect(
|
222
|
+
expect(subject.sheet_data[11]).to be_nil
|
223
|
+
subject.change_row_strikethrough(11, true)
|
224
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
225
|
+
expect(subject.is_row_struckthrough(11)).to eq(true)
|
218
226
|
end
|
219
227
|
end
|
220
228
|
|
221
229
|
describe '.change_row_height' do
|
222
230
|
it 'should make row height match number which is passed' do
|
223
|
-
|
224
|
-
expect(
|
231
|
+
subject.change_row_height(0, 30.0002)
|
232
|
+
expect(subject.get_row_height(0)).to eq(30.0002)
|
225
233
|
end
|
226
234
|
|
227
235
|
it 'should make row height a number equivalent of the string passed if it is a string which is a number' do
|
228
|
-
|
229
|
-
expect(
|
236
|
+
subject.change_row_height(0, 30.0002)
|
237
|
+
expect(subject.get_row_height(0)).to eq(30.0002)
|
230
238
|
end
|
231
239
|
|
232
240
|
it 'should cause error if a negative argument is passed in' do
|
233
241
|
expect {
|
234
|
-
|
242
|
+
subject.change_row_height(-1, 30)
|
235
243
|
}.to raise_error(RuntimeError)
|
236
244
|
end
|
237
245
|
|
238
246
|
it 'should create a new row if it did not exist before' do
|
239
|
-
expect(
|
240
|
-
|
241
|
-
expect(
|
242
|
-
expect(
|
247
|
+
expect(subject.sheet_data[11]).to be_nil
|
248
|
+
subject.change_row_height(11, 30)
|
249
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
250
|
+
expect(subject.get_row_height(11)).to eq(30)
|
243
251
|
end
|
244
252
|
end
|
245
253
|
|
246
254
|
describe '.change_row_horizontal_alignment' do
|
247
255
|
it 'should cause row and cells to horizontally align as specified by the passed in string' do
|
248
|
-
|
249
|
-
expect(
|
250
|
-
expect(
|
256
|
+
subject.change_row_horizontal_alignment(0, 'center')
|
257
|
+
expect(subject.get_row_alignment(0, true)).to eq('center')
|
258
|
+
expect(subject[0][5].horizontal_alignment).to eq('center')
|
251
259
|
end
|
252
260
|
|
253
261
|
it 'should cause error if a negative argument is passed in' do
|
254
262
|
expect {
|
255
|
-
|
263
|
+
subject.change_row_horizontal_alignment(-1, 'center')
|
256
264
|
}.to raise_error(RuntimeError)
|
257
265
|
end
|
258
266
|
|
259
267
|
it 'should create a new row if it did not exist before' do
|
260
|
-
expect(
|
261
|
-
|
262
|
-
expect(
|
263
|
-
expect(
|
268
|
+
expect(subject.sheet_data[11]).to be_nil
|
269
|
+
subject.change_row_horizontal_alignment(11, 'center')
|
270
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
271
|
+
expect(subject.get_row_alignment(11, true)).to eq('center')
|
264
272
|
end
|
265
273
|
end
|
266
274
|
|
267
275
|
describe '.change_row_vertical_alignment' do
|
268
276
|
it 'should cause row and cells to vertically align as specified by the passed in string' do
|
269
|
-
|
270
|
-
expect(
|
271
|
-
expect(
|
277
|
+
subject.change_row_vertical_alignment(0, 'center')
|
278
|
+
expect(subject.get_row_alignment(0, false)).to eq('center')
|
279
|
+
expect(subject[0][5].vertical_alignment).to eq('center')
|
272
280
|
end
|
273
281
|
|
274
282
|
it 'should cause error if a negative argument is passed in' do
|
275
283
|
expect {
|
276
|
-
|
284
|
+
subject.change_row_vertical_alignment(-1, 'center')
|
277
285
|
}.to raise_error(RuntimeError)
|
278
286
|
end
|
279
287
|
|
280
288
|
it 'should create a new row if it did not exist before' do
|
281
|
-
expect(
|
282
|
-
|
283
|
-
expect(
|
284
|
-
expect(
|
289
|
+
expect(subject.sheet_data[11]).to be_nil
|
290
|
+
subject.change_row_vertical_alignment(11, 'center')
|
291
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
292
|
+
expect(subject.get_row_alignment(11, false)).to eq('center')
|
285
293
|
end
|
286
294
|
end
|
287
295
|
|
288
296
|
describe '.change_row_border' do
|
289
|
-
|
290
297
|
it 'should cause error if a negative argument is passed in' do
|
291
298
|
expect {
|
292
|
-
|
299
|
+
subject.change_row_border(-1, :left, 'thin')
|
293
300
|
}.to raise_error(RuntimeError)
|
294
301
|
end
|
295
302
|
|
296
303
|
it 'should create a new row if it did not exist before' do
|
297
|
-
expect(
|
298
|
-
|
299
|
-
expect(
|
300
|
-
expect(
|
304
|
+
expect(subject.sheet_data[11]).to be_nil
|
305
|
+
subject.change_row_border(11, :left, 'thin')
|
306
|
+
expect(subject.sheet_data[11]).to be_a(RubyXL::Row)
|
307
|
+
expect(subject.get_row_border(11, :left)).to eq('thin')
|
301
308
|
end
|
302
309
|
|
303
310
|
it 'should cause row and cells to have border at top of specified weight' do
|
304
|
-
|
305
|
-
expect(
|
306
|
-
expect(
|
311
|
+
subject.change_row_border(0, :top, 'thin')
|
312
|
+
expect(subject.get_row_border(0, :top)).to eq('thin')
|
313
|
+
expect(subject[0][5].get_border(:top)).to eq('thin')
|
307
314
|
end
|
308
315
|
|
309
316
|
it 'should cause row and cells to have border at left of specified weight' do
|
310
|
-
|
311
|
-
expect(
|
312
|
-
expect(
|
317
|
+
subject.change_row_border(0, :left, 'thin')
|
318
|
+
expect(subject.get_row_border(0, :left)).to eq('thin')
|
319
|
+
expect(subject[0][5].get_border(:left)).to eq('thin')
|
313
320
|
end
|
314
321
|
|
315
322
|
it 'should cause row and cells to have border at right of specified weight' do
|
316
|
-
|
317
|
-
expect(
|
318
|
-
expect(
|
323
|
+
subject.change_row_border(0, :right, 'thin')
|
324
|
+
expect(subject.get_row_border(0, :right)).to eq('thin')
|
325
|
+
expect(subject[0][5].get_border(:right)).to eq('thin')
|
319
326
|
end
|
320
327
|
|
321
328
|
it 'should cause row to have border at bottom of specified weight' do
|
322
|
-
|
323
|
-
expect(
|
324
|
-
expect(
|
329
|
+
subject.change_row_border(0, :bottom, 'thin')
|
330
|
+
expect(subject.get_row_border(0, :bottom)).to eq('thin')
|
331
|
+
expect(subject[0][5].get_border(:bottom)).to eq('thin')
|
325
332
|
end
|
326
333
|
|
327
334
|
it 'should cause row to have border at diagonal of specified weight' do
|
328
|
-
|
329
|
-
expect(
|
330
|
-
expect(
|
335
|
+
subject.change_row_border(0, :diagonal, 'thin')
|
336
|
+
expect(subject.get_row_border(0, :diagonal)).to eq('thin')
|
337
|
+
expect(subject[0][5].get_border(:diagonal)).to eq('thin')
|
331
338
|
end
|
332
339
|
end
|
333
340
|
|
334
341
|
describe '.change_column_font_name' do
|
335
342
|
it 'should cause column and cell font names to match string passed in' do
|
336
|
-
|
337
|
-
expect(
|
338
|
-
expect(
|
343
|
+
subject.change_column_font_name(0, 'Arial')
|
344
|
+
expect(subject.get_column_font_name(0)).to eq('Arial')
|
345
|
+
expect(subject[5][0].font_name).to eq('Arial')
|
339
346
|
end
|
340
347
|
|
341
348
|
it 'should cause error if a negative argument is passed in' do
|
342
349
|
expect {
|
343
|
-
|
350
|
+
subject.change_column_font_name(-1, 'Arial')
|
344
351
|
}.to raise_error(RuntimeError)
|
345
352
|
end
|
346
353
|
end
|
347
354
|
|
348
355
|
describe '.change_column_font_size' do
|
349
356
|
it 'should make column and cell font sizes equal font number passed' do
|
350
|
-
|
351
|
-
expect(
|
352
|
-
expect(
|
357
|
+
subject.change_column_font_size(0, 20)
|
358
|
+
expect(subject.get_column_font_size(0)).to eq(20)
|
359
|
+
expect(subject[5][0].font_size).to eq(20)
|
353
360
|
end
|
354
361
|
|
355
362
|
it 'should cause an error if a string passed' do
|
356
363
|
expect {
|
357
|
-
|
364
|
+
subject.change_column_font_size(0, '20')
|
358
365
|
}.to raise_error(RuntimeError)
|
359
366
|
end
|
360
367
|
|
361
368
|
it 'should cause error if a negative argument is passed in' do
|
362
369
|
expect {
|
363
|
-
|
370
|
+
subject.change_column_font_size(-1, 20)
|
364
371
|
}.to raise_error(RuntimeError)
|
365
372
|
end
|
366
373
|
end
|
367
374
|
|
368
375
|
describe '.change_column_font_color' do
|
369
376
|
it 'should make column and cell font colors equal to font color passed' do
|
370
|
-
|
371
|
-
expect(
|
372
|
-
expect(
|
377
|
+
subject.change_column_font_color(0, '0f0f0f')
|
378
|
+
expect(subject.get_column_font_color(0)).to eq('0f0f0f')
|
379
|
+
expect(subject[5][0].font_color).to eq('0f0f0f')
|
373
380
|
end
|
374
381
|
|
375
382
|
it 'should raise error if hex color code not passed' do
|
376
383
|
expect {
|
377
|
-
|
384
|
+
subject.change_column_font_color(0, 'G')
|
378
385
|
}.to raise_error(RuntimeError)
|
379
386
|
end
|
380
387
|
|
381
388
|
it 'should raise error if hex color code includes # character' do
|
382
389
|
expect {
|
383
|
-
|
390
|
+
subject.change_column_font_color(0, '#FFF000')
|
384
391
|
}.to raise_error(RuntimeError)
|
385
392
|
end
|
386
393
|
|
387
394
|
it 'should cause error if a negative argument is passed in' do
|
388
395
|
expect {
|
389
|
-
|
396
|
+
subject.change_column_font_color(-1, '0f0f0f')
|
390
397
|
}.to raise_error(RuntimeError)
|
391
398
|
end
|
392
399
|
end
|
393
400
|
|
394
401
|
describe '.change_column_italics' do
|
395
402
|
it 'should make column and cell fonts italicized when true is passed' do
|
396
|
-
|
397
|
-
expect(
|
398
|
-
expect(
|
403
|
+
subject.change_column_italics(0, true)
|
404
|
+
expect(subject.is_column_italicized(0)).to eq(true)
|
405
|
+
expect(subject[5][0].is_italicized).to eq(true)
|
399
406
|
end
|
400
407
|
|
401
408
|
it 'should cause error if a negative argument is passed in' do
|
402
409
|
expect {
|
403
|
-
|
410
|
+
subject.change_column_italics(-1, false)
|
404
411
|
}.to raise_error(RuntimeError)
|
405
412
|
end
|
406
413
|
end
|
407
414
|
|
408
415
|
describe '.change_column_bold' do
|
409
416
|
it 'should make column and cell fonts bolded when true is passed' do
|
410
|
-
|
411
|
-
expect(
|
412
|
-
expect(
|
417
|
+
subject.change_column_bold(0, true)
|
418
|
+
expect(subject.is_column_bolded(0)).to eq(true)
|
419
|
+
expect(subject[5][0].is_bolded).to eq(true)
|
413
420
|
end
|
414
421
|
|
415
422
|
it 'should cause error if a negative argument is passed in' do
|
416
423
|
expect {
|
417
|
-
|
424
|
+
subject.change_column_bold(-1, false)
|
418
425
|
}.to raise_error(RuntimeError)
|
419
426
|
end
|
420
427
|
end
|
421
428
|
|
422
429
|
describe '.change_column_underline' do
|
423
430
|
it 'should make column and cell fonts underlined when true is passed' do
|
424
|
-
|
425
|
-
expect(
|
426
|
-
expect(
|
431
|
+
subject.change_column_underline(0, true)
|
432
|
+
expect(subject.is_column_underlined(0)).to eq(true)
|
433
|
+
expect(subject[5][0].is_underlined).to eq(true)
|
427
434
|
end
|
428
435
|
|
429
436
|
it 'should cause error if a negative argument is passed in' do
|
430
437
|
expect {
|
431
|
-
|
438
|
+
subject.change_column_underline(-1, false)
|
432
439
|
}.to raise_error(RuntimeError)
|
433
440
|
end
|
434
441
|
end
|
435
442
|
|
436
443
|
describe '.change_column_strikethrough' do
|
437
444
|
it 'should make column and cell fonts struckthrough when true is passed' do
|
438
|
-
|
439
|
-
expect(
|
440
|
-
expect(
|
445
|
+
subject.change_column_strikethrough(0, true)
|
446
|
+
expect(subject.is_column_struckthrough(0)).to eq(true)
|
447
|
+
expect(subject[5][0].is_struckthrough).to eq(true)
|
441
448
|
end
|
442
449
|
|
443
450
|
it 'should cause error if a negative argument is passed in' do
|
444
451
|
expect {
|
445
|
-
|
452
|
+
subject.change_column_strikethrough(-1, false)
|
446
453
|
}.to raise_error(RuntimeError)
|
447
454
|
end
|
448
455
|
end
|
449
456
|
|
450
457
|
describe '.change_column_width_raw' do
|
451
458
|
it 'should make column width match number which is passed' do
|
452
|
-
|
453
|
-
expect(
|
459
|
+
subject.change_column_width_raw(0, 30.0002)
|
460
|
+
expect(subject.get_column_width_raw(0)).to eq(30.0002)
|
454
461
|
end
|
455
462
|
|
456
463
|
it 'should cause error if a negative argument is passed in' do
|
457
464
|
expect {
|
458
|
-
|
465
|
+
subject.change_column_width_raw(-1, 10)
|
459
466
|
}.to raise_error(RuntimeError)
|
460
467
|
end
|
461
468
|
end
|
@@ -463,182 +470,193 @@ describe RubyXL::Worksheet do
|
|
463
470
|
describe '.change_column_fill' do
|
464
471
|
it 'should raise error if hex color code not passed' do
|
465
472
|
expect {
|
466
|
-
|
473
|
+
subject.change_column_fill(0, 'G')
|
467
474
|
}.to raise_error(RuntimeError)
|
468
475
|
end
|
469
476
|
|
470
477
|
it 'should raise error if hex color code includes # character' do
|
471
478
|
expect {
|
472
|
-
|
479
|
+
subject.change_column_fill(3, '#FFF000')
|
473
480
|
}.to raise_error(RuntimeError)
|
474
481
|
end
|
475
482
|
|
476
483
|
it 'should make column and cell fill colors equal hex color code passed' do
|
477
|
-
|
478
|
-
expect(
|
479
|
-
expect(
|
484
|
+
subject.change_column_fill(0, '111111')
|
485
|
+
expect(subject.get_column_fill(0)).to eq('111111')
|
486
|
+
expect(subject[5][0].fill_color).to eq('111111')
|
480
487
|
end
|
481
488
|
|
482
489
|
it 'should cause error if a negative argument is passed in' do
|
483
490
|
expect {
|
484
|
-
|
491
|
+
subject.change_column_fill(-1, '111111')
|
485
492
|
}.to raise_error(RuntimeError)
|
486
493
|
end
|
487
494
|
end
|
488
495
|
|
489
496
|
describe '.change_column_horizontal_alignment' do
|
490
497
|
it 'should cause column and cell to horizontally align as specified by the passed in string' do
|
491
|
-
|
492
|
-
expect(
|
493
|
-
expect(
|
498
|
+
subject.change_column_horizontal_alignment(0, 'center')
|
499
|
+
expect(subject.get_column_alignment(0, :horizontal)).to eq('center')
|
500
|
+
expect(subject[5][0].horizontal_alignment).to eq('center')
|
494
501
|
end
|
495
502
|
|
496
503
|
it 'should cause error if a negative argument is passed in' do
|
497
504
|
expect {
|
498
|
-
|
505
|
+
subject.change_column_horizontal_alignment(-1, 'center')
|
499
506
|
}.to raise_error(RuntimeError)
|
500
507
|
end
|
501
508
|
end
|
502
509
|
|
503
510
|
describe '.change_column_vertical_alignment' do
|
504
511
|
it 'should cause column and cell to vertically align as specified by the passed in string' do
|
505
|
-
|
506
|
-
expect(
|
507
|
-
expect(
|
512
|
+
subject.change_column_vertical_alignment(0, 'center')
|
513
|
+
expect(subject.get_column_alignment(0, :vertical)).to eq('center')
|
514
|
+
expect(subject[5][0].vertical_alignment).to eq('center')
|
508
515
|
end
|
509
516
|
|
510
517
|
it 'should cause error if a negative argument is passed in' do
|
511
518
|
expect {
|
512
|
-
|
519
|
+
subject.change_column_vertical_alignment(-1, 'center')
|
513
520
|
}.to raise_error(RuntimeError)
|
514
521
|
end
|
515
522
|
|
516
523
|
it 'should set column width if column alignment is changed' do
|
517
524
|
test_column = 2
|
518
|
-
expect(
|
519
|
-
expect(
|
520
|
-
expect(
|
521
|
-
|
522
|
-
expect(
|
523
|
-
expect(
|
524
|
-
expect(
|
525
|
+
expect(subject.get_column_alignment(test_column, :vertical)).to be_nil
|
526
|
+
expect(subject.get_column_width_raw(test_column)).to be_nil
|
527
|
+
expect(subject.get_column_width(test_column)).to eq(RubyXL::ColumnRange::DEFAULT_WIDTH)
|
528
|
+
subject.change_column_vertical_alignment(test_column, 'top')
|
529
|
+
expect(subject.get_column_width_raw(test_column)).not_to be_nil
|
530
|
+
expect(subject.get_column_width(test_column)).to eq(RubyXL::ColumnRange::DEFAULT_WIDTH)
|
531
|
+
expect(subject.get_column_alignment(test_column, :vertical)).to eq('top')
|
525
532
|
end
|
526
533
|
end
|
527
534
|
|
528
535
|
describe '.change_column_border' do
|
529
536
|
it 'should cause error if a negative argument is passed in' do
|
530
537
|
expect {
|
531
|
-
|
538
|
+
subject.change_column_border(-1, :top, 'thin')
|
532
539
|
}.to raise_error(RuntimeError)
|
533
540
|
end
|
534
541
|
|
535
542
|
it 'should cause column and cells within to have border at top of specified weight' do
|
536
|
-
|
537
|
-
expect(
|
538
|
-
expect(
|
543
|
+
subject.change_column_border(0, :top, 'thin')
|
544
|
+
expect(subject.get_column_border(0, :top)).to eq('thin')
|
545
|
+
expect(subject[5][0].get_border(:top)).to eq('thin')
|
539
546
|
end
|
540
547
|
|
541
548
|
it 'should cause column and cells within to have border at left of specified weight' do
|
542
|
-
|
543
|
-
expect(
|
544
|
-
expect(
|
549
|
+
subject.change_column_border(0, :left, 'thin')
|
550
|
+
expect(subject.get_column_border(0, :left)).to eq('thin')
|
551
|
+
expect(subject[5][0].get_border(:left)).to eq('thin')
|
545
552
|
end
|
546
553
|
|
547
554
|
it 'should cause column and cells within to have border at right of specified weight' do
|
548
|
-
|
549
|
-
expect(
|
550
|
-
expect(
|
555
|
+
subject.change_column_border(0, :right, 'thin')
|
556
|
+
expect(subject.get_column_border(0, :right)).to eq('thin')
|
557
|
+
expect(subject[5][0].get_border(:right)).to eq('thin')
|
551
558
|
end
|
552
559
|
|
553
560
|
it 'should cause column and cells within to have border at bottom of specified weight' do
|
554
|
-
|
555
|
-
expect(
|
556
|
-
expect(
|
561
|
+
subject.change_column_border(0, :bottom, 'thin')
|
562
|
+
expect(subject.get_column_border(0, :bottom)).to eq('thin')
|
563
|
+
expect(subject[5][0].get_border(:bottom)).to eq('thin')
|
557
564
|
end
|
558
565
|
|
559
566
|
it 'should cause column and cells within to have border at diagonal of specified weight' do
|
560
|
-
|
561
|
-
expect(
|
562
|
-
expect(
|
567
|
+
subject.change_column_border(0, :diagonal, 'thin')
|
568
|
+
expect(subject.get_column_border(0, :diagonal)).to eq('thin')
|
569
|
+
expect(subject[5][0].get_border(:diagonal)).to eq('thin')
|
563
570
|
end
|
564
571
|
end
|
565
572
|
|
566
573
|
describe '.merge_cells' do
|
567
574
|
it 'should merge cells in any valid range specified by indices' do
|
568
|
-
|
569
|
-
expect(
|
575
|
+
subject.merge_cells(0, 0, 1, 1)
|
576
|
+
expect(subject.merged_cells.collect{ |r| r.ref.to_s }).to eq(['A1:B2'])
|
570
577
|
end
|
571
578
|
end
|
572
579
|
|
573
580
|
describe '.add_cell' do
|
574
581
|
it 'should add new cell where specified, even if a cell is already there (default)' do
|
575
|
-
|
576
|
-
|
577
|
-
|
582
|
+
old_cell = subject[0][0]
|
583
|
+
old_cell_value = old_cell.value.to_s
|
584
|
+
|
585
|
+
subject.add_cell(0, 0, 'TEST')
|
586
|
+
expect(subject[0][0].value).not_to eq(old_cell_value)
|
587
|
+
expect(subject[0][0].value).to eq('TEST')
|
578
588
|
end
|
579
589
|
|
580
590
|
it 'should add a new cell below nil rows that might exist' do
|
581
|
-
|
582
|
-
|
583
|
-
expect(
|
591
|
+
subject.sheet_data.rows << nil << nil
|
592
|
+
subject.add_cell(15, 0, 'TEST')
|
593
|
+
expect(subject[15][0].value).to eq('TEST')
|
584
594
|
end
|
585
595
|
|
586
596
|
it 'should add new cell where specified with formula, even if a cell is already there (default)' do
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
597
|
+
old_cell = subject[0][0]
|
598
|
+
old_cell_value = old_cell.value.to_s
|
599
|
+
old_cell_formula = old_cell.formula.expression.to_s
|
600
|
+
|
601
|
+
subject.add_cell(0, 0, '', 'SUM(A2:A10)')
|
602
|
+
expect(subject[0][0].value).not_to eq(old_cell_value)
|
603
|
+
expect(subject[0][0].formula).not_to eq(old_cell_formula)
|
604
|
+
expect(subject[0][0].value).to eq('')
|
605
|
+
expect(subject[0][0].formula.expression).to eq('SUM(A2:A10)')
|
592
606
|
end
|
593
607
|
|
594
608
|
it 'should not overwrite when a cell is present when overwrite is specified to be false' do
|
595
|
-
|
596
|
-
|
597
|
-
|
609
|
+
old_cell = subject[0][0]
|
610
|
+
old_cell_value = old_cell.value.to_s
|
611
|
+
old_cell_formula = old_cell.formula.expression.to_s
|
612
|
+
|
613
|
+
subject.add_cell(0, 0, 'TEST', 'B2', false)
|
614
|
+
expect(subject[0][0].value).to eq(old_cell_value)
|
615
|
+
expect(subject[0][0].formula.expression.to_s).to eq(old_cell_formula)
|
598
616
|
end
|
599
617
|
|
600
618
|
it 'should still add a new cell when there is no cell to be overwritten' do
|
601
|
-
|
602
|
-
expect(
|
603
|
-
expect(
|
619
|
+
subject.add_cell(11, 11, 'TEST', 'B2', false)
|
620
|
+
expect(subject[11][11].value).to eq('TEST')
|
621
|
+
expect(subject[11][11].formula.expression).to eq('B2')
|
604
622
|
end
|
605
623
|
|
606
624
|
it 'should cause error if a negative argument is passed in' do
|
607
625
|
expect {
|
608
|
-
|
626
|
+
subject.add_cell(-1, -1, '')
|
609
627
|
}.to raise_error(RuntimeError)
|
610
628
|
end
|
611
629
|
end
|
612
630
|
|
613
631
|
describe '.delete_row' do
|
614
632
|
it 'should delete a row at index specified, "pushing" everything else "up"' do
|
615
|
-
|
616
|
-
expect(
|
617
|
-
expect(
|
618
|
-
expect(
|
619
|
-
expect(
|
633
|
+
subject.delete_row(0)
|
634
|
+
expect(subject[0][0].value).to eq('0:1')
|
635
|
+
expect(subject[0][0].formula.expression.to_s).to eq('F0:1')
|
636
|
+
expect(subject[0][0].row).to eq(0)
|
637
|
+
expect(subject[0][0].column).to eq(0)
|
620
638
|
end
|
621
639
|
|
622
640
|
it 'should delete a row at index specified, adjusting styles for other rows' do
|
623
|
-
|
624
|
-
|
625
|
-
expect(
|
641
|
+
subject.change_row_font_name(1, 'Courier')
|
642
|
+
subject.delete_row(0)
|
643
|
+
expect(subject.get_row_font_name(0)).to eq('Courier')
|
626
644
|
end
|
627
645
|
|
628
646
|
it 'should preserve (rather than fix) formulas that reference cells in "pushed up" rows' do
|
629
|
-
|
630
|
-
|
631
|
-
expect(
|
647
|
+
subject.add_cell(11, 0, nil, 'SUM(A1:A10)')
|
648
|
+
subject.delete_row(0)
|
649
|
+
expect(subject[10][0].formula.expression).to eq('SUM(A1:A10)')
|
632
650
|
end
|
633
651
|
|
634
652
|
it 'should cause error if a negative argument is passed in' do
|
635
653
|
expect {
|
636
|
-
|
654
|
+
subject.delete_row(-1)
|
637
655
|
}.to raise_error(RuntimeError)
|
638
656
|
end
|
639
657
|
|
640
658
|
it 'should properly reindex the cells' do
|
641
|
-
|
659
|
+
subject.sheet_data.rows.each_with_index { |row, r|
|
642
660
|
if (SKIP_ROW_COL == r) then
|
643
661
|
expect(row).to be_nil
|
644
662
|
else
|
@@ -653,52 +671,157 @@ describe RubyXL::Worksheet do
|
|
653
671
|
end
|
654
672
|
}
|
655
673
|
end
|
674
|
+
|
675
|
+
describe 'merged_cells updating' do
|
676
|
+
context 'merged cells in the row' do
|
677
|
+
# | A1 | B1 | C1 | D1 | E1 |
|
678
|
+
# | A2 | MERGED | E2 |
|
679
|
+
# | A3 | B3 | C3 | D3 | E3 |
|
680
|
+
before do
|
681
|
+
subject.merge_cells(1, 1, 1, 3)
|
682
|
+
expect(subject.merged_cells.size).to eq 1
|
683
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:D2'
|
684
|
+
end
|
685
|
+
it 'should delete merged cell' do
|
686
|
+
subject.delete_row(1)
|
687
|
+
expect(subject.merged_cells.size).to eq 0
|
688
|
+
end
|
689
|
+
end
|
690
|
+
context 'merged vertical two cells' do
|
691
|
+
# | A1 | B1 | C1 |
|
692
|
+
# | A2 | MERGED | C2 |
|
693
|
+
# | A3 | | C3 |
|
694
|
+
# | A4 | B4 | C4 |
|
695
|
+
before do
|
696
|
+
subject.merge_cells(1, 1, 2, 1)
|
697
|
+
expect(subject.merged_cells.size).to eq 1
|
698
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:B3'
|
699
|
+
end
|
700
|
+
it 'should delete merged cell' do
|
701
|
+
subject.delete_row(1)
|
702
|
+
expect(subject.merged_cells.size).to eq 0
|
703
|
+
end
|
704
|
+
end
|
705
|
+
|
706
|
+
context 'merged three or more rows' do
|
707
|
+
# | A1 | B1 | C1 | D1 | E1 |
|
708
|
+
# | A2 | | E2 |
|
709
|
+
# | A3 | MERGED | E3 |
|
710
|
+
# | A4 | | E4 |
|
711
|
+
# | A5 | B5 | C5 | D5 | E5 |
|
712
|
+
before do
|
713
|
+
subject.merge_cells(1, 1, 3, 3)
|
714
|
+
expect(subject.merged_cells.size).to eq 1
|
715
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:D4'
|
716
|
+
end
|
717
|
+
|
718
|
+
# | A2 | | E2 |
|
719
|
+
# | A3 | MERGED | E3 |
|
720
|
+
# | A4 | | E4 |
|
721
|
+
# | A5 | B5 | C5 | D5 | E5 |
|
722
|
+
it 'should updates merged cell when delete above the cell' do
|
723
|
+
subject.delete_row(0)
|
724
|
+
expect(subject.merged_cells.size).to eq 1
|
725
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B1:D3'
|
726
|
+
end
|
727
|
+
|
728
|
+
# | A1 | B1 | C1 | D1 | E1 |
|
729
|
+
# | A3 | MERGED | E3 |
|
730
|
+
# | A4 | | E4 |
|
731
|
+
# | A5 | B5 | C5 | D5 | E5 |
|
732
|
+
it 'should updates merged cell when delete top of the cell' do
|
733
|
+
subject.delete_row(1)
|
734
|
+
expect(subject.merged_cells.size).to eq 1
|
735
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:D3'
|
736
|
+
end
|
737
|
+
|
738
|
+
# | A1 | B1 | C1 | D1 | E1 |
|
739
|
+
# | A2 | MERGED | E2 |
|
740
|
+
# | A4 | | E4 |
|
741
|
+
# | A5 | B5 | C5 | D5 | E5 |
|
742
|
+
it 'should updates merged cell when delete middle of the cell' do
|
743
|
+
subject.delete_row(2)
|
744
|
+
expect(subject.merged_cells.size).to eq 1
|
745
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:D3'
|
746
|
+
end
|
747
|
+
|
748
|
+
# | A1 | B1 | C1 | D1 | E1 |
|
749
|
+
# | A2 | MERGED | E2 |
|
750
|
+
# | A3 | | E3 |
|
751
|
+
# | A5 | B5 | C5 | D5 | E5 |
|
752
|
+
it 'should updates merged cell when delete bottom of the cell' do
|
753
|
+
subject.delete_row(3)
|
754
|
+
expect(subject.merged_cells.size).to eq 1
|
755
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:D3'
|
756
|
+
end
|
757
|
+
|
758
|
+
# | A1 | B1 | C1 | D1 | E1 |
|
759
|
+
# | A2 | | E2 |
|
760
|
+
# | A3 | MERGED | E3 |
|
761
|
+
# | A4 | | E4 |
|
762
|
+
it 'should not updates merged cell when ldelete below the cell' do
|
763
|
+
subject.delete_row(4)
|
764
|
+
expect(subject.merged_cells.size).to eq 1
|
765
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:D4'
|
766
|
+
end
|
767
|
+
end
|
768
|
+
end
|
769
|
+
|
770
|
+
it 'should not make empty merged_cells when a worksheet does not have a merged cell' do
|
771
|
+
# If a worksheet has empty merged_cells, the xlsx file has an XML error and has to repair.
|
772
|
+
subject.delete_row(0)
|
773
|
+
expect(subject.merged_cells).to be_nil
|
774
|
+
end
|
656
775
|
end
|
657
776
|
|
658
777
|
describe '.insert_row' do
|
659
778
|
it 'should insert a row at index specified, "pushing" everything else "down"' do
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
expect(@worksheet[1][0].formula.expression.to_s).to eq(@old_cell_formula)
|
779
|
+
old_cell = subject[0][0]
|
780
|
+
old_cell_value = old_cell.value.to_s
|
781
|
+
old_cell_formula = old_cell.formula.expression.to_s
|
664
782
|
|
665
|
-
|
666
|
-
expect(
|
783
|
+
subject.insert_row(0)
|
784
|
+
expect(subject[0][0]).to be_nil
|
785
|
+
expect(subject[1][0].value).to eq(old_cell_value)
|
786
|
+
expect(subject[1][0].formula.expression.to_s).to eq(old_cell_formula)
|
787
|
+
|
788
|
+
subject.insert_row(7)
|
789
|
+
expect(subject[7][0].is_underlined).to be_nil
|
667
790
|
end
|
668
791
|
|
669
792
|
it 'should insert a row skipping nil rows that might exist' do
|
670
|
-
|
671
|
-
rows =
|
672
|
-
|
673
|
-
expect(
|
793
|
+
subject.sheet_data.rows << nil << nil
|
794
|
+
rows = subject.sheet_data.rows.size
|
795
|
+
subject.insert_row(rows)
|
796
|
+
expect(subject[rows - 1]).to be_nil
|
674
797
|
end
|
675
798
|
|
676
799
|
it 'should insert a row at index specified, copying styles from row "above"' do
|
677
|
-
|
678
|
-
|
679
|
-
expect(
|
800
|
+
subject.change_row_font_name(0, 'Courier')
|
801
|
+
subject.insert_row(1)
|
802
|
+
expect(subject.get_row_font_name(1)).to eq('Courier')
|
680
803
|
end
|
681
804
|
|
682
805
|
it 'should preserve (rather than fix) formulas that reference cells "pushed down" rows' do
|
683
|
-
|
684
|
-
|
685
|
-
expect(
|
806
|
+
subject.add_cell(5, 0, nil, 'SUM(A1:A4)')
|
807
|
+
subject.insert_row(0)
|
808
|
+
expect(subject[6][0].formula.expression).to eq('SUM(A1:A4)')
|
686
809
|
end
|
687
810
|
|
688
811
|
it 'should cause error if a negative argument is passed in' do
|
689
812
|
expect {
|
690
|
-
|
813
|
+
subject.insert_row(-1)
|
691
814
|
}.to raise_error(RuntimeError)
|
692
815
|
end
|
693
816
|
|
694
|
-
it 'should expand matrix to fit argument if nonnegative'
|
695
|
-
expect(
|
696
|
-
|
697
|
-
expect(
|
817
|
+
it 'should expand matrix to fit argument if nonnegative' do
|
818
|
+
expect(subject.sheet_data.size).to eq(11)
|
819
|
+
subject.insert_row(11)
|
820
|
+
expect(subject.sheet_data.size).to eq(13)
|
698
821
|
end
|
699
822
|
|
700
|
-
it 'should properly reindex the cells'
|
701
|
-
|
823
|
+
it 'should properly reindex the cells' do
|
824
|
+
subject.sheet_data.rows.each_with_index { |row, r|
|
702
825
|
if (SKIP_ROW_COL == r) then
|
703
826
|
expect(row).to be_nil
|
704
827
|
else
|
@@ -713,32 +836,83 @@ describe RubyXL::Worksheet do
|
|
713
836
|
end
|
714
837
|
}
|
715
838
|
end
|
839
|
+
|
840
|
+
describe 'merged_cells updating' do
|
841
|
+
# | A1 | B1 | C1 | D1 |
|
842
|
+
# | A2 | MERGED | D2 |
|
843
|
+
# | A3 | | D3 |
|
844
|
+
# | A4 | B4 | C4 | D4 |
|
845
|
+
before do
|
846
|
+
subject.merge_cells(1, 1, 2, 2)
|
847
|
+
expect(subject.merged_cells.size).to eq 1
|
848
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:C3'
|
849
|
+
end
|
850
|
+
|
851
|
+
# | A1 | B1 | C1 | D1 |
|
852
|
+
# | | | | |
|
853
|
+
# | A2 | MERGED | D2 |
|
854
|
+
# | A3 | | D3 |
|
855
|
+
# | A4 | B4 | C4 | D4 |
|
856
|
+
it 'should updates merged cell when insert above the cell' do
|
857
|
+
subject.insert_row(1)
|
858
|
+
expect(subject.merged_cells.size).to eq 1
|
859
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B3:C4'
|
860
|
+
end
|
861
|
+
|
862
|
+
# | A1 | B1 | C1 | D1 |
|
863
|
+
# | A2 | | D2 |
|
864
|
+
# | | MERGED | |
|
865
|
+
# | A3 | | D3 |
|
866
|
+
# | A4 | B4 | C4 | D4 |
|
867
|
+
it 'should updates merged cell when insert into the cell' do
|
868
|
+
subject.insert_row(2)
|
869
|
+
expect(subject.merged_cells.size).to eq 1
|
870
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:C4'
|
871
|
+
end
|
872
|
+
|
873
|
+
# | A1 | B1 | C1 | D1 |
|
874
|
+
# | A2 | MERGED | D2 |
|
875
|
+
# | A3 | | D3 |
|
876
|
+
# | | | | |
|
877
|
+
# | A4 | B4 | C4 | D4 |
|
878
|
+
it 'should not updates merged cell when insert below the cell' do
|
879
|
+
subject.insert_row(3)
|
880
|
+
expect(subject.merged_cells.size).to eq 1
|
881
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:C3'
|
882
|
+
end
|
883
|
+
end
|
884
|
+
|
885
|
+
it 'should not make empty merged_cells when a worksheet does not have a merged cell' do
|
886
|
+
# If a worksheet has empty merged_cells, the xlsx file has an XML error and has to repair.
|
887
|
+
subject.insert_row(0)
|
888
|
+
expect(subject.merged_cells).to be_nil
|
889
|
+
end
|
716
890
|
end
|
717
891
|
|
718
892
|
describe '.delete_column' do
|
719
893
|
it 'should delete a column at index specified, "pushing" everything else "left"' do
|
720
|
-
|
721
|
-
expect(
|
722
|
-
expect(
|
723
|
-
expect(
|
894
|
+
subject.delete_column(0)
|
895
|
+
expect(subject[0][0].value).to eq('1:0')
|
896
|
+
expect(subject[0][0].formula.expression.to_s).to eq('F1:0')
|
897
|
+
expect(subject[0][0].row).to eq(0)
|
724
898
|
end
|
725
899
|
|
726
900
|
it 'should delete a column at index specified, "pushing" styles "left"' do
|
727
|
-
|
728
|
-
|
729
|
-
expect(
|
901
|
+
subject.change_column_font_name(1, 'Courier')
|
902
|
+
subject.delete_column(0)
|
903
|
+
expect(subject.get_column_font_name(0)).to eq('Courier')
|
730
904
|
end
|
731
905
|
|
732
906
|
it 'should preserve (rather than fix) formulas that reference cells in "pushed left" columns' do
|
733
|
-
|
734
|
-
|
735
|
-
expect(
|
907
|
+
subject.add_cell(0, 4, nil, 'SUM(A1:D1)')
|
908
|
+
subject.delete_column(0)
|
909
|
+
expect(subject[0][3].formula.expression).to eq('SUM(A1:D1)')
|
736
910
|
end
|
737
911
|
|
738
912
|
it 'should update cell indices after deleting the column' do
|
739
|
-
|
913
|
+
subject.delete_column(2)
|
740
914
|
|
741
|
-
|
915
|
+
subject.sheet_data.rows.each_with_index { |row, r|
|
742
916
|
if (SKIP_ROW_COL == r) then
|
743
917
|
expect(row).to be_nil
|
744
918
|
else
|
@@ -756,12 +930,12 @@ describe RubyXL::Worksheet do
|
|
756
930
|
|
757
931
|
it 'should cause error if negative argument is passed in' do
|
758
932
|
expect {
|
759
|
-
|
933
|
+
subject.delete_column(-1)
|
760
934
|
}.to raise_error(RuntimeError)
|
761
935
|
end
|
762
936
|
|
763
|
-
it 'should properly reindex the cells'
|
764
|
-
|
937
|
+
it 'should properly reindex the cells' do
|
938
|
+
subject.sheet_data.rows.each_with_index { |row, r|
|
765
939
|
if (SKIP_ROW_COL == r) then
|
766
940
|
expect(row).to be_nil
|
767
941
|
else
|
@@ -776,37 +950,142 @@ describe RubyXL::Worksheet do
|
|
776
950
|
end
|
777
951
|
}
|
778
952
|
end
|
953
|
+
|
954
|
+
describe 'merged_cells updating' do
|
955
|
+
context 'merged cells in the column' do
|
956
|
+
# | A1 | B1 | C1 |
|
957
|
+
# | A2 | | C2 |
|
958
|
+
# | A3 | MERGED | C3 |
|
959
|
+
# | A4 | | C4 |
|
960
|
+
# | A5 | B5 | C5 |
|
961
|
+
before do
|
962
|
+
subject.merge_cells(1, 1, 3, 1)
|
963
|
+
expect(subject.merged_cells.size).to eq 1
|
964
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:B4'
|
965
|
+
end
|
966
|
+
it 'should delete merged cell' do
|
967
|
+
subject.delete_column(1)
|
968
|
+
expect(subject.merged_cells.size).to eq 0
|
969
|
+
end
|
970
|
+
end
|
971
|
+
context 'merged horizontal two cells' do
|
972
|
+
# | A1 | B1 | C1 | D1 |
|
973
|
+
# | A2 | MERGED | D2 |
|
974
|
+
# | A3 | B3 | C3 | D3 |
|
975
|
+
before do
|
976
|
+
subject.merge_cells(1, 1, 1, 2)
|
977
|
+
expect(subject.merged_cells.size).to eq 1
|
978
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:C2'
|
979
|
+
end
|
980
|
+
it 'should delete merged cell' do
|
981
|
+
subject.delete_column(1)
|
982
|
+
expect(subject.merged_cells.size).to eq 0
|
983
|
+
end
|
984
|
+
end
|
985
|
+
context 'merged three or more columns' do
|
986
|
+
# | A1 | B1 | C1 | D1 | E1 |
|
987
|
+
# | A2 | | E2 |
|
988
|
+
# | A3 | MERGED | E3 |
|
989
|
+
# | A4 | | E4 |
|
990
|
+
# | A5 | B5 | C5 | D5 | E5 |
|
991
|
+
before do
|
992
|
+
subject.merge_cells(1, 1, 3, 3)
|
993
|
+
expect(subject.merged_cells.size).to eq 1
|
994
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:D4'
|
995
|
+
end
|
996
|
+
# | B1 | C1 | D1 | E1 |
|
997
|
+
# | | E2 |
|
998
|
+
# | MERGED | E3 |
|
999
|
+
# | | E4 |
|
1000
|
+
# | B5 | C5 | D5 | E5 |
|
1001
|
+
it 'should updates merged cell when delete before the cell' do
|
1002
|
+
subject.delete_column(0)
|
1003
|
+
expect(subject.merged_cells.size).to eq 1
|
1004
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'A2:C4'
|
1005
|
+
end
|
1006
|
+
# | A1 | C1 | D1 | E1 |
|
1007
|
+
# | A2 | | E2 |
|
1008
|
+
# | A3 | MERGED | E3 |
|
1009
|
+
# | A4 | | E4 |
|
1010
|
+
# | A5 | C5 | D5 | E5 |
|
1011
|
+
it 'should updates merged cell when delete left of the cell' do
|
1012
|
+
subject.delete_column(1)
|
1013
|
+
expect(subject.merged_cells.size).to eq 1
|
1014
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:C4'
|
1015
|
+
end
|
1016
|
+
# | A1 | B1 | D1 | E1 |
|
1017
|
+
# | A2 | | E2 |
|
1018
|
+
# | A3 | MERGED | E3 |
|
1019
|
+
# | A4 | | E4 |
|
1020
|
+
# | A5 | B5 | D5 | E5 |
|
1021
|
+
it 'should updates merged cell when delete center of the cell' do
|
1022
|
+
subject.delete_column(2)
|
1023
|
+
expect(subject.merged_cells.size).to eq 1
|
1024
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:C4'
|
1025
|
+
end
|
1026
|
+
# | A1 | B1 | C1 | E1 |
|
1027
|
+
# | A2 | | E2 |
|
1028
|
+
# | A3 | MERGED | E3 |
|
1029
|
+
# | A4 | | E4 |
|
1030
|
+
# | A5 | B5 | C5 | E5 |
|
1031
|
+
it 'should updates merged cell when delete right of the cell' do
|
1032
|
+
subject.delete_column(3)
|
1033
|
+
expect(subject.merged_cells.size).to eq 1
|
1034
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:C4'
|
1035
|
+
end
|
1036
|
+
# | A1 | B1 | C1 | D1 |
|
1037
|
+
# | A2 | |
|
1038
|
+
# | A3 | MERGED |
|
1039
|
+
# | A4 | |
|
1040
|
+
# | A5 | B5 | C5 | D5 |
|
1041
|
+
it 'should not updates merged cell when delete after the cell' do
|
1042
|
+
subject.delete_column(4)
|
1043
|
+
expect(subject.merged_cells.size).to eq 1
|
1044
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:D4'
|
1045
|
+
end
|
1046
|
+
end
|
1047
|
+
end
|
1048
|
+
|
1049
|
+
it 'should not make empty merged_cells when a worksheet does not have a merged cell' do
|
1050
|
+
# If a worksheet has empty merged_cells, the xlsx file has an XML error and has to repair.
|
1051
|
+
subject.delete_column(0)
|
1052
|
+
expect(subject.merged_cells).to be_nil
|
1053
|
+
end
|
779
1054
|
end
|
780
1055
|
|
781
1056
|
describe '.insert_column' do
|
782
1057
|
it 'should insert a column at index specified, "pushing" everything else "right"' do
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
1058
|
+
old_cell = subject[0][0]
|
1059
|
+
old_cell_value = old_cell.value.to_s
|
1060
|
+
old_cell_formula = old_cell.formula.expression.to_s
|
1061
|
+
|
1062
|
+
subject.insert_column(0)
|
1063
|
+
expect(subject[0][0]).to be_nil
|
1064
|
+
expect(subject[0][1].value).to eq(old_cell_value)
|
1065
|
+
expect(subject[0][1].formula.expression.to_s).to eq(old_cell_formula)
|
787
1066
|
end
|
788
1067
|
|
789
1068
|
it 'should insert a column at index specified, copying styles from column to "left"' do
|
790
|
-
|
791
|
-
|
792
|
-
expect(
|
1069
|
+
subject.change_column_font_name(0, 'Courier')
|
1070
|
+
subject.insert_column(1)
|
1071
|
+
expect(subject.get_column_font_name(1)).to eq('Courier')
|
793
1072
|
end
|
794
1073
|
|
795
1074
|
it 'should insert a column at 0 without copying any styles, when passed 0 as column index' do
|
796
|
-
|
797
|
-
|
798
|
-
expect(
|
1075
|
+
subject.change_column_font_name(0, 'Courier')
|
1076
|
+
subject.insert_column(0)
|
1077
|
+
expect(subject.get_column_font_name(0)).to eq('Verdana') # not courier
|
799
1078
|
end
|
800
1079
|
|
801
1080
|
it 'should preserve (rather than fix) formulas that reference cells in "pushed right" column' do
|
802
|
-
|
803
|
-
|
804
|
-
expect(
|
1081
|
+
subject.add_cell(0, 5, nil, 'SUM(A1:D1)')
|
1082
|
+
subject.insert_column(0)
|
1083
|
+
expect(subject[0][6].formula.expression).to eq('SUM(A1:D1)')
|
805
1084
|
end
|
806
1085
|
|
807
1086
|
it 'should update cell indices after deleting the column' do
|
808
|
-
|
809
|
-
|
1087
|
+
subject.insert_column(5)
|
1088
|
+
subject[0].cells.each_with_index { |cell, i|
|
810
1089
|
next if cell.nil?
|
811
1090
|
expect(cell.column).to eq(i)
|
812
1091
|
}
|
@@ -814,12 +1093,12 @@ describe RubyXL::Worksheet do
|
|
814
1093
|
|
815
1094
|
it 'should cause error if a negative argument is passed in' do
|
816
1095
|
expect {
|
817
|
-
|
1096
|
+
subject.insert_column(-1)
|
818
1097
|
}.to raise_error(RuntimeError)
|
819
1098
|
end
|
820
1099
|
|
821
|
-
it 'should properly reindex the cells'
|
822
|
-
|
1100
|
+
it 'should properly reindex the cells' do
|
1101
|
+
subject.sheet_data.rows.each_with_index { |row, r|
|
823
1102
|
if (SKIP_ROW_COL == r) then
|
824
1103
|
expect(row).to be_nil
|
825
1104
|
else
|
@@ -834,26 +1113,74 @@ describe RubyXL::Worksheet do
|
|
834
1113
|
end
|
835
1114
|
}
|
836
1115
|
end
|
1116
|
+
|
1117
|
+
describe 'merged_cells updating' do
|
1118
|
+
# | A1 | B1 | C1 | D1 |
|
1119
|
+
# | A2 | MERGED | D2 |
|
1120
|
+
# | A3 | | D3 |
|
1121
|
+
# | A4 | B4 | C4 | D4 |
|
1122
|
+
before do
|
1123
|
+
subject.merge_cells(1, 1, 2, 2)
|
1124
|
+
expect(subject.merged_cells.size).to eq 1
|
1125
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:C3'
|
1126
|
+
end
|
1127
|
+
|
1128
|
+
# | A1 | | B1 | C1 | D1 |
|
1129
|
+
# | A2 | | MERGED | D2 |
|
1130
|
+
# | A3 | | | D3 |
|
1131
|
+
# | A4 | | B4 | C4 | D4 |
|
1132
|
+
it 'should updates merged cell when insert before the cell' do
|
1133
|
+
subject.insert_column(1)
|
1134
|
+
expect(subject.merged_cells.size).to eq 1
|
1135
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'C2:D3'
|
1136
|
+
end
|
1137
|
+
|
1138
|
+
# | A1 | B1 | | C1 | D1 |
|
1139
|
+
# | A2 | MERGED | D2 |
|
1140
|
+
# | A3 | | D3 |
|
1141
|
+
# | A4 | B4 | | C4 | D4 |
|
1142
|
+
it 'should updates merged cell when insert into the cell' do
|
1143
|
+
subject.insert_column(2)
|
1144
|
+
expect(subject.merged_cells.size).to eq 1
|
1145
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:D3'
|
1146
|
+
end
|
1147
|
+
|
1148
|
+
# | A1 | B1 | C1 | | D1 |
|
1149
|
+
# | A2 | MERGED | | D2 |
|
1150
|
+
# | A3 | | | D3 |
|
1151
|
+
# | A4 | B4 | C4 | | D4 |
|
1152
|
+
it 'should not updates merged cell when insert after the cell' do
|
1153
|
+
subject.insert_column(3)
|
1154
|
+
expect(subject.merged_cells.size).to eq 1
|
1155
|
+
expect(subject.merged_cells.first.ref.to_s).to eq 'B2:C3'
|
1156
|
+
end
|
1157
|
+
end
|
1158
|
+
|
1159
|
+
it 'should not make empty merged_cells when a worksheet does not have a merged cell' do
|
1160
|
+
# If a worksheet has empty merged_cells, the xlsx file has an XML error and has to repair.
|
1161
|
+
subject.insert_column(0)
|
1162
|
+
expect(subject.merged_cells).to be_nil
|
1163
|
+
end
|
837
1164
|
end
|
838
1165
|
|
839
1166
|
describe '.insert_cell' do
|
840
1167
|
it 'should simply add a cell if no shift argument is specified' do
|
841
|
-
|
842
|
-
expect(
|
843
|
-
expect(
|
844
|
-
expect(
|
1168
|
+
subject.insert_cell(0, 0, 'test')
|
1169
|
+
expect(subject[0][0].value).to eq('test')
|
1170
|
+
expect(subject[0][1].value).to eq('1:0')
|
1171
|
+
expect(subject[1][0].value).to eq('0:1')
|
845
1172
|
end
|
846
1173
|
|
847
1174
|
it 'should shift cells to the right if :right is specified' do
|
848
|
-
|
849
|
-
expect(
|
850
|
-
expect(
|
851
|
-
expect(
|
1175
|
+
subject.insert_cell(0, 0, 'test', nil, :right)
|
1176
|
+
expect(subject[0][0].value).to eq('test')
|
1177
|
+
expect(subject[0][1].value).to eq('0:0')
|
1178
|
+
expect(subject[1][0].value).to eq('0:1')
|
852
1179
|
end
|
853
1180
|
|
854
1181
|
it 'should update cell indices after inserting the cell' do
|
855
|
-
|
856
|
-
|
1182
|
+
subject.insert_cell(0, 0, 'test', nil, :right)
|
1183
|
+
subject.sheet_data.rows.each_with_index { |row, r|
|
857
1184
|
if (SKIP_ROW_COL == r) then
|
858
1185
|
expect(row).to be_nil
|
859
1186
|
else
|
@@ -870,50 +1197,52 @@ describe RubyXL::Worksheet do
|
|
870
1197
|
end
|
871
1198
|
|
872
1199
|
it 'should shift cells down if :down is specified' do
|
873
|
-
|
874
|
-
expect(
|
875
|
-
expect(
|
876
|
-
expect(
|
1200
|
+
subject.insert_cell(0, 0, 'test', nil, :down)
|
1201
|
+
expect(subject[0][0].value).to eq('test')
|
1202
|
+
expect(subject[0][1].value).to eq('1:0')
|
1203
|
+
expect(subject[1][0].value).to eq('0:0')
|
877
1204
|
end
|
878
1205
|
|
879
1206
|
it 'should cause error if shift argument is specified whcih is not :right or :down' do
|
880
1207
|
expect {
|
881
|
-
|
1208
|
+
subject.insert_cell(0, 0, 'test', nil, :up)
|
882
1209
|
}.to raise_error(RuntimeError)
|
883
1210
|
end
|
884
1211
|
|
885
1212
|
it 'should cause error if a negative argument is passed in' do
|
886
1213
|
expect {
|
887
|
-
|
1214
|
+
subject.insert_cell(-1, -1)
|
888
1215
|
}.to raise_error(RuntimeError)
|
889
1216
|
end
|
890
1217
|
end
|
891
1218
|
|
892
1219
|
describe '.delete_cell' do
|
893
1220
|
it 'should make a cell nil if no shift argument specified' do
|
894
|
-
|
895
|
-
|
896
|
-
|
1221
|
+
old_cell = subject[0][0].inspect
|
1222
|
+
|
1223
|
+
deleted = subject.delete_cell(0, 0)
|
1224
|
+
expect(subject[0][0]).to be_nil
|
1225
|
+
expect(old_cell).to eq(deleted.inspect)
|
897
1226
|
end
|
898
1227
|
|
899
1228
|
it 'should return nil if a cell which is out of range is specified' do
|
900
|
-
expect(
|
1229
|
+
expect(subject.delete_cell(12, 12)).to be_nil
|
901
1230
|
end
|
902
1231
|
|
903
1232
|
it 'should cause error if a negative argument is passed in' do
|
904
1233
|
expect {
|
905
|
-
|
1234
|
+
subject.delete_cell(-1, -1)
|
906
1235
|
}.to raise_error(RuntimeError)
|
907
1236
|
end
|
908
1237
|
|
909
1238
|
it 'should shift cells to the right of the deleted cell left if :left is specified' do
|
910
|
-
|
911
|
-
expect(
|
1239
|
+
subject.delete_cell(0, 0, :left)
|
1240
|
+
expect(subject[0][0].value).to eq('1:0')
|
912
1241
|
end
|
913
1242
|
|
914
1243
|
it 'should update cell indices after deleting the cell' do
|
915
|
-
|
916
|
-
|
1244
|
+
subject.delete_cell(4, 0, :left)
|
1245
|
+
subject[0].cells.each_with_index { |cell, i|
|
917
1246
|
if SKIP_ROW_COL == i then
|
918
1247
|
expect(cell).to be_nil
|
919
1248
|
else
|
@@ -923,492 +1252,506 @@ describe RubyXL::Worksheet do
|
|
923
1252
|
end
|
924
1253
|
|
925
1254
|
it 'should shift cells below the deleted cell up if :up is specified' do
|
926
|
-
|
927
|
-
expect(
|
1255
|
+
subject.delete_cell(0, 0, :up)
|
1256
|
+
expect(subject[0][0].value).to eq('0:1')
|
928
1257
|
end
|
929
1258
|
|
930
1259
|
it 'should cause en error if an argument other than :left, :up, or nil is specified for shift' do
|
931
1260
|
expect {
|
932
|
-
|
1261
|
+
subject.delete_cell(0, 0, :down)
|
933
1262
|
}.to raise_error(RuntimeError)
|
934
1263
|
end
|
935
1264
|
end
|
936
1265
|
|
937
1266
|
describe '.get_row_fill' do
|
938
1267
|
it 'should return white (ffffff) if no fill color specified for row' do
|
939
|
-
expect(
|
1268
|
+
expect(subject.get_row_fill(0)).to eq('ffffff')
|
940
1269
|
end
|
941
1270
|
|
942
1271
|
it 'should correctly reflect fill color if specified for row' do
|
943
|
-
|
944
|
-
expect(
|
1272
|
+
subject.change_row_fill(0, '000000')
|
1273
|
+
expect(subject.get_row_fill(0)).to eq('000000')
|
945
1274
|
end
|
946
1275
|
|
947
1276
|
it 'should return nil if a row which does not exist is passed in' do
|
948
|
-
expect(
|
1277
|
+
expect(subject.get_row_fill(11)).to be_nil
|
949
1278
|
end
|
950
1279
|
end
|
951
1280
|
|
952
1281
|
describe '.get_row_font_name' do
|
953
1282
|
it 'should correctly reflect font name for row' do
|
954
|
-
|
955
|
-
expect(
|
1283
|
+
subject.change_row_font_name(0, 'Courier')
|
1284
|
+
expect(subject.get_row_font_name(0)).to eq('Courier')
|
956
1285
|
end
|
957
1286
|
|
958
1287
|
it 'should return nil if a (nonnegative) row which does not exist is passed in' do
|
959
|
-
expect(
|
1288
|
+
expect(subject.get_row_font_name(11)).to be_nil
|
960
1289
|
end
|
961
1290
|
end
|
962
1291
|
|
963
1292
|
describe '.get_row_font_size' do
|
964
1293
|
it 'should correctly reflect font size for row' do
|
965
|
-
|
966
|
-
expect(
|
1294
|
+
subject.change_row_font_size(0, 30)
|
1295
|
+
expect(subject.get_row_font_size(0)).to eq(30)
|
967
1296
|
end
|
968
1297
|
|
969
1298
|
it 'should return nil if a (nonnegative) row which does not exist is passed in' do
|
970
|
-
expect(
|
1299
|
+
expect(subject.get_row_font_size(11)).to be_nil
|
971
1300
|
end
|
972
1301
|
end
|
973
1302
|
|
974
1303
|
describe '.get_row_font_color' do
|
975
1304
|
it 'should correctly reflect font color for row' do
|
976
|
-
|
977
|
-
expect(
|
1305
|
+
subject.change_row_font_color(0, '0f0f0f')
|
1306
|
+
expect(subject.get_row_font_color(0)).to eq('0f0f0f')
|
978
1307
|
end
|
979
1308
|
|
980
1309
|
it 'should return nil if a (nonnegative) row which does not exist is passed in' do
|
981
|
-
expect(
|
1310
|
+
expect(subject.get_row_font_color(11)).to be_nil
|
982
1311
|
end
|
983
1312
|
end
|
984
1313
|
|
985
1314
|
describe '.is_row_italicized' do
|
986
1315
|
it 'should correctly return whether row is italicized' do
|
987
|
-
|
988
|
-
expect(
|
1316
|
+
subject.change_row_italics(0, true)
|
1317
|
+
expect(subject.is_row_italicized(0)).to eq(true)
|
989
1318
|
end
|
990
1319
|
|
991
1320
|
it 'should return nil if a (nonnegative) row which does not exist is passed in' do
|
992
|
-
expect(
|
1321
|
+
expect(subject.is_row_italicized(11)).to be_nil
|
993
1322
|
end
|
994
1323
|
end
|
995
1324
|
|
996
1325
|
describe '.is_row_bolded' do
|
997
1326
|
it 'should correctly return whether row is bolded' do
|
998
|
-
|
999
|
-
expect(
|
1327
|
+
subject.change_row_bold(0, true)
|
1328
|
+
expect(subject.is_row_bolded(0)).to eq(true)
|
1000
1329
|
end
|
1001
1330
|
|
1002
1331
|
it 'should return nil if a (nonnegative) row which does not exist is passed in' do
|
1003
|
-
expect(
|
1332
|
+
expect(subject.is_row_bolded(11)).to be_nil
|
1004
1333
|
end
|
1005
1334
|
end
|
1006
1335
|
|
1007
1336
|
describe '.is_row_underlined' do
|
1008
1337
|
it 'should correctly return whether row is underlined' do
|
1009
|
-
|
1010
|
-
expect(
|
1338
|
+
subject.change_row_underline(0, true)
|
1339
|
+
expect(subject.is_row_underlined(0)).to eq(true)
|
1011
1340
|
end
|
1012
1341
|
|
1013
1342
|
it 'should return nil if a (nonnegative) row which does not exist is passed in' do
|
1014
|
-
expect(
|
1343
|
+
expect(subject.is_row_underlined(11)).to be_nil
|
1015
1344
|
end
|
1016
1345
|
end
|
1017
1346
|
|
1018
1347
|
describe '.is_row_struckthrough' do
|
1019
1348
|
it 'should correctly return whether row is struckthrough' do
|
1020
|
-
|
1021
|
-
expect(
|
1349
|
+
subject.change_row_strikethrough(0, true)
|
1350
|
+
expect(subject.is_row_struckthrough(0)).to eq(true)
|
1022
1351
|
end
|
1023
1352
|
|
1024
1353
|
it 'should return nil if a (nonnegative) row which does not exist is passed in' do
|
1025
|
-
expect(
|
1354
|
+
expect(subject.is_row_struckthrough(11)).to be_nil
|
1026
1355
|
end
|
1027
1356
|
end
|
1028
1357
|
|
1029
1358
|
describe '.get_row_height' do
|
1030
1359
|
it 'should return 13 if no height specified for row' do
|
1031
|
-
expect(
|
1360
|
+
expect(subject.get_row_height(0)).to eq(13)
|
1032
1361
|
end
|
1033
1362
|
|
1034
1363
|
it 'should correctly reflect height if specified for row' do
|
1035
|
-
|
1036
|
-
expect(
|
1364
|
+
subject.change_row_height(0, 30)
|
1365
|
+
expect(subject.get_row_height(0)).to eq(30)
|
1037
1366
|
end
|
1038
1367
|
|
1039
1368
|
it 'should return default row height if a row which does not exist is passed in' do
|
1040
|
-
expect(
|
1369
|
+
expect(subject.get_row_height(11)).to eq(13)
|
1041
1370
|
end
|
1042
1371
|
|
1043
1372
|
it 'should cause error if a negative argument is passed in' do
|
1044
1373
|
expect {
|
1045
|
-
|
1374
|
+
subject.get_row_height(-1)
|
1046
1375
|
}.to raise_error(RuntimeError)
|
1047
1376
|
end
|
1048
1377
|
end
|
1049
1378
|
|
1050
1379
|
describe '.get_row_alignment' do
|
1051
1380
|
it 'should return nil if no horizontal alignment specified for row' do
|
1052
|
-
expect(
|
1381
|
+
expect(subject.get_row_alignment(0, true)).to be_nil
|
1053
1382
|
end
|
1054
1383
|
|
1055
1384
|
it 'should return nil if a row which does not exist is passed in' do
|
1056
|
-
expect(
|
1385
|
+
expect(subject.get_row_alignment(11, true)).to be_nil
|
1057
1386
|
end
|
1058
1387
|
|
1059
1388
|
it 'should return correct horizontal alignment if it is set for that row' do
|
1060
|
-
|
1061
|
-
expect(
|
1389
|
+
subject.change_row_horizontal_alignment(0, 'center')
|
1390
|
+
expect(subject.get_row_alignment(0, true)).to eq('center')
|
1062
1391
|
end
|
1063
1392
|
|
1064
1393
|
it 'should return nil if no alignment specified for row' do
|
1065
|
-
expect(
|
1394
|
+
expect(subject.get_row_alignment(0, false)).to be_nil
|
1066
1395
|
end
|
1067
1396
|
|
1068
1397
|
it 'should return nil if a row which does not exist is passed in' do
|
1069
|
-
expect(
|
1398
|
+
expect(subject.get_row_alignment(11, false)).to be_nil
|
1070
1399
|
end
|
1071
1400
|
|
1072
1401
|
it 'should return correct vertical alignment if it is set for that row' do
|
1073
|
-
|
1074
|
-
expect(
|
1402
|
+
subject.change_row_vertical_alignment(0, 'center')
|
1403
|
+
expect(subject.get_row_alignment(0, false)).to eq('center')
|
1075
1404
|
end
|
1076
1405
|
end
|
1077
1406
|
|
1078
1407
|
describe '.get_row_border' do
|
1079
1408
|
it 'should return nil if no border is specified for that row in that direction' do
|
1080
|
-
expect(
|
1409
|
+
expect(subject.get_row_border(0, :top)).to be_nil
|
1081
1410
|
end
|
1082
1411
|
|
1083
1412
|
it 'should return type of border that this row has on top' do
|
1084
|
-
|
1085
|
-
expect(
|
1413
|
+
subject.change_row_border(0, :top, 'thin')
|
1414
|
+
expect(subject.get_row_border(0, :top)).to eq('thin')
|
1086
1415
|
end
|
1087
1416
|
|
1088
1417
|
it 'should return nil if a row which does not exist is passed in' do
|
1089
|
-
expect(
|
1418
|
+
expect(subject.get_row_border(11, :top)).to be_nil
|
1090
1419
|
end
|
1091
1420
|
end
|
1092
1421
|
|
1093
1422
|
describe '.get_column_font_name' do
|
1094
1423
|
it 'should correctly reflect font name for column' do
|
1095
|
-
|
1096
|
-
expect(
|
1424
|
+
subject.change_column_font_name(0, 'Courier')
|
1425
|
+
expect(subject.get_column_font_name(0)).to eq('Courier')
|
1097
1426
|
end
|
1098
1427
|
|
1099
1428
|
it 'should cause error if a negative argument is passed in' do
|
1100
1429
|
expect {
|
1101
|
-
|
1430
|
+
subject.get_column_font_name(-1)
|
1102
1431
|
}.to raise_error(RuntimeError)
|
1103
1432
|
end
|
1104
1433
|
|
1105
1434
|
it 'should return default font if a (nonnegative) column which does not exist is passed in' do
|
1106
|
-
expect(
|
1435
|
+
expect(subject.get_column_font_name(11)).to eq('Verdana')
|
1107
1436
|
end
|
1108
1437
|
end
|
1109
1438
|
|
1110
1439
|
describe '.get_column_font_size' do
|
1111
1440
|
it 'should correctly reflect font size for column' do
|
1112
|
-
|
1113
|
-
|
1441
|
+
subject.change_column_font_size(0, 30)
|
1442
|
+
expect(subject.get_column_font_size(0)).to eq(30)
|
1114
1443
|
end
|
1115
1444
|
|
1116
1445
|
it 'should cause error if a negative argument is passed in' do
|
1117
1446
|
expect {
|
1118
|
-
|
1447
|
+
subject.get_column_font_size(-1)
|
1119
1448
|
}.to raise_error(RuntimeError)
|
1120
1449
|
end
|
1121
1450
|
|
1122
1451
|
it 'should return default font size if a column which does not exist is passed in' do
|
1123
|
-
expect(
|
1452
|
+
expect(subject.get_column_font_size(11)).to eq(10)
|
1124
1453
|
end
|
1125
1454
|
end
|
1126
1455
|
|
1127
1456
|
describe '.get_column_font_color' do
|
1128
1457
|
it 'should correctly reflect font color for column' do
|
1129
|
-
|
1130
|
-
|
1458
|
+
subject.change_column_font_color(0, '0f0f0f')
|
1459
|
+
expect(subject.get_column_font_color(0)).to eq('0f0f0f')
|
1131
1460
|
end
|
1132
1461
|
|
1133
1462
|
it 'should cause error if a negative argument is passed in' do
|
1134
1463
|
expect {
|
1135
|
-
|
1464
|
+
subject.get_column_font_color(-1)
|
1136
1465
|
}.to raise_error(RuntimeError)
|
1137
1466
|
end
|
1138
1467
|
|
1139
1468
|
it 'should return default color (000000) if a (nonnegative) column which does not exist is passed in' do
|
1140
|
-
expect(
|
1469
|
+
expect(subject.get_column_font_color(11)).to eq('000000')
|
1141
1470
|
end
|
1142
1471
|
|
1143
1472
|
it 'should return default color (000000) if no rgb font color is specified' do
|
1144
|
-
expect(
|
1473
|
+
expect(subject.get_column_font_color(0)).to eq('000000')
|
1145
1474
|
end
|
1146
1475
|
end
|
1147
1476
|
|
1148
1477
|
describe '.is_column_italicized' do
|
1149
1478
|
it 'should correctly return whether column is italicized' do
|
1150
|
-
|
1151
|
-
|
1479
|
+
subject.change_column_italics(0, true)
|
1480
|
+
expect(subject.is_column_italicized(0)).to eq(true)
|
1152
1481
|
end
|
1153
1482
|
|
1154
1483
|
it 'should cause error if a negative argument is passed in' do
|
1155
1484
|
expect {
|
1156
|
-
|
1485
|
+
subject.is_column_italicized(-1)
|
1157
1486
|
}.to raise_error(RuntimeError)
|
1158
1487
|
end
|
1159
1488
|
|
1160
1489
|
it 'should return nil if a (nonnegative) column which does not exist is passed in' do
|
1161
|
-
expect(
|
1490
|
+
expect(subject.is_column_italicized(11)).to be_nil
|
1162
1491
|
end
|
1163
1492
|
end
|
1164
1493
|
|
1165
1494
|
describe '.is_column_bolded' do
|
1166
1495
|
it 'should correctly return whether column is bolded' do
|
1167
|
-
|
1168
|
-
|
1496
|
+
subject.change_column_bold(0, true)
|
1497
|
+
expect(subject.is_column_bolded(0)).to eq(true)
|
1169
1498
|
end
|
1170
1499
|
|
1171
1500
|
it 'should cause error if a negative argument is passed in' do
|
1172
1501
|
expect {
|
1173
|
-
|
1502
|
+
subject.is_column_bolded(-1)
|
1174
1503
|
}.to raise_error(RuntimeError)
|
1175
1504
|
end
|
1176
1505
|
|
1177
1506
|
it 'should return nil if a (nonnegative) column which does not exist is passed in' do
|
1178
|
-
expect(
|
1507
|
+
expect(subject.is_column_bolded(11)).to be_nil
|
1179
1508
|
end
|
1180
1509
|
end
|
1181
1510
|
|
1182
1511
|
describe '.is_column_underlined' do
|
1183
1512
|
it 'should correctly return whether column is underlined' do
|
1184
|
-
|
1185
|
-
|
1513
|
+
subject.change_column_underline(0, true)
|
1514
|
+
expect(subject.is_column_underlined(0)).to eq(true)
|
1186
1515
|
end
|
1187
1516
|
|
1188
1517
|
it 'should cause error if a negative argument is passed in' do
|
1189
1518
|
expect {
|
1190
|
-
|
1519
|
+
subject.is_column_underlined(-1)
|
1191
1520
|
}.to raise_error(RuntimeError)
|
1192
1521
|
end
|
1193
1522
|
|
1194
1523
|
it 'should return nil if a (nonnegative) column which does not exist is passed in' do
|
1195
|
-
expect(
|
1524
|
+
expect(subject.is_column_underlined(11)).to be_nil
|
1196
1525
|
end
|
1197
1526
|
end
|
1198
1527
|
|
1199
1528
|
describe '.is_column_struckthrough' do
|
1200
1529
|
it 'should correctly return whether column is struckthrough' do
|
1201
|
-
|
1202
|
-
|
1530
|
+
subject.change_column_strikethrough(0, true)
|
1531
|
+
expect(subject.is_column_struckthrough(0)).to eq(true)
|
1203
1532
|
end
|
1204
1533
|
|
1205
1534
|
it 'should cause error if a negative argument is passed in' do
|
1206
1535
|
expect {
|
1207
|
-
|
1536
|
+
subject.is_column_struckthrough(-1)
|
1208
1537
|
}.to raise_error(RuntimeError)
|
1209
1538
|
end
|
1210
1539
|
|
1211
1540
|
it 'should return nil if a (nonnegative) column which does not exist is passed in' do
|
1212
|
-
expect(
|
1541
|
+
expect(subject.is_column_struckthrough(11)).to be_nil
|
1213
1542
|
end
|
1214
1543
|
end
|
1215
1544
|
|
1216
1545
|
describe '.get_column_width_raw' do
|
1217
1546
|
it 'should return nil if no width specified for column' do
|
1218
|
-
expect(
|
1547
|
+
expect(subject.get_column_width_raw(0)).to be_nil
|
1219
1548
|
end
|
1220
1549
|
|
1221
1550
|
it 'should correctly reflect width if specified for column' do
|
1222
|
-
|
1223
|
-
expect(
|
1551
|
+
subject.change_column_width_raw(0, 30.123)
|
1552
|
+
expect(subject.get_column_width_raw(0)).to eq(30.123)
|
1224
1553
|
end
|
1225
1554
|
|
1226
1555
|
it 'should return nil for a column that does not exist' do
|
1227
|
-
expect(
|
1556
|
+
expect(subject.get_column_width_raw(11)).to be_nil
|
1228
1557
|
end
|
1229
1558
|
|
1230
1559
|
it 'should cause error if a negative argument is passed in' do
|
1231
1560
|
expect {
|
1232
|
-
|
1561
|
+
subject.get_column_width_raw(-1)
|
1233
1562
|
}.to raise_error(RuntimeError)
|
1234
1563
|
end
|
1235
1564
|
end
|
1236
1565
|
|
1237
1566
|
describe '.get_column_width' do
|
1238
1567
|
it 'should return default width if no width specified for column' do
|
1239
|
-
expect(
|
1568
|
+
expect(subject.get_column_width(0)).to eq(RubyXL::ColumnRange::DEFAULT_WIDTH)
|
1240
1569
|
end
|
1241
1570
|
|
1242
1571
|
it 'should correctly reflect width if specified for column' do
|
1243
|
-
|
1244
|
-
expect(
|
1572
|
+
subject.change_column_width(0, 15)
|
1573
|
+
expect(subject.get_column_width(0)).to eq(15)
|
1245
1574
|
end
|
1246
1575
|
|
1247
1576
|
it 'should return default width for a column that does not exist' do
|
1248
|
-
expect(
|
1577
|
+
expect(subject.get_column_width(11)).to eq(RubyXL::ColumnRange::DEFAULT_WIDTH)
|
1249
1578
|
end
|
1250
1579
|
|
1251
1580
|
it 'should cause error if a negative argument is passed in' do
|
1252
1581
|
expect {
|
1253
|
-
|
1582
|
+
subject.get_column_width(-1)
|
1254
1583
|
}.to raise_error(RuntimeError)
|
1255
1584
|
end
|
1256
1585
|
end
|
1257
1586
|
|
1258
1587
|
describe '.get_column_fill' do
|
1259
1588
|
it 'should return white (ffffff) if no fill color specified for column' do
|
1260
|
-
expect(
|
1589
|
+
expect(subject.get_column_fill(0)).to eq('ffffff')
|
1261
1590
|
end
|
1262
1591
|
|
1263
1592
|
it 'should correctly reflect fill color if specified for column' do
|
1264
|
-
|
1265
|
-
|
1593
|
+
subject.change_column_fill(0, '000000')
|
1594
|
+
expect(subject.get_column_fill(0)).to eq('000000')
|
1266
1595
|
end
|
1267
1596
|
|
1268
1597
|
it 'should return nil if a column which does not exist is passed in' do
|
1269
|
-
expect(
|
1598
|
+
expect(subject.get_column_fill(11)).to eq('ffffff')
|
1270
1599
|
end
|
1271
1600
|
|
1272
1601
|
it 'should cause error if a negative argument is passed in' do
|
1273
1602
|
expect {
|
1274
|
-
|
1603
|
+
subject.get_column_fill(-1)
|
1275
1604
|
}.to raise_error(RuntimeError)
|
1276
1605
|
end
|
1277
1606
|
end
|
1278
1607
|
|
1279
1608
|
describe '.get_column_horizontal_alignment' do
|
1280
1609
|
it 'should return nil if no alignment specified for column' do
|
1281
|
-
expect(
|
1610
|
+
expect(subject.get_column_alignment(0, :horizontal)).to be_nil
|
1282
1611
|
end
|
1283
1612
|
|
1284
1613
|
it 'should return nil if a column which does not exist is passed in' do
|
1285
|
-
expect(
|
1614
|
+
expect(subject.get_column_alignment(11, :horizontal)).to be_nil
|
1286
1615
|
end
|
1287
1616
|
|
1288
1617
|
it 'should cause error if a negative argument is passed in' do
|
1289
1618
|
expect {
|
1290
|
-
|
1619
|
+
subject.get_column_alignment(-1, :horizontal)
|
1291
1620
|
}.to raise_error(RuntimeError)
|
1292
1621
|
end
|
1293
1622
|
|
1294
1623
|
it 'should return correct horizontal alignment if it is set for that column' do
|
1295
|
-
|
1296
|
-
expect(
|
1624
|
+
subject.change_column_horizontal_alignment(0, 'center')
|
1625
|
+
expect(subject.get_column_alignment(0, :horizontal)).to eq('center')
|
1297
1626
|
end
|
1298
1627
|
end
|
1299
1628
|
|
1300
1629
|
describe '.get_column_vertical_alignment' do
|
1301
1630
|
it 'should return nil if no alignment specified for column' do
|
1302
|
-
expect(
|
1631
|
+
expect(subject.get_column_alignment(0, :vertical)).to be_nil
|
1303
1632
|
end
|
1304
1633
|
|
1305
1634
|
it 'should return nil if a column which does not exist is passed in' do
|
1306
|
-
expect(
|
1635
|
+
expect(subject.get_column_alignment(11, :vertical)).to be_nil
|
1307
1636
|
end
|
1308
1637
|
|
1309
1638
|
it 'should cause error if a negative argument is passed in' do
|
1310
1639
|
expect {
|
1311
|
-
|
1640
|
+
subject.get_column_alignment(-1, :vertical)
|
1312
1641
|
}.to raise_error(RuntimeError)
|
1313
1642
|
end
|
1314
1643
|
|
1315
1644
|
it 'should return correct vertical alignment if it is set for that column' do
|
1316
|
-
|
1317
|
-
expect(
|
1645
|
+
subject.change_column_vertical_alignment(0, 'center')
|
1646
|
+
expect(subject.get_column_alignment(0, :vertical)).to eq('center')
|
1318
1647
|
end
|
1319
1648
|
end
|
1320
1649
|
|
1321
1650
|
describe '.get_column_border' do
|
1322
1651
|
it 'should return nil if no border is specified for that column in that direction' do
|
1323
|
-
expect(
|
1652
|
+
expect(subject.get_column_border(0, :diagonal)).to be_nil
|
1324
1653
|
end
|
1325
1654
|
|
1326
1655
|
it 'should return type of border that this column has on diagonal' do
|
1327
|
-
|
1328
|
-
expect(
|
1656
|
+
subject.change_column_border(0, :diagonal, 'thin')
|
1657
|
+
expect(subject.get_column_border(0, :diagonal)).to eq('thin')
|
1329
1658
|
end
|
1330
1659
|
|
1331
1660
|
it 'should cause error if a negative argument is passed in' do
|
1332
1661
|
expect {
|
1333
|
-
|
1662
|
+
subject.get_column_border(-1, :diagonal)
|
1334
1663
|
}.to raise_error(RuntimeError)
|
1335
1664
|
end
|
1336
1665
|
|
1337
1666
|
it 'should return nil if a column which does not exist is passed in' do
|
1338
|
-
expect(
|
1667
|
+
expect(subject.get_column_border(11, :diagonal)).to be_nil
|
1339
1668
|
end
|
1340
1669
|
end
|
1341
1670
|
|
1342
1671
|
describe '@column_range' do
|
1343
1672
|
it 'should properly handle range addition and modification' do
|
1344
1673
|
# Ranges should be empty for brand new worskeet
|
1345
|
-
expect(
|
1674
|
+
expect(subject.cols.size).to eq(0)
|
1346
1675
|
|
1347
1676
|
# Range should be created if the column has not been touched before
|
1348
|
-
|
1349
|
-
expect(
|
1350
|
-
expect(
|
1677
|
+
subject.change_column_width(0, 30)
|
1678
|
+
expect(subject.get_column_width(0)).to eq(30)
|
1679
|
+
expect(subject.cols.size).to eq(1)
|
1351
1680
|
|
1352
1681
|
# Existing range should be reused
|
1353
|
-
|
1354
|
-
expect(
|
1355
|
-
expect(
|
1682
|
+
subject.change_column_width(0, 20)
|
1683
|
+
expect(subject.get_column_width(0)).to eq(20)
|
1684
|
+
expect(subject.cols.size).to eq(1)
|
1356
1685
|
|
1357
1686
|
# Creation of the new range should not affect previously changed columns
|
1358
|
-
|
1359
|
-
expect(
|
1360
|
-
expect(
|
1361
|
-
expect(
|
1687
|
+
subject.change_column_width(1, 30)
|
1688
|
+
expect(subject.get_column_width(1)).to eq(30)
|
1689
|
+
expect(subject.get_column_width(0)).to eq(20)
|
1690
|
+
expect(subject.cols.size).to eq(2)
|
1362
1691
|
|
1363
|
-
|
1364
|
-
|
1692
|
+
subject.cols.clear
|
1693
|
+
subject.cols << RubyXL::ColumnRange.new(:min => 1, :max => 9, :width => 33) # Note that this is raw width
|
1365
1694
|
|
1366
|
-
r =
|
1695
|
+
r = subject.cols.locate_range(3)
|
1367
1696
|
expect(r.min).to eq(1)
|
1368
1697
|
expect(r.max).to eq(9)
|
1369
1698
|
|
1370
1699
|
# When a column is modified at the beginning of the range, it should shrink to the right
|
1371
|
-
|
1372
|
-
expect(
|
1373
|
-
expect(
|
1374
|
-
expect(
|
1700
|
+
subject.change_column_width(0, 20)
|
1701
|
+
expect(subject.cols.size).to eq(2)
|
1702
|
+
expect(subject.get_column_width(0)).to eq(20)
|
1703
|
+
expect(subject.get_column_width(1)).to eq(32)
|
1375
1704
|
|
1376
|
-
r =
|
1705
|
+
r = subject.cols.locate_range(3)
|
1377
1706
|
expect(r.min).to eq(2)
|
1378
1707
|
expect(r.max).to eq(9)
|
1379
1708
|
|
1380
1709
|
# When a column is modified at the beginning of the range, it should shrink to the left
|
1381
|
-
|
1382
|
-
expect(
|
1383
|
-
expect(
|
1710
|
+
subject.change_column_width(8, 30)
|
1711
|
+
expect(subject.cols.size).to eq(3)
|
1712
|
+
expect(subject.get_column_width(8)).to eq(30)
|
1384
1713
|
|
1385
|
-
r =
|
1714
|
+
r = subject.cols.locate_range(3)
|
1386
1715
|
expect(r.min).to eq(2)
|
1387
1716
|
expect(r.max).to eq(8)
|
1388
1717
|
|
1389
1718
|
# When a column is modified in the middle of the range, it should split into two
|
1390
|
-
|
1391
|
-
expect(
|
1392
|
-
expect(
|
1719
|
+
subject.change_column_width(4, 15)
|
1720
|
+
expect(subject.cols.size).to eq(5)
|
1721
|
+
expect(subject.get_column_width(3)).to eq(32)
|
1393
1722
|
|
1394
|
-
r =
|
1723
|
+
r = subject.cols.locate_range(2)
|
1395
1724
|
expect(r.min).to eq(2)
|
1396
1725
|
expect(r.max).to eq(4)
|
1397
1726
|
|
1398
|
-
expect(
|
1727
|
+
expect(subject.get_column_width(4)).to eq(15)
|
1399
1728
|
|
1400
|
-
r =
|
1729
|
+
r = subject.cols.locate_range(4)
|
1401
1730
|
expect(r.min).to eq(5)
|
1402
1731
|
expect(r.max).to eq(5)
|
1403
1732
|
|
1404
|
-
expect(
|
1733
|
+
expect(subject.get_column_width(5)).to eq(32)
|
1405
1734
|
|
1406
|
-
r =
|
1735
|
+
r = subject.cols.locate_range(6)
|
1407
1736
|
expect(r.min).to eq(6)
|
1408
1737
|
expect(r.max).to eq(8)
|
1738
|
+
end
|
1739
|
+
end
|
1409
1740
|
|
1741
|
+
describe 'forbidden sheet names' do
|
1742
|
+
it 'should stream a workbook successfully' do
|
1743
|
+
subject.sheet_name = 'Test Name'
|
1744
|
+
subject.workbook.stream
|
1410
1745
|
end
|
1411
1746
|
|
1412
|
-
|
1747
|
+
it 'should throw an error when forbidden characters are used in the sheet name' do
|
1748
|
+
subject.sheet_name = 'Some [Special] Name'
|
1749
|
+
expect { subject.workbook.stream }.to raise_error(RuntimeError)
|
1750
|
+
end
|
1413
1751
|
|
1752
|
+
it 'should throw an error when forbidden name is used' do
|
1753
|
+
subject.sheet_name = 'History'
|
1754
|
+
expect { subject.workbook.stream }.to raise_error(RuntimeError)
|
1755
|
+
end
|
1756
|
+
end
|
1414
1757
|
end
|