├── .circleci └── config.yml ├── .codeclimate.yml ├── .gitignore ├── .rubocop.yml ├── CHANGELOG.md ├── Gemfile ├── LICENSE.txt ├── README.rdoc ├── Rakefile ├── VERSION ├── lib ├── rubyXL.rb └── rubyXL │ ├── cell.rb │ ├── convenience_methods.rb │ ├── convenience_methods │ ├── cell.rb │ ├── color.rb │ ├── font.rb │ ├── workbook.rb │ └── worksheet.rb │ ├── objects │ ├── border.rb │ ├── calculation_chain.rb │ ├── cell_style.rb │ ├── chartsheet.rb │ ├── color.rb │ ├── column_range.rb │ ├── comments.rb │ ├── connection.rb │ ├── container_nodes.rb │ ├── content_types.rb │ ├── data_validation.rb │ ├── document_properties.rb │ ├── extensions.rb │ ├── external_links.rb │ ├── fill.rb │ ├── filters.rb │ ├── font.rb │ ├── formula.rb │ ├── ooxml_object.rb │ ├── query_table.rb │ ├── reference.rb │ ├── relationships.rb │ ├── root.rb │ ├── shared_strings.rb │ ├── sheet_common.rb │ ├── sheet_data.rb │ ├── simple_types.rb │ ├── storage.rb │ ├── stylesheet.rb │ ├── text.rb │ ├── theme.rb │ ├── workbook.rb │ └── worksheet.rb │ ├── parser.rb │ └── worksheet.rb ├── rdoc ├── README_rdoc.html ├── RubyXL.html ├── RubyXL │ ├── AExtension.html │ ├── AExtensionStorageArea.html │ ├── ActiveX.html │ ├── ActiveXBinary.html │ ├── AdjustHandleList.html │ ├── Alignment.html │ ├── AlternateContent.html │ ├── AlternateUrls.html │ ├── Authors.html │ ├── AutoFilter.html │ ├── AutoFilterColumn.html │ ├── BinaryImageFile.html │ ├── BodyProperties.html │ ├── BooleanNode.html │ ├── BooleanValue.html │ ├── Border.html │ ├── BorderEdge.html │ ├── Borders.html │ ├── Break.html │ ├── BreakList.html │ ├── CT_AdjPoint2D.html │ ├── CT_AlphaBiLevelEffect.html │ ├── CT_AlphaModulateEffect.html │ ├── CT_AlphaModulateFixedEffect.html │ ├── CT_AlphaOutsetEffect.html │ ├── CT_AlphaReplaceEffect.html │ ├── CT_Backdrop.html │ ├── CT_Bevel.html │ ├── CT_BiLevelEffect.html │ ├── CT_BlendEffect.html │ ├── CT_Blip.html │ ├── CT_BlipFillProperties.html │ ├── CT_BlurEffect.html │ ├── CT_Camera.html │ ├── CT_Color.html │ ├── CT_ColorChangeEffect.html │ ├── CT_ColorMapping.html │ ├── CT_ColorScheme.html │ ├── CT_ColorSchemeAndMapping.html │ ├── CT_ConnectionSite.html │ ├── CT_ConnectionSiteList.html │ ├── CT_DashStop.html │ ├── CT_DashStopList.html │ ├── CT_DefaultShapeDefinition.html │ ├── CT_DuotoneEffect.html │ ├── CT_EffectContainer.html │ ├── CT_EffectList.html │ ├── CT_EffectReference.html │ ├── CT_EffectStyleItem.html │ ├── CT_EffectStyleList.html │ ├── CT_EmbeddedWAVAudioFile.html │ ├── CT_FillEffect.html │ ├── CT_FillOverlayEffect.html │ ├── CT_FillStyleList.html │ ├── CT_FlatText.html │ ├── CT_FontCollection.html │ ├── CT_FontReference.html │ ├── CT_GeomGuideList.html │ ├── CT_GlowEffect.html │ ├── CT_GradientFillProperties.html │ ├── CT_GradientStop.html │ ├── CT_GradientStopList.html │ ├── CT_HSLEffect.html │ ├── CT_HslColor.html │ ├── CT_Hyperlink.html │ ├── CT_InnerShadowEffect.html │ ├── CT_LightRig.html │ ├── CT_LineEndProperties.html │ ├── CT_LineJoinMiterProperties.html │ ├── CT_LineProperties.html │ ├── CT_LineStyleList.html │ ├── CT_LinearShadeProperties.html │ ├── CT_LuminanceEffect.html │ ├── CT_ObjectStyleDefaults.html │ ├── CT_OuterShadowEffect.html │ ├── CT_Path2D.html │ ├── CT_Path2DArcTo.html │ ├── CT_Path2DCubicBezierTo.html │ ├── CT_Path2DList.html │ ├── CT_Path2DQuadBezierTo.html │ ├── CT_Path2DTo.html │ ├── CT_PathShadeProperties.html │ ├── CT_PatternFillProperties.html │ ├── CT_Point3D.html │ ├── CT_PolarAdjustHandle.html │ ├── CT_PresetColor.html │ ├── CT_PresetLineDashProperties.html │ ├── CT_PresetShadowEffect.html │ ├── CT_PresetTextShape.html │ ├── CT_ReflectionEffect.html │ ├── CT_RelativeOffsetEffect.html │ ├── CT_RelativeRect.html │ ├── CT_SRgbColor.html │ ├── CT_ScRgbColor.html │ ├── CT_Scene3D.html │ ├── CT_SchemeColor.html │ ├── CT_Shape3D.html │ ├── CT_ShapeStyle.html │ ├── CT_SoftEdgesEffect.html │ ├── CT_SphereCoords.html │ ├── CT_StretchInfoProperties.html │ ├── CT_StyleMatrix.html │ ├── CT_StyleMatrixReference.html │ ├── CT_SupplementalFont.html │ ├── CT_SystemColor.html │ ├── CT_TextAutonumberBullet.html │ ├── CT_TextBlipBullet.html │ ├── CT_TextCharBullet.html │ ├── CT_TextCharacterProperties.html │ ├── CT_TextFont.html │ ├── CT_TextListStyle.html │ ├── CT_TextNormalAutofit.html │ ├── CT_TextParagraphProperties.html │ ├── CT_TextSpacing.html │ ├── CT_TextTabStop.html │ ├── CT_TextTabStopList.html │ ├── CT_TileInfoProperties.html │ ├── CT_TintEffect.html │ ├── CT_Transform2D.html │ ├── CT_TransformEffect.html │ ├── CT_Vector3D.html │ ├── CT_XYAdjustHandle.html │ ├── CalculationChain.html │ ├── CalculationChainCell.html │ ├── CalculationProperties.html │ ├── Cell.html │ ├── CellConvenienceMethods.html │ ├── CellExt.html │ ├── CellSmartTag.html │ ├── CellSmartTagProperty.html │ ├── CellSmartTags.html │ ├── CellStyle.html │ ├── CellStyleXFs.html │ ├── CellStyles.html │ ├── CellValue.html │ ├── CellWatch.html │ ├── CellWatches.html │ ├── CellXFs.html │ ├── ChartColorsFile.html │ ├── ChartFile.html │ ├── ChartStyleFile.html │ ├── ChartUserShapesFile.html │ ├── Chartsheet.html │ ├── ChartsheetPageSetup.html │ ├── ChartsheetProperties.html │ ├── ChartsheetProtection.html │ ├── ChartsheetView.html │ ├── ChartsheetViews.html │ ├── Color.html │ ├── ColorConvenienceClasses.html │ ├── ColorConvenienceClasses │ │ ├── HlsColor.html │ │ └── RgbColor.html │ ├── ColorConvenienceMethods.html │ ├── ColorFilter.html │ ├── ColorScale.html │ ├── ColorSet.html │ ├── Colors.html │ ├── ColumnRange.html │ ├── ColumnRanges.html │ ├── Comment.html │ ├── CommentList.html │ ├── CommentsFile.html │ ├── ConditionalFormatValue.html │ ├── ConditionalFormatting.html │ ├── ConditionalFormattingRule.html │ ├── Connection.html │ ├── ConnectionTable.html │ ├── ConnectionTables.html │ ├── ConnectionTextField.html │ ├── ConnectionTextFields.html │ ├── Connections.html │ ├── ContentTypeDefault.html │ ├── ContentTypeOverride.html │ ├── ContentTypes.html │ ├── ControlPropertiesFile.html │ ├── CorePropertiesFile.html │ ├── CustomColor.html │ ├── CustomColorList.html │ ├── CustomFilter.html │ ├── CustomFilters.html │ ├── CustomGeometry.html │ ├── CustomProperties.html │ ├── CustomPropertiesFile.html │ ├── CustomProperty.html │ ├── CustomPropertyFile.html │ ├── CustomSheetView.html │ ├── CustomSheetViews.html │ ├── CustomWorkbookView.html │ ├── CustomWorkbookViews.html │ ├── CustomXMLFile.html │ ├── DXF.html │ ├── DXFs.html │ ├── DataBar.html │ ├── DataConsolidate.html │ ├── DataConsolidationReference.html │ ├── DataConsolidationReferences.html │ ├── DataType.html │ ├── DataValidation.html │ ├── DataValidations.html │ ├── DateGroupItem.html │ ├── DefinedName.html │ ├── DefinedNameExt.html │ ├── DefinedNames.html │ ├── DefinedNamesExt.html │ ├── DocumentPropertiesFile.html │ ├── DrawingFile.html │ ├── DynamicFilter.html │ ├── EmbeddedControl.html │ ├── EmbeddedControls.html │ ├── Extension.html │ ├── ExtensionStorageArea.html │ ├── Extents.html │ ├── ExternalBook.html │ ├── ExternalLinksFile.html │ ├── ExternalReference.html │ ├── ExternalReferences.html │ ├── ExtraColorSchemeList.html │ ├── FieldItem.html │ ├── FileRecoveryProperties.html │ ├── FileSharing.html │ ├── FileVersion.html │ ├── Fill.html │ ├── Fills.html │ ├── FilterContainer.html │ ├── FloatNode.html │ ├── FloatValue.html │ ├── Font.html │ ├── FontConvenienceMethods.html │ ├── FontScheme.html │ ├── Fonts.html │ ├── Formula.html │ ├── FunctionGroup.html │ ├── FunctionGroups.html │ ├── GenericStorageObject.html │ ├── GradientFill.html │ ├── HeaderFooterSettings.html │ ├── Hyperlink.html │ ├── HyperlinkRelFile.html │ ├── Hyperlinks.html │ ├── IconFilter.html │ ├── IconSet.html │ ├── IgnoredError.html │ ├── IgnoredErrors.html │ ├── IndexedColors.html │ ├── InputCells.html │ ├── IntegerNode.html │ ├── IntegerValue.html │ ├── LegacyCell.html │ ├── LegacyWorksheet.html │ ├── MRUColors.html │ ├── MacrosFile.html │ ├── MergedCell.html │ ├── MergedCells.html │ ├── NumFmt.html │ ├── NumberFormat.html │ ├── NumberFormats.html │ ├── OLEObject.html │ ├── OLEObjectFile.html │ ├── OLEObjects.html │ ├── OLESize.html │ ├── OOXMLContainerObject.html │ ├── OOXMLIgnored.html │ ├── OOXMLObject.html │ ├── OOXMLObjectClassMethods.html │ ├── OOXMLObjectInstanceMethods.html │ ├── OOXMLRelationshipsFile.html │ ├── OOXMLTopLevelObject.html │ ├── OdbcOleDbProperties.html │ ├── Offset.html │ ├── OlapProperties.html │ ├── OleItem.html │ ├── OleItems.html │ ├── OleLink.html │ ├── OutlineProperties.html │ ├── PageMargins.html │ ├── PageSetup.html │ ├── PageSetupProperties.html │ ├── Pane.html │ ├── Parser.html │ ├── PatternFill.html │ ├── PersonMetadata.html │ ├── PhoneticProperties.html │ ├── PhoneticRun.html │ ├── PivotArea.html │ ├── PivotCache.html │ ├── PivotCacheDefinitionFile.html │ ├── PivotCacheRecordsFile.html │ ├── PivotCaches.html │ ├── PivotReference.html │ ├── PivotReferences.html │ ├── PivotTableFile.html │ ├── PivotTableSelection.html │ ├── PresetGeometry.html │ ├── PrintOptions.html │ ├── PrinterSettingsFile.html │ ├── ProtectedRange.html │ ├── ProtectedRanges.html │ ├── Protection.html │ ├── QueryParameter.html │ ├── QueryParameters.html │ ├── QueryTable.html │ ├── QueryTableDeletedField.html │ ├── QueryTableDeletedFields.html │ ├── QueryTableField.html │ ├── QueryTableFields.html │ ├── QueryTableRefresh.html │ ├── RID.html │ ├── RawOOXML.html │ ├── Reference.html │ ├── Relationship.html │ ├── RelationshipSupport.html │ ├── RelationshipSupport │ │ └── ClassMehods.html │ ├── RevisionPointer.html │ ├── RichText.html │ ├── RichTextRun.html │ ├── Row.html │ ├── RowExt.html │ ├── RunProperties.html │ ├── Scenario.html │ ├── Scenarios.html │ ├── Selection.html │ ├── ShapeGuide.html │ ├── ShapeTextRectangle.html │ ├── SharedStringsTable.html │ ├── Sheet.html │ ├── SheetCalculationProperties.html │ ├── SheetData.html │ ├── SheetDataExt.html │ ├── SheetDataSet.html │ ├── SheetMetadata.html │ ├── SheetName.html │ ├── SheetNames.html │ ├── Sheets.html │ ├── SlicerCacheFile.html │ ├── SlicerFile.html │ ├── SmartTagProperties.html │ ├── SmartTagType.html │ ├── SmartTagTypes.html │ ├── SmartTags.html │ ├── SortCondition.html │ ├── SortState.html │ ├── Sqref.html │ ├── Stop.html │ ├── StringNode.html │ ├── StringNodeW3C.html │ ├── StringValue.html │ ├── Stylesheet.html │ ├── TableFile.html │ ├── TableParts.html │ ├── TableStyle.html │ ├── TableStyles.html │ ├── Text.html │ ├── TextImportSettings.html │ ├── Theme.html │ ├── ThemeElements.html │ ├── ThumbnailFile.html │ ├── Top10.html │ ├── VMLDrawingFile.html │ ├── Variant.html │ ├── Vector.html │ ├── VectorValue.html │ ├── VisualProperties.html │ ├── WebPublishObject.html │ ├── WebPublishObjects.html │ ├── WebPublishingItem.html │ ├── WebPublishingItems.html │ ├── WebPublishingProperties.html │ ├── WebQueryProperties.html │ ├── Workbook.html │ ├── WorkbookConvenienceMethods.html │ ├── WorkbookProperties.html │ ├── WorkbookProtection.html │ ├── WorkbookRoot.html │ ├── WorkbookView.html │ ├── WorkbookViews.html │ ├── Worksheet.html │ ├── WorksheetConvenienceMethods.html │ ├── WorksheetDimensions.html │ ├── WorksheetFormatProperties.html │ ├── WorksheetProperties.html │ ├── WorksheetProtection.html │ ├── WorksheetView.html │ ├── WorksheetViews.html │ └── XF.html ├── created.rid ├── css │ ├── fonts.css │ └── rdoc.css ├── fonts │ ├── Lato-Light.ttf │ ├── Lato-LightItalic.ttf │ ├── Lato-Regular.ttf │ ├── Lato-RegularItalic.ttf │ ├── SourceCodePro-Bold.ttf │ └── SourceCodePro-Regular.ttf ├── images │ ├── add.png │ ├── arrow_up.png │ ├── brick.png │ ├── brick_link.png │ ├── bug.png │ ├── bullet_black.png │ ├── bullet_toggle_minus.png │ ├── bullet_toggle_plus.png │ ├── date.png │ ├── delete.png │ ├── find.png │ ├── loadingAnimation.gif │ ├── macFFBgHack.png │ ├── package.png │ ├── page_green.png │ ├── page_white_text.png │ ├── page_white_width.png │ ├── plugin.png │ ├── ruby.png │ ├── tag_blue.png │ ├── tag_green.png │ ├── transparent.png │ ├── wrench.png │ ├── wrench_orange.png │ └── zoom.png ├── index.html ├── js │ ├── darkfish.js │ ├── navigation.js │ ├── navigation.js.gz │ ├── search.js │ ├── search_index.js │ ├── search_index.js.gz │ ├── searcher.js │ └── searcher.js.gz └── table_of_contents.html ├── rubyXL.gemspec ├── spec ├── lib │ ├── cell_spec.rb │ ├── color_spec.rb │ ├── parser_spec.rb │ ├── reference_spec.rb │ ├── rgb_color_spec.rb │ ├── stylesheet_spec.rb │ ├── text_spec.rb │ ├── workbook_spec.rb │ └── worksheet_spec.rb └── spec_helper.rb ├── test ├── input │ └── .gitkeep ├── output │ └── .gitkeep └── test_parse_write.rb └── tmp └── .gitignore /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # Ruby CircleCI 2.0 configuration file 2 | # 3 | # Check https://circleci.com/docs/2.0/language-ruby/ for more details 4 | # 5 | version: 2 6 | jobs: 7 | build: 8 | docker: 9 | # specify the version you desire here 10 | - image: cimg/ruby:3.1.4 11 | 12 | # Specify service dependencies here if necessary 13 | # CircleCI maintains a library of pre-built images 14 | # documented at https://circleci.com/docs/2.0/circleci-images/ 15 | # - image: circleci/postgres:9.4 16 | 17 | working_directory: ~/repo 18 | 19 | steps: 20 | - checkout 21 | 22 | # Download and cache dependencies 23 | - restore_cache: 24 | keys: 25 | - v1-dependencies-{{ checksum "Gemfile.lock" }} 26 | # fallback to using the latest cache if no exact match is found 27 | - v1-dependencies- 28 | 29 | - run: 30 | name: install dependencies 31 | command: | 32 | gem install bundler 33 | bundle install --jobs=4 --retry=3 --path vendor/bundle 34 | 35 | - save_cache: 36 | paths: 37 | - ./vendor/bundle 38 | key: v1-dependencies-{{ checksum "Gemfile.lock" }} 39 | 40 | # run tests! 41 | - run: 42 | name: run tests 43 | command: | 44 | mkdir /tmp/test-results 45 | TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \ 46 | circleci tests split --split-by=timings)" 47 | 48 | bundle exec rspec \ 49 | --format progress \ 50 | --format RspecJunitFormatter \ 51 | --out /tmp/test-results/rspec.xml \ 52 | --format progress \ 53 | $TEST_FILES 54 | 55 | # collect reports 56 | - store_test_results: 57 | path: /tmp/test-results 58 | - store_artifacts: 59 | path: /tmp/test-results 60 | destination: test-results 61 | -------------------------------------------------------------------------------- /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | exclude_patterns: 2 | - "rdoc/*" 3 | - "spec/*" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.DS_Store 2 | *.gem 3 | *.swp 4 | *.xls? 5 | *.tmp 6 | tmp 7 | .bundle 8 | bin 9 | vendor 10 | lib/tests/ 11 | coverage 12 | Gemfile.lock 13 | -------------------------------------------------------------------------------- /.rubocop.yml: -------------------------------------------------------------------------------- 1 | #inherit_from: .rubocop_todo.yml 2 | 3 | #require: 4 | # - rubocop-rspec 5 | 6 | AllCops: 7 | NewCops: enable 8 | SuggestExtensions: false 9 | TargetRubyVersion: 2.6 10 | DisplayCopNames: true 11 | DisplayStyleGuide: true 12 | Exclude: 13 | - test/**/* 14 | - tmp/* 15 | - vendor/**/* 16 | - Gemfile 17 | - rubyXL.gemspec 18 | 19 | # "Excessive" parentheses are your friend. You will understand it in time, Luke. 20 | Style/TernaryParentheses: 21 | Enabled: false 22 | 23 | # Implicity is evil. Unwilingness to type a couple extra characters is laziness. 24 | Style/RedundantConstantBase: 25 | Enabled: false 26 | 27 | # I don't see a good reason in this. Unless you are paid per line. 28 | Style/CommentedKeyword: 29 | Enabled: false 30 | 31 | # Yes, some things are "redundant" but they are there exactly to drive home some point... 32 | Style/RedundantSelf: 33 | Enabled: false 34 | 35 | Naming/AccessorMethodName: 36 | Enabled: false 37 | 38 | Layout/FirstArrayElementIndentation: 39 | Enabled: false 40 | 41 | Style/Documentation: 42 | Enabled: false 43 | 44 | Layout/LeadingCommentSpace: 45 | Enabled: false 46 | 47 | Style/BlockDelimiters: 48 | Enabled: false 49 | 50 | Style/HashSyntax: 51 | Enabled: false 52 | 53 | Style/MultilineIfThen: 54 | Enabled: false 55 | 56 | Style/ParenthesesAroundCondition: 57 | Enabled: false 58 | 59 | Style/MultilineWhenThen: 60 | Enabled: false 61 | 62 | Style/RedundantPercentQ: 63 | Enabled: false 64 | 65 | Style/PercentLiteralDelimiters: 66 | Enabled: false 67 | 68 | Style/NumericLiterals: 69 | Enabled: false 70 | 71 | Style/ExponentialNotation: 72 | Enabled: false 73 | 74 | Layout/SpaceInsideArrayLiteralBrackets: 75 | EnforcedStyle: space 76 | Enabled: false 77 | 78 | Layout/SpaceBeforeBlockBraces: 79 | Enabled: false 80 | 81 | Layout/EmptyLineAfterGuardClause: 82 | Enabled: false 83 | 84 | Naming/MethodParameterName: 85 | Enabled: false 86 | 87 | Naming/ClassAndModuleCamelCase: 88 | Enabled: false 89 | 90 | Naming/ConstantName: 91 | Enabled: false 92 | 93 | 94 | 95 | Layout/HashAlignment: 96 | EnforcedHashRocketStyle: table 97 | 98 | Layout/SpaceInsidePercentLiteralDelimiters: 99 | Enabled: false 100 | 101 | 102 | 103 | Metrics/BlockLength: 104 | Enabled: false 105 | 106 | Metrics/ClassLength: 107 | Enabled: false 108 | 109 | Metrics/MethodLength: 110 | Enabled: false 111 | 112 | 113 | 114 | Metrics/PerceivedComplexity: 115 | Enabled: false 116 | 117 | Metrics/ParameterLists: 118 | Enabled: false 119 | 120 | Metrics/CyclomaticComplexity: 121 | Enabled: false 122 | 123 | Metrics/ModuleLength: 124 | Enabled: false 125 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # v3.4.25 (May 19, 2022) 2 | 3 | * Improve code style and consistently (@weshatheleopard) 4 | * Update `Gemfile.lock`, dependency versions used when developing the gem (@weshatheleopard) 5 | 6 | # v3.4.24 (May 16, 2022) 7 | 8 | * Add `Cell#add_hyperlink` for adding a hyperlink to a cell (@weshatheleopard) 9 | * Add `Reference#valid?` for checking if a cell reference is valid (@weshatheleopard) 10 | * Add `Worksheet#cell_at` for finding a cell by its Excel-style reference (@weshatheleopard) 11 | * Prevent creation of sheets with reserved names (specifically, `History`) (@weshatheleopard) 12 | * Update `Gemfile.lock`, dependency versions used when developing the gem (@weshatheleopard) -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'http://rubygems.org' 2 | 3 | # Dependencies required to run this gem. 4 | gem 'nokogiri', '>= 1.10.8' 5 | gem 'rubyzip', '>= 1.3.0' , :require => 'zip' 6 | 7 | # Development dependencies. 8 | group :development, :test do 9 | gem 'bundler' 10 | gem 'rake' 11 | gem 'juwelier' 12 | gem 'rspec' 13 | gem 'simplecov' 14 | 15 | # gem 'stackprof' 16 | gem 'ruby-prof' 17 | gem 'rspec_junit_formatter' 18 | 19 | gem 'rubocop' 20 | end 21 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011 Vivek Bhagwat, 2013-2020 Wesha 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | 3.4.33 -------------------------------------------------------------------------------- /lib/rubyXL.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/root' 2 | require 'rubyXL/parser' 3 | 4 | module RubyXL 5 | @@suppress_warnings = false 6 | 7 | # Convert any path passed to absolute path (within the XLSX file). 8 | def self.from_root(path) 9 | return path unless path.absolute? 10 | path.relative_path_from(OOXMLTopLevelObject::ROOT) 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /lib/rubyXL/cell.rb: -------------------------------------------------------------------------------- 1 | module RubyXL 2 | module LegacyCell 3 | def workbook 4 | @worksheet.workbook 5 | end 6 | 7 | private 8 | 9 | def validate_workbook 10 | unless workbook.nil? || workbook.worksheets.nil? 11 | workbook.worksheets.each { |sheet| 12 | unless sheet.nil? || sheet.sheet_data.nil? || sheet.sheet_data[row].nil? 13 | if sheet.sheet_data[row][column] == self 14 | return 15 | end 16 | end 17 | } 18 | end 19 | raise "This cell #{self} is not in workbook #{workbook}" 20 | end 21 | 22 | def validate_worksheet 23 | return if @worksheet && @worksheet[row] && @worksheet[row][column].equal?(self) 24 | raise "Cell #{self} is not in worksheet #{worksheet}" 25 | end 26 | end 27 | end 28 | -------------------------------------------------------------------------------- /lib/rubyXL/convenience_methods.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/convenience_methods/workbook' 2 | require 'rubyXL/convenience_methods/worksheet' 3 | require 'rubyXL/convenience_methods/cell' 4 | require 'rubyXL/convenience_methods/font' 5 | require 'rubyXL/convenience_methods/color' 6 | -------------------------------------------------------------------------------- /lib/rubyXL/convenience_methods/font.rb: -------------------------------------------------------------------------------- 1 | module RubyXL 2 | module FontConvenienceMethods 3 | # Funny enough, but presence of without value (equivalent to `val == nul`) means "italic = true"! 4 | # Same is true for bold, strikethrough, etc 5 | def is_italic 6 | i && (i.val != false) 7 | end 8 | 9 | def is_bold 10 | b && (b.val != false) 11 | end 12 | 13 | def is_underlined 14 | u && (u.val != false) 15 | end 16 | 17 | def is_strikethrough 18 | strike && (strike.val != false) 19 | end 20 | 21 | def get_name 22 | name && name.val 23 | end 24 | 25 | def get_size 26 | sz && sz.val 27 | end 28 | 29 | def get_rgb_color 30 | color && color.rgb 31 | end 32 | 33 | def set_italic(val) 34 | self.i = RubyXL::BooleanValue.new(:val => val) 35 | end 36 | 37 | def set_bold(val) 38 | self.b = RubyXL::BooleanValue.new(:val => val) 39 | end 40 | 41 | def set_underline(val) 42 | self.u = RubyXL::BooleanValue.new(:val => val) 43 | end 44 | 45 | def set_strikethrough(val) 46 | self.strike = RubyXL::BooleanValue.new(:val => val) 47 | end 48 | 49 | def set_name(val) 50 | self.name = RubyXL::StringValue.new(:val => val) 51 | end 52 | 53 | def set_size(val) 54 | self.sz = RubyXL::FloatValue.new(:val => val) 55 | end 56 | 57 | def set_rgb_color(font_color) 58 | self.color = RubyXL::Color.new(:rgb => font_color.to_s) 59 | end 60 | end 61 | 62 | RubyXL::Font.send(:include, RubyXL::FontConvenienceMethods) # ruby 2.1 compat 63 | end 64 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/border.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | require 'rubyXL/objects/simple_types' 3 | 4 | module RubyXL 5 | class BorderEdge < OOXMLObject 6 | define_attribute(:style, RubyXL::ST_BorderStyle, :default => 'none') 7 | define_child_node(RubyXL::Color) 8 | 9 | def set_rgb_color(font_color) 10 | self.color = RubyXL::Color.new(:rgb => font_color.to_s) 11 | end 12 | 13 | def get_rgb_color 14 | color && color.rgb 15 | end 16 | end 17 | 18 | # http://www.datypic.com/sc/ooxml/e-ssml_border-2.html 19 | class Border < OOXMLObject 20 | define_attribute(:diagonalUp, :bool) 21 | define_attribute(:diagonalDown, :bool) 22 | define_attribute(:outline, :bool, :default => true) 23 | define_child_node(RubyXL::BorderEdge, :node_name => :left) 24 | define_child_node(RubyXL::BorderEdge, :node_name => :right) 25 | define_child_node(RubyXL::BorderEdge, :node_name => :top) 26 | define_child_node(RubyXL::BorderEdge, :node_name => :bottom) 27 | define_child_node(RubyXL::BorderEdge, :node_name => :diagonal) 28 | define_child_node(RubyXL::BorderEdge, :node_name => :vertical) 29 | define_child_node(RubyXL::BorderEdge, :node_name => :horizontal) 30 | define_element_name 'border' 31 | 32 | def get_edge_style(direction) 33 | edge = self.send(direction) 34 | edge && edge.style 35 | end 36 | 37 | def set_edge_style(direction, style) 38 | edge = self.send(direction) 39 | if edge 40 | edge.style = style 41 | else 42 | self.send("#{direction}=", RubyXL::BorderEdge.new(:style => style)) 43 | end 44 | end 45 | 46 | def get_edge_color(direction) 47 | edge = self.send(direction) 48 | edge && edge.get_rgb_color 49 | end 50 | 51 | def set_edge_color(direction, color) 52 | edge = self.send(direction) 53 | if edge 54 | edge.set_rgb_color(color) 55 | else 56 | self.send("#{direction}=", RubyXL::BorderEdge.new) 57 | self.send(direction).set_rgb_color(color) 58 | end 59 | end 60 | end 61 | 62 | # http://www.datypic.com/sc/ooxml/e-ssml_borders-1.html 63 | class Borders < OOXMLContainerObject 64 | define_child_node(RubyXL::Border, :collection => :with_count) 65 | define_element_name 'borders' 66 | 67 | def self.default 68 | self.new(:_ => [ RubyXL::Border.new ]) 69 | end 70 | end 71 | end 72 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/calculation_chain.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | require 'rubyXL/objects/extensions' 3 | 4 | module RubyXL 5 | # http://www.datypic.com/sc/ooxml/e-ssml_c-1.html 6 | class CalculationChainCell < OOXMLObject 7 | define_attribute(:r, :ref, :accessor => :ref) 8 | define_attribute(:i, :int, :accessor => :sheet_id, :default => 0) 9 | define_attribute(:s, :bool, :accessor => :child_chain, :default => false) 10 | define_attribute(:l, :bool, :accessor => :new_dep_lvl, :default => false) 11 | define_attribute(:t, :bool, :accessor => :new_thread, :default => false) 12 | define_attribute(:a, :bool, :accessor => :array, :default => false) 13 | define_element_name 'c' 14 | end 15 | 16 | # http://www.datypic.com/sc/ooxml/e-ssml_calcChain.html 17 | class CalculationChain < OOXMLTopLevelObject 18 | CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml'.freeze 19 | REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain'.freeze 20 | 21 | define_child_node(RubyXL::CalculationChainCell, :collection => true, :accessor => :cells) 22 | define_child_node(RubyXL::ExtensionStorageArea) 23 | 24 | define_element_name 'calcChain' 25 | set_namespaces('http://schemas.openxmlformats.org/spreadsheetml/2006/main' => nil) 26 | 27 | def xlsx_path 28 | ROOT.join('xl', 'calcChain.xml') 29 | end 30 | end 31 | end 32 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/cell_style.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | require 'rubyXL/objects/simple_types' 3 | 4 | module RubyXL 5 | # http://www.datypic.com/sc/ooxml/e-ssml_cellStyle-1.html 6 | class CellStyle < OOXMLObject 7 | define_attribute(:name, :string) 8 | define_attribute(:xfId, :int, :required => true) 9 | define_attribute(:builtinId, :int) 10 | define_attribute(:iLevel, :int) 11 | define_attribute(:hidden, :bool) 12 | define_attribute(:customBuiltin, :bool) 13 | define_element_name 'cellStyle' 14 | end 15 | 16 | # http://www.datypic.com/sc/ooxml/e-ssml_alignment-1.html 17 | class Alignment < OOXMLObject 18 | define_attribute(:horizontal, RubyXL::ST_HorizontalAlignment) 19 | define_attribute(:vertical, RubyXL::ST_VerticalAlignment) 20 | define_attribute(:textRotation, :uint) 21 | define_attribute(:wrapText, :bool) 22 | define_attribute(:indent, :uint) 23 | define_attribute(:relativeIndent, :int) 24 | define_attribute(:justifyLastLine, :bool) 25 | define_attribute(:shrinkToFit, :bool) 26 | define_attribute(:readingOrder, :uint) 27 | define_element_name 'alignment' 28 | end 29 | 30 | # http://www.datypic.com/sc/ooxml/e-ssml_protection-1.html 31 | class Protection < OOXMLObject 32 | define_attribute(:locked, :bool) 33 | define_attribute(:hidden, :bool) 34 | define_element_name 'protection' 35 | end 36 | 37 | # http://www.datypic.com/sc/ooxml/e-ssml_xf-1.html 38 | class XF < OOXMLObject 39 | define_attribute(:numFmtId, :int) 40 | define_attribute(:fontId, :int) 41 | define_attribute(:fillId, :int) 42 | define_attribute(:borderId, :int) 43 | define_attribute(:xfId, :int) 44 | define_attribute(:quotePrefix, :bool, :default => false) 45 | define_attribute(:pivotButton, :bool, :default => false) 46 | define_attribute(:applyNumberFormat, :bool) 47 | define_attribute(:applyFont, :bool) 48 | define_attribute(:applyFill, :bool) 49 | define_attribute(:applyBorder, :bool) 50 | define_attribute(:applyAlignment, :bool) 51 | define_attribute(:applyProtection, :bool) 52 | define_child_node(RubyXL::Alignment) 53 | define_child_node(RubyXL::Protection) 54 | define_element_name 'xf' 55 | end 56 | 57 | # http://www.datypic.com/sc/ooxml/e-ssml_numFmt-1.html 58 | class NumFmt < OOXMLObject 59 | define_attribute(:numFmtId, :int, :required => true) 60 | define_attribute(:formatCode, :string, :required => true) 61 | define_element_name 'numFmt' 62 | end 63 | end 64 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/color.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | require 'rubyXL/objects/simple_types' 3 | 4 | module RubyXL 5 | # http://www.datypic.com/sc/ooxml/e-ssml_color-4.html 6 | class Color < OOXMLObject 7 | COLOR_REGEXP = /\A(?:[a-f0-9]{6}|[a-f0-9]{8})\Z/i 8 | 9 | define_attribute(:auto, :bool) 10 | define_attribute(:indexed, :uint) 11 | define_attribute(:rgb, RubyXL::ST_UnsignedIntHex) 12 | define_attribute(:theme, :uint) 13 | define_attribute(:tint, :double, :default => 0.0) 14 | define_element_name 'color' 15 | 16 | # validates hex color code, no '#' allowed 17 | def self.validate_color(color) 18 | if color =~ COLOR_REGEXP 19 | return true 20 | else 21 | raise 'invalid color' 22 | end 23 | end 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/comments.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | require 'rubyXL/objects/extensions' 3 | 4 | module RubyXL 5 | # http://www.datypic.com/sc/ooxml/e-ssml_comment-1.html 6 | class Comment < OOXMLObject 7 | define_child_node(RubyXL::RichText, :node_name => 'text') 8 | define_child_node(RubyXL::AlternateContent) 9 | define_attribute(:ref, :ref, :required => true) 10 | define_attribute(:authorId, :int, :required => true) 11 | define_attribute(:guid, :string) 12 | define_element_name 'comment' 13 | end 14 | 15 | # http://www.datypic.com/sc/ooxml/e-ssml_authors-1.html 16 | class CommentList < OOXMLContainerObject 17 | define_child_node(RubyXL::Comment, :collection => [0..-1]) 18 | define_element_name 'commentList' 19 | end 20 | 21 | # http://www.datypic.com/sc/ooxml/e-ssml_authors-1.html 22 | class Authors < OOXMLContainerObject 23 | define_child_node(RubyXL::StringNode, :node_name => :author, :collection => [0..-1]) 24 | define_element_name 'authors' 25 | end 26 | 27 | # http://www.datypic.com/sc/ooxml/e-ssml_comments.html 28 | class CommentsFile < OOXMLTopLevelObject 29 | CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml' 30 | REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments'.freeze 31 | 32 | define_child_node(RubyXL::Authors) 33 | define_child_node(RubyXL::CommentList) 34 | define_child_node(RubyXL::ExtensionStorageArea) 35 | define_element_name 'comments' 36 | set_namespaces('http://schemas.openxmlformats.org/spreadsheetml/2006/main' => nil) 37 | 38 | attr_accessor :workbook 39 | 40 | def xlsx_path 41 | ROOT.join('xl', "comments#{file_index}.xml") 42 | end 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/content_types.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | 3 | module RubyXL 4 | class ContentTypeDefault < OOXMLObject 5 | define_attribute(:Extension, :string) 6 | define_attribute(:ContentType, :string) 7 | define_element_name 'Default' 8 | end 9 | 10 | class ContentTypeOverride < OOXMLObject 11 | define_attribute(:PartName, :string) 12 | define_attribute(:ContentType, :string) 13 | define_element_name 'Override' 14 | end 15 | 16 | class ContentTypes < OOXMLTopLevelObject 17 | SAVE_ORDER = 999 # Must be saved last, so it has time to accumulate overrides from all others. 18 | XLSX_PATH = ROOT.join('[Content_Types].xml') 19 | 20 | define_child_node(RubyXL::ContentTypeDefault, :collection => true, :accessor => :defaults) 21 | define_child_node(RubyXL::ContentTypeOverride, :collection => true, :accessor => :overrides) 22 | 23 | set_namespaces('http://schemas.openxmlformats.org/package/2006/content-types' => nil) 24 | define_element_name 'Types' 25 | 26 | def xlsx_path 27 | XLSX_PATH 28 | end 29 | 30 | def before_write_xml 31 | content_types_by_ext = {} 32 | 33 | # Collect all extensions and corresponding content types 34 | root.rels_hash.each_pair { |klass, objects| 35 | objects.each { |obj| 36 | next unless klass.const_defined?(:CONTENT_TYPE) 37 | ext = obj.xlsx_path.extname[1..-1] 38 | next if ext.nil? 39 | content_types_by_ext[ext] ||= [] 40 | content_types_by_ext[ext] << klass::CONTENT_TYPE 41 | } 42 | } 43 | 44 | self.defaults = [ RubyXL::ContentTypeDefault.new(:extension => 'xml', :content_type => 'application/xml') ] 45 | 46 | # Determine which content types are used most often, and add them to the list of defaults 47 | content_types_by_ext.each_pair { |ext, content_types_arr| 48 | next if ext.nil? || defaults.any? { |d| d.extension == ext } 49 | most_frequent_ct = content_types_arr.group_by { |ct| ct }.values.max_by(&:size).first 50 | defaults << RubyXL::ContentTypeDefault.new(:extension => ext, :content_type => most_frequent_ct) 51 | } 52 | 53 | self.overrides = [] 54 | 55 | # Add overrides for the files with known extensions but different content types. 56 | root.rels_hash.each_pair { |klass, objects| 57 | objects.each { |obj| 58 | obj_content_type = case 59 | when obj.respond_to?(:content_type) then obj.content_type 60 | when defined?(klass::CONTENT_TYPE) then klass::CONTENT_TYPE 61 | else next 62 | end 63 | 64 | ext = obj.xlsx_path.extname[1..-1] 65 | next if defaults.any? { |d| (d.extension == ext) && (d.content_type == obj_content_type) } 66 | overrides << RubyXL::ContentTypeOverride.new(:part_name => obj.xlsx_path, 67 | :content_type => obj_content_type) 68 | } 69 | } 70 | 71 | true 72 | end 73 | end 74 | end 75 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/data_validation.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | require 'rubyXL/objects/simple_types' 3 | require 'rubyXL/objects/formula' 4 | 5 | module RubyXL 6 | # http://www.datypic.com/sc/ooxml/e-ssml_dataValidation-1.html 7 | class DataValidation < OOXMLObject 8 | define_attribute(:type, RubyXL::ST_DataValidationType, :default => 'none') 9 | define_attribute(:errorStyle, RubyXL::ST_DataValidationErrorStyle, :default => 'stop') 10 | define_attribute(:imeMode, RubyXL::ST_DataValidationImeMode, :default => 'noControl') 11 | define_attribute(:operator, RubyXL::ST_DataValidationOperator, :default => 'between') 12 | define_attribute(:allowBlank, :bool, :default => false) 13 | # Documentation lies. This property should have been called "HIDE dropdown", 14 | # since that's what happens when it is set to true. 15 | define_attribute(:showDropDown, :bool, :default => false) 16 | define_attribute(:showInputMessage, :bool, :default => false) 17 | define_attribute(:showErrorMessage, :bool, :default => false) 18 | define_attribute(:errorTitle, :string) 19 | define_attribute(:error, :string) 20 | define_attribute(:promptTitle, :string) 21 | define_attribute(:prompt, :string) 22 | define_attribute(:sqref, :sqref, :required => true) 23 | 24 | define_child_node(RubyXL::Formula, :node_name => :formula1) 25 | define_child_node(RubyXL::Formula, :node_name => :formula2) 26 | define_element_name 'dataValidation' 27 | end 28 | 29 | # http://www.datypic.com/sc/ooxml/e-ssml_dataValidations-1.html 30 | class DataValidations < OOXMLContainerObject 31 | define_attribute(:disablePrompts, :bool, :default => false) 32 | define_attribute(:xWindow, :int) 33 | define_attribute(:yWindow, :int) 34 | define_child_node(RubyXL::DataValidation, :collection => :with_count) 35 | define_element_name 'dataValidations' 36 | end 37 | end 38 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/extensions.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | 3 | module RubyXL 4 | # http://www.datypic.com/sc/ooxml/e-ssml_ext-1.html 5 | class RawOOXML < OOXMLObject 6 | attr_accessor :raw_xml 7 | 8 | def self.parse(node, ignore) 9 | obj = new 10 | obj.raw_xml = node.to_xml 11 | obj 12 | end 13 | 14 | def write_xml(xml, node_name_override = nil) 15 | self.raw_xml 16 | end 17 | end 18 | 19 | # http://www.datypic.com/sc/ooxml/e-ssml_ext-1.html 20 | class Extension < RawOOXML 21 | define_attribute(:uri, :string) 22 | define_element_name 'ext' 23 | end 24 | 25 | # http://www.datypic.com/sc/ooxml/e-ssml_extLst-1.html 26 | class ExtensionStorageArea < OOXMLObject 27 | define_child_node(RubyXL::Extension, :collection => true) 28 | define_element_name 'extLst' 29 | end 30 | 31 | class AlternateContent < RawOOXML 32 | define_element_name 'mc:AlternateContent' 33 | end 34 | 35 | class OOXMLIgnored < OOXMLObject 36 | def self.parse(node, ignore) 37 | nil 38 | end 39 | 40 | def write_xml(xml, node_name_override = nil) 41 | '' 42 | end 43 | end 44 | 45 | # https://msdn.microsoft.com/en-us/library/mt793297(v=office.12).aspx 46 | # "A CT_RevisionPtr element that specifies metadata supporting runtime scenarios for Microsoft Excel. 47 | # It SHOULD be ignored and SHOULD NOT be saved by all others." 48 | class RevisionPointer < OOXMLIgnored 49 | define_element_name 'xr:revisionPtr' 50 | end 51 | end 52 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/fill.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | require 'rubyXL/objects/simple_types' 3 | 4 | module RubyXL 5 | # http://www.datypic.com/sc/ooxml/e-ssml_stop-1.html 6 | class Stop < OOXMLObject 7 | define_attribute(:position, :double, :required => true) 8 | define_child_node(RubyXL::Color) 9 | define_element_name 'stop' 10 | end 11 | 12 | # http://www.datypic.com/sc/ooxml/e-ssml_patternFill-1.html 13 | class PatternFill < OOXMLObject 14 | define_attribute(:patternType, RubyXL::ST_PatternType) 15 | define_child_node(RubyXL::Color, :node_name => :fgColor) 16 | define_child_node(RubyXL::Color, :node_name => :bgColor) 17 | define_element_name 'patternFill' 18 | end 19 | 20 | # http://www.datypic.com/sc/ooxml/e-ssml_gradientFill-1.html 21 | class GradientFill < OOXMLObject 22 | define_attribute(:type, RubyXL::ST_GradientType, :default => 'linear') 23 | define_attribute(:degree, :double, :default => 0) 24 | define_attribute(:left, :double, :default => 0) 25 | define_attribute(:right, :double, :default => 0) 26 | define_attribute(:top, :double, :default => 0) 27 | define_attribute(:bottom, :double, :default => 0) 28 | define_child_node(RubyXL::Stop, :collection => true) 29 | define_element_name 'gradientFill' 30 | end 31 | 32 | # http://www.datypic.com/sc/ooxml/e-ssml_fill-1.html 33 | class Fill < OOXMLObject 34 | define_child_node(RubyXL::PatternFill) 35 | define_child_node(RubyXL::GradientFill) 36 | define_element_name 'fill' 37 | 38 | def self.default(pattern_type) 39 | self.new(:pattern_fill => RubyXL::PatternFill.new(:pattern_type => pattern_type)) 40 | end 41 | end 42 | 43 | # http://www.datypic.com/sc/ooxml/e-ssml_fills-1.html 44 | class Fills < OOXMLContainerObject 45 | define_child_node(RubyXL::Fill, :collection => :with_count) 46 | define_element_name 'fills' 47 | 48 | def self.default 49 | self.new(:_ => [ RubyXL::Fill.default('none'), RubyXL::Fill.default('gray125') ]) 50 | end 51 | end 52 | end 53 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/font.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | require 'rubyXL/objects/container_nodes' 3 | require 'rubyXL/objects/color' 4 | 5 | module RubyXL 6 | # http://www.datypic.com/sc/ooxml/e-ssml_font-1.html 7 | class Font < OOXMLObject 8 | # Since we have no capability to load the actual fonts, we'll have to live with the default. 9 | MAX_DIGIT_WIDTH = 7 # Calibri 11 pt @ 96 dpi 10 | 11 | define_child_node(RubyXL::StringValue, :node_name => :name) 12 | define_child_node(RubyXL::IntegerValue, :node_name => :charset) 13 | define_child_node(RubyXL::IntegerValue, :node_name => :family) 14 | define_child_node(RubyXL::BooleanValue, :node_name => :b) 15 | define_child_node(RubyXL::BooleanValue, :node_name => :i) 16 | define_child_node(RubyXL::BooleanValue, :node_name => :strike) 17 | define_child_node(RubyXL::BooleanValue, :node_name => :outline) 18 | define_child_node(RubyXL::BooleanValue, :node_name => :shadow) 19 | define_child_node(RubyXL::BooleanValue, :node_name => :condense) 20 | define_child_node(RubyXL::BooleanValue, :node_name => :extend) 21 | define_child_node(RubyXL::Color) 22 | define_child_node(RubyXL::FloatValue, :node_name => :sz) 23 | define_child_node(RubyXL::StringValue, :node_name => :u) # ST_UnderlineValues (http://www.datypic.com/sc/ooxml/e-ssml_u-1.html) 24 | define_child_node(RubyXL::StringValue, :node_name => :vertAlign) 25 | define_child_node(RubyXL::StringValue, :node_name => :scheme) 26 | define_element_name 'font' 27 | 28 | def self.default(size = 10) 29 | self.new(:name => RubyXL::StringValue.new(:val => 'Verdana'), 30 | :sz => RubyXL::FloatValue.new(:val => size)) 31 | end 32 | end 33 | 34 | # http://www.datypic.com/sc/ooxml/e-ssml_fonts-1.html 35 | class Fonts < OOXMLContainerObject 36 | define_child_node(RubyXL::Font, :collection => :with_count) 37 | define_element_name 'fonts' 38 | 39 | def self.default 40 | self.new(:_ => [ RubyXL::Font.default(10), RubyXL::Font.default(8) ]) 41 | end 42 | end 43 | end 44 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/formula.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | require 'rubyXL/objects/simple_types' 3 | 4 | module RubyXL 5 | # http://www.datypic.com/sc/ooxml/e-ssml_f-1.html 6 | class Formula < OOXMLObject 7 | define_attribute(:_, :string, :accessor => :expression) 8 | define_attribute(:t, RubyXL::ST_CellFormulaType, :default => 'normal') 9 | define_attribute(:aca, :bool, :default => false) 10 | define_attribute(:ref, :ref) 11 | define_attribute(:dt2D, :bool, :default => false) 12 | define_attribute(:dtr, :bool, :default => false) 13 | define_attribute(:del1, :bool, :default => false) 14 | define_attribute(:del2, :bool, :default => false) 15 | define_attribute(:r1, :ref) 16 | define_attribute(:r2, :ref) 17 | define_attribute(:ca, :bool, :default => false) 18 | define_attribute(:si, :int) 19 | define_attribute(:bx, :bool, :default => false) 20 | define_element_name 'f' 21 | end 22 | end 23 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/root.rb: -------------------------------------------------------------------------------- 1 | require 'zip' 2 | require 'rubyXL/objects/relationships' 3 | require 'rubyXL/objects/document_properties' 4 | require 'rubyXL/objects/content_types' 5 | require 'rubyXL/objects/workbook' 6 | 7 | module RubyXL 8 | class WorkbookRoot 9 | @@debug = $DEBUG 10 | 11 | attr_accessor :source_file_path, :content_types, :rels_hash 12 | 13 | include RubyXL::RelationshipSupport 14 | 15 | define_relationship(RubyXL::ThumbnailFile, :thumbnail) 16 | define_relationship(RubyXL::CorePropertiesFile, :core_properties) 17 | define_relationship(RubyXL::DocumentPropertiesFile, :document_properties) 18 | define_relationship(RubyXL::CustomPropertiesFile, :custom_properties) 19 | define_relationship(RubyXL::Workbook, :workbook) 20 | 21 | def related_objects 22 | [ content_types, thumbnail, core_properties, document_properties, custom_properties, workbook ] 23 | end 24 | 25 | def self.default 26 | obj = self.new 27 | obj.document_properties = RubyXL::DocumentPropertiesFile.new 28 | obj.core_properties = RubyXL::CorePropertiesFile.new 29 | obj.relationship_container = RubyXL::OOXMLRelationshipsFile.new 30 | obj.content_types = RubyXL::ContentTypes.new 31 | obj 32 | end 33 | 34 | # Write .xlsx to a stream (useful for sending over HTTP) 35 | def stream 36 | stream = Zip::OutputStream.write_buffer { |zipstream| 37 | self.rels_hash = {} 38 | self.relationship_container.owner = self 39 | collect_related_objects.compact.each { |obj| 40 | puts "<-- DEBUG: adding relationship to #{obj.class}" if @@debug 41 | obj.root = self if obj.respond_to?(:root=) 42 | self.rels_hash[obj.class] ||= [] 43 | self.rels_hash[obj.class] << obj 44 | } 45 | 46 | self.rels_hash.keys.sort_by{ |c| c::SAVE_ORDER }.each { |klass| 47 | puts "<-- DEBUG: saving related #{klass} files" if @@debug 48 | self.rels_hash[klass].select! { |obj| 49 | puts "<-- DEBUG: > #{obj.xlsx_path}" if @@debug 50 | obj.add_to_zip(zipstream) 51 | } 52 | } 53 | } 54 | stream.rewind 55 | stream 56 | end 57 | 58 | def xlsx_path 59 | OOXMLTopLevelObject::ROOT 60 | end 61 | 62 | def self.parse_zip_file(zip_file) 63 | root = self.new 64 | root.content_types = RubyXL::ContentTypes.parse_file(zip_file, ContentTypes::XLSX_PATH) 65 | root.load_relationships(zip_file, OOXMLTopLevelObject::ROOT) 66 | 67 | wb = root.workbook 68 | wb.root = root 69 | 70 | wb.sheets.each_with_index { |sheet, i| 71 | sheet_obj = wb.relationship_container.related_files[sheet.r_id] 72 | 73 | wb.worksheets[i] = sheet_obj # Must be done first so the sheet becomes aware of its number 74 | sheet_obj.workbook = wb 75 | 76 | sheet_obj.sheet_name = sheet.name 77 | sheet_obj.sheet_id = sheet.sheet_id 78 | sheet_obj.state = sheet.state 79 | } 80 | 81 | root 82 | end 83 | end 84 | end 85 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/shared_strings.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | require 'rubyXL/objects/text' 3 | require 'rubyXL/objects/extensions' 4 | 5 | module RubyXL 6 | # http://www.datypic.com/sc/ooxml/e-ssml_sst.html 7 | class SharedStringsTable < OOXMLTopLevelObject 8 | CONTENT_TYPE = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml'.freeze 9 | REL_TYPE = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings'.freeze 10 | 11 | # According to http://msdn.microsoft.com/en-us/library/office/gg278314.aspx, 12 | # +count+ and +uniqueCount+ may be either both missing, or both present. Need to validate. 13 | define_attribute(:uniqueCount, :int) 14 | define_child_node(RubyXL::RichText, :collection => :with_count, :node_name => 'si', :accessor => :strings) 15 | define_child_node(RubyXL::ExtensionStorageArea) 16 | define_element_name 'sst' 17 | set_namespaces('http://schemas.openxmlformats.org/spreadsheetml/2006/main' => nil) 18 | 19 | def initialize(*params) 20 | super 21 | # So far, going by the structure that the original creator had in mind. However, 22 | # since the actual implementation is now extracted into a separate class, 23 | # we will be able to transparently change it later if needs be. 24 | @index_by_content = {} 25 | end 26 | 27 | def before_write_xml 28 | super 29 | self.unique_count = self.count 30 | self.count > 0 31 | end 32 | 33 | def [](index) 34 | strings[index] 35 | end 36 | 37 | def empty? 38 | strings.empty? 39 | end 40 | 41 | def add(v, index = nil) 42 | index ||= strings.size 43 | 44 | strings[index] = 45 | case v 46 | when RubyXL::RichText then v 47 | when String then RubyXL::RichText.new(:t => RubyXL::Text.new(:value => v)) 48 | when RubyXL::Text then RubyXL::RichText.new(:t => v) 49 | when RubyXL::RichTextRun then RubyXL::RichText.new(:r => [ v ]) 50 | when RubyXL::PhoneticRun then RubyXL::RichText.new(:r_ph => [ v ]) 51 | when RubyXL::PhoneticProperties then RubyXL::RichText.new(:phonetic_pr => v) 52 | end 53 | 54 | @index_by_content[v.to_s] = index 55 | end 56 | 57 | def get_index(str, add_if_missing = false) 58 | index = @index_by_content[str] 59 | index = add(str) if index.nil? && add_if_missing 60 | index 61 | end 62 | 63 | def xlsx_path 64 | ROOT.join('xl', 'sharedStrings.xml') 65 | end 66 | end 67 | end 68 | -------------------------------------------------------------------------------- /lib/rubyXL/objects/sheet_common.rb: -------------------------------------------------------------------------------- 1 | require 'rubyXL/objects/ooxml_object' 2 | require 'rubyXL/objects/storage' 3 | 4 | module RubyXL 5 | # http://www.datypic.com/sc/ooxml/e-ssml_webPublishItem-1.html 6 | class WebPublishingItem < OOXMLObject 7 | define_attribute(:id, :int, :required => true) 8 | define_attribute(:divId, :int, :required => true) 9 | define_attribute(:sourceType, RubyXL::ST_WebSourceType, :required => true) 10 | define_attribute(:sourceRef, :ref) 11 | define_attribute(:sourceObject, :string) 12 | define_attribute(:destinationFile, :string, :required => true) 13 | define_attribute(:title, :string) 14 | define_attribute(:autoRepublish, :bool, :default => false) 15 | define_element_name 'webPublishItem' 16 | end 17 | 18 | # http://www.datypic.com/sc/ooxml/e-ssml_webPublishItems-1.html 19 | class WebPublishingItems < OOXMLContainerObject 20 | define_child_node(RubyXL::WebPublishingItem, :collection => :with_count) 21 | define_element_name 'webPublishItems' 22 | end 23 | 24 | # http://www.datypic.com/sc/ooxml/e-ssml_pageMargins-1.html 25 | class PageMargins < OOXMLObject 26 | define_attribute(:left, :double, :required => true) 27 | define_attribute(:right, :double, :required => true) 28 | define_attribute(:top, :double, :required => true) 29 | define_attribute(:bottom, :double, :required => true) 30 | define_attribute(:header, :double, :required => true) 31 | define_attribute(:footer, :double, :required => true) 32 | define_element_name 'pageMargins' 33 | end 34 | 35 | # http://www.datypic.com/sc/ooxml/e-ssml_headerFooter-1.html 36 | class HeaderFooterSettings < OOXMLObject 37 | define_attribute(:differentOddEven, :bool, :default => false) 38 | define_attribute(:differentFirst, :bool, :default => false) 39 | define_attribute(:scaleWithDoc, :bool, :default => true) 40 | define_attribute(:alignWithMargins, :bool, :default => true) 41 | define_child_node(RubyXL::StringNode, :node_name => :oddHeader) 42 | define_child_node(RubyXL::StringNode, :node_name => :oddFooter) 43 | define_child_node(RubyXL::StringNode, :node_name => :evenHeader) 44 | define_child_node(RubyXL::StringNode, :node_name => :evenFooter) 45 | define_child_node(RubyXL::StringNode, :node_name => :firstHeader) 46 | define_child_node(RubyXL::StringNode, :node_name => :firstFooter) 47 | define_element_name 'headerFooter' 48 | end 49 | end 50 | -------------------------------------------------------------------------------- /lib/rubyXL/parser.rb: -------------------------------------------------------------------------------- 1 | module RubyXL 2 | class Parser 3 | # Parse .xslx file by reading it from local disk. 4 | def self.parse(src_file_path) 5 | begin 6 | ::Zip::File.open(src_file_path) { |zip_file| 7 | root = RubyXL::WorkbookRoot.parse_zip_file(zip_file) 8 | root.source_file_path = src_file_path 9 | root.workbook 10 | } 11 | rescue ::Zip::Error => e 12 | raise e, "XLSX file format error: #{e}", e.backtrace 13 | end 14 | end 15 | 16 | # Parse .xslx file contained in a stream (useful for receiving over HTTP). 17 | def self.parse_buffer(buffer) 18 | root = nil # Zip::File.open_buffer somehow fails to return the value from the block :( 19 | begin 20 | ::Zip::File.open_buffer(buffer) { |zip_file| root = RubyXL::WorkbookRoot.parse_zip_file(zip_file) } 21 | root.workbook 22 | rescue ::Zip::Error => e 23 | raise e, "XLSX file format error: #{e}", e.backtrace 24 | end 25 | end 26 | end 27 | end 28 | -------------------------------------------------------------------------------- /rdoc/RubyXL/AExtensionStorageArea.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::AExtensionStorageArea - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::AExtensionStorageArea 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Alignment.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Alignment - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Alignment 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_alignment-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/AlternateContent.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::AlternateContent - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::AlternateContent 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Authors.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Authors - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Authors 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_authors-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/AutoFilter.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::AutoFilter - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::AutoFilter 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_autoFilter-2.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/BooleanNode.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::BooleanNode - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::BooleanNode 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/BooleanValue.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::BooleanValue - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::BooleanValue 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Break.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Break - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Break 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_brk-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/CT_Blip.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::CT_Blip - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::CT_Blip 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-a_blip-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/CellExt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::CellExt - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::CellExt 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_cell-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/CellStyle.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::CellStyle - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::CellStyle 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_cellStyle-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/ColorConvenienceClasses.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | module RubyXL::ColorConvenienceClasses - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 66 | 67 |
68 |

69 | module RubyXL::ColorConvenienceClasses 70 |

71 | 72 |
73 | 74 |
75 | 76 |
77 | 78 | 79 | 80 | 81 | 82 |
83 |
84 | 85 | 86 | 91 | 92 | -------------------------------------------------------------------------------- /rdoc/RubyXL/ColorFilter.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::ColorFilter - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::ColorFilter 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_colorFilter-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Comment.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Comment - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Comment 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_comment-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/CommentList.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::CommentList - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::CommentList 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_authors-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Connection.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Connection - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Connection 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_connection-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/ContentTypeDefault.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::ContentTypeDefault - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::ContentTypeDefault 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/ContentTypeOverride.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::ContentTypeOverride - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::ContentTypeOverride 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/DXF.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::DXF - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::DXF 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_dxf-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Extents.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Extents - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Extents 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-a_ext-2.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/FloatNode.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::FloatNode - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::FloatNode 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/FloatValue.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::FloatValue - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::FloatValue 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Formula.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Formula - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Formula 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_f-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/IconFilter.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::IconFilter - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::IconFilter 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_iconFilter-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/IntegerNode.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::IntegerNode - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::IntegerNode 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/IntegerValue.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::IntegerValue - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::IntegerValue 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/NumFmt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::NumFmt - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::NumFmt 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_numFmt-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Offset.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Offset - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Offset 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-a_off-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/OleItem.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::OleItem - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::OleItem 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_oleItem-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/OleItems.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::OleItems - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::OleItems 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_oleItems-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/OleLink.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::OleLink - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::OleLink 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/t-ssml_CT_OleLink.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Pane.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Pane - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Pane 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_pane-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/PatternFill.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::PatternFill - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::PatternFill 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_patternFill-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Protection.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Protection - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Protection 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_protection-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/RID.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::RID - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::RID 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Relationship.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Relationship - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Relationship 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/RowExt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::RowExt - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::RowExt 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_row-2.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Sheet.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Sheet - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Sheet 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_sheet-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/SheetDataExt.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::SheetDataExt - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::SheetDataExt 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_sheetData-3.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/SheetName.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::SheetName - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::SheetName 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_sheetName-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/SheetNames.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::SheetNames - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::SheetNames 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_sheetNames-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/SortState.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::SortState - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::SortState 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_sortState-2.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Stop.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Stop - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Stop 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_stop-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/StringNode.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::StringNode - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::StringNode 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/StringValue.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::StringValue - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::StringValue 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/TableParts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::TableParts - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::TableParts 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Top10.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Top10 - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Top10 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_top10-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/Variant.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::Variant - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::Variant 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-docPropsVTypes_variant.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/RubyXL/VectorValue.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::VectorValue - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::VectorValue 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/WorksheetFormatProperties.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::WorksheetFormatProperties - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::WorksheetFormatProperties 76 |

77 | 78 |
79 | 80 |
81 | 82 |
83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 | 91 | 92 | 97 | 98 | -------------------------------------------------------------------------------- /rdoc/RubyXL/XF.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | class RubyXL::XF - rubyXL 3.4.33 8 | 9 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 72 | 73 |
74 |

75 | class RubyXL::XF 76 |

77 | 78 |
79 | 80 |

www.datypic.com/sc/ooxml/e-ssml_xf-1.html

81 | 82 |
83 | 84 |
85 | 86 | 87 | 88 | 89 | 90 |
91 |
92 | 93 | 94 | 99 | 100 | -------------------------------------------------------------------------------- /rdoc/created.rid: -------------------------------------------------------------------------------- 1 | Fri, 20 Dec 2024 18:09:26 +0000 2 | README.rdoc Thu, 12 Dec 2024 23:06:10 +0000 3 | lib/rubyXL.rb Thu, 12 May 2022 06:08:08 +0000 4 | lib/rubyXL/cell.rb Thu, 25 Apr 2024 20:48:43 +0000 5 | lib/rubyXL/convenience_methods.rb Mon, 25 Feb 2019 21:06:24 +0000 6 | lib/rubyXL/convenience_methods/cell.rb Thu, 25 Apr 2024 21:09:14 +0000 7 | lib/rubyXL/convenience_methods/color.rb Fri, 13 Dec 2024 21:37:36 +0000 8 | lib/rubyXL/convenience_methods/font.rb Thu, 25 Apr 2024 20:48:43 +0000 9 | lib/rubyXL/convenience_methods/workbook.rb Thu, 25 Apr 2024 21:00:37 +0000 10 | lib/rubyXL/convenience_methods/worksheet.rb Fri, 13 Dec 2024 21:37:36 +0000 11 | lib/rubyXL/objects/border.rb Thu, 25 Apr 2024 20:48:43 +0000 12 | lib/rubyXL/objects/calculation_chain.rb Thu, 12 May 2022 06:13:57 +0000 13 | lib/rubyXL/objects/cell_style.rb Thu, 12 May 2022 05:58:39 +0000 14 | lib/rubyXL/objects/chartsheet.rb Thu, 19 May 2022 03:22:16 +0000 15 | lib/rubyXL/objects/color.rb Thu, 12 Dec 2024 22:13:54 +0000 16 | lib/rubyXL/objects/column_range.rb Fri, 13 Dec 2024 21:34:22 +0000 17 | lib/rubyXL/objects/comments.rb Thu, 12 May 2022 06:25:30 +0000 18 | lib/rubyXL/objects/connection.rb Thu, 25 Apr 2024 20:48:43 +0000 19 | lib/rubyXL/objects/container_nodes.rb Thu, 25 Apr 2024 20:48:43 +0000 20 | lib/rubyXL/objects/content_types.rb Thu, 25 Apr 2024 20:48:43 +0000 21 | lib/rubyXL/objects/data_validation.rb Thu, 12 May 2022 05:58:39 +0000 22 | lib/rubyXL/objects/document_properties.rb Fri, 20 Dec 2024 17:51:11 +0000 23 | lib/rubyXL/objects/extensions.rb Thu, 25 Apr 2024 20:48:43 +0000 24 | lib/rubyXL/objects/external_links.rb Thu, 28 Mar 2024 04:37:50 +0000 25 | lib/rubyXL/objects/fill.rb Thu, 25 Apr 2024 20:48:43 +0000 26 | lib/rubyXL/objects/filters.rb Thu, 12 May 2022 05:58:39 +0000 27 | lib/rubyXL/objects/font.rb Thu, 25 Apr 2024 20:48:43 +0000 28 | lib/rubyXL/objects/formula.rb Mon, 13 Feb 2023 18:53:30 +0000 29 | lib/rubyXL/objects/ooxml_object.rb Fri, 20 Dec 2024 18:07:23 +0000 30 | lib/rubyXL/objects/query_table.rb Thu, 25 Apr 2024 19:19:31 +0000 31 | lib/rubyXL/objects/reference.rb Fri, 13 Dec 2024 21:37:36 +0000 32 | lib/rubyXL/objects/relationships.rb Fri, 13 Dec 2024 21:34:22 +0000 33 | lib/rubyXL/objects/root.rb Thu, 25 Apr 2024 20:48:43 +0000 34 | lib/rubyXL/objects/shared_strings.rb Thu, 25 Apr 2024 21:18:31 +0000 35 | lib/rubyXL/objects/sheet_common.rb Thu, 12 May 2022 05:58:39 +0000 36 | lib/rubyXL/objects/sheet_data.rb Wed, 04 Sep 2024 02:34:18 +0000 37 | lib/rubyXL/objects/simple_types.rb Fri, 13 Dec 2024 21:35:11 +0000 38 | lib/rubyXL/objects/storage.rb Thu, 25 Apr 2024 20:48:43 +0000 39 | lib/rubyXL/objects/stylesheet.rb Fri, 26 Apr 2024 00:16:37 +0000 40 | lib/rubyXL/objects/text.rb Fri, 26 Apr 2024 01:43:17 +0000 41 | lib/rubyXL/objects/theme.rb Thu, 25 Apr 2024 20:54:02 +0000 42 | lib/rubyXL/objects/workbook.rb Fri, 13 Dec 2024 21:37:36 +0000 43 | lib/rubyXL/objects/worksheet.rb Thu, 12 Dec 2024 22:20:34 +0000 44 | lib/rubyXL/parser.rb Thu, 12 May 2022 06:30:26 +0000 45 | lib/rubyXL/worksheet.rb Thu, 25 Apr 2024 20:50:33 +0000 46 | -------------------------------------------------------------------------------- /rdoc/fonts/Lato-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/fonts/Lato-Light.ttf -------------------------------------------------------------------------------- /rdoc/fonts/Lato-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/fonts/Lato-LightItalic.ttf -------------------------------------------------------------------------------- /rdoc/fonts/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/fonts/Lato-Regular.ttf -------------------------------------------------------------------------------- /rdoc/fonts/Lato-RegularItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/fonts/Lato-RegularItalic.ttf -------------------------------------------------------------------------------- /rdoc/fonts/SourceCodePro-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/fonts/SourceCodePro-Bold.ttf -------------------------------------------------------------------------------- /rdoc/fonts/SourceCodePro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/fonts/SourceCodePro-Regular.ttf -------------------------------------------------------------------------------- /rdoc/images/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/add.png -------------------------------------------------------------------------------- /rdoc/images/arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/arrow_up.png -------------------------------------------------------------------------------- /rdoc/images/brick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/brick.png -------------------------------------------------------------------------------- /rdoc/images/brick_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/brick_link.png -------------------------------------------------------------------------------- /rdoc/images/bug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/bug.png -------------------------------------------------------------------------------- /rdoc/images/bullet_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/bullet_black.png -------------------------------------------------------------------------------- /rdoc/images/bullet_toggle_minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/bullet_toggle_minus.png -------------------------------------------------------------------------------- /rdoc/images/bullet_toggle_plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/bullet_toggle_plus.png -------------------------------------------------------------------------------- /rdoc/images/date.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/date.png -------------------------------------------------------------------------------- /rdoc/images/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/delete.png -------------------------------------------------------------------------------- /rdoc/images/find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/find.png -------------------------------------------------------------------------------- /rdoc/images/loadingAnimation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/loadingAnimation.gif -------------------------------------------------------------------------------- /rdoc/images/macFFBgHack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/macFFBgHack.png -------------------------------------------------------------------------------- /rdoc/images/package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/package.png -------------------------------------------------------------------------------- /rdoc/images/page_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/page_green.png -------------------------------------------------------------------------------- /rdoc/images/page_white_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/page_white_text.png -------------------------------------------------------------------------------- /rdoc/images/page_white_width.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/page_white_width.png -------------------------------------------------------------------------------- /rdoc/images/plugin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/plugin.png -------------------------------------------------------------------------------- /rdoc/images/ruby.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/ruby.png -------------------------------------------------------------------------------- /rdoc/images/tag_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/tag_blue.png -------------------------------------------------------------------------------- /rdoc/images/tag_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/tag_green.png -------------------------------------------------------------------------------- /rdoc/images/transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/transparent.png -------------------------------------------------------------------------------- /rdoc/images/wrench.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/wrench.png -------------------------------------------------------------------------------- /rdoc/images/wrench_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/wrench_orange.png -------------------------------------------------------------------------------- /rdoc/images/zoom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/weshatheleopard/rubyXL/152ce1ae7718280df8e8d35ebe1131eb7fa0cc78/rdoc/images/zoom.png -------------------------------------------------------------------------------- /rdoc/js/darkfish.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * Darkfish Page Functions 4 | * $Id: darkfish.js 53 2009-01-07 02:52:03Z deveiant $ 5 | * 6 | * Author: Michael Granger 7 | * 8 | */ 9 | 10 | /* Provide console simulation for firebug-less environments */ 11 | /* 12 | if (!("console" in window) || !("firebug" in console)) { 13 | var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", 14 | "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; 15 | 16 | window.console = {}; 17 | for (var i = 0; i < names.length; ++i) 18 | window.console[names[i]] = function() {}; 19 | }; 20 | */ 21 | 22 | 23 | function showSource( e ) { 24 | var target = e.target; 25 | while (!target.classList.contains('method-detail')) { 26 | target = target.parentNode; 27 | } 28 | if (typeof target !== "undefined" && target !== null) { 29 | target = target.querySelector('.method-source-code'); 30 | } 31 | if (typeof target !== "undefined" && target !== null) { 32 | target.classList.toggle('active-menu') 33 | } 34 | }; 35 | 36 | function hookSourceViews() { 37 | document.querySelectorAll('.method-heading').forEach(function (codeObject) { 38 | codeObject.addEventListener('click', showSource); 39 | }); 40 | }; 41 | 42 | function hookSearch() { 43 | var input = document.querySelector('#search-field'); 44 | var result = document.querySelector('#search-results'); 45 | result.classList.remove("initially-hidden"); 46 | 47 | var search_section = document.querySelector('#search-section'); 48 | search_section.classList.remove("initially-hidden"); 49 | 50 | var search = new Search(search_data, input, result); 51 | 52 | search.renderItem = function(result) { 53 | var li = document.createElement('li'); 54 | var html = ''; 55 | 56 | // TODO add relative path to