rubyXL 3.4.34 → 3.4.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (452) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +15 -4
  3. data/Gemfile +2 -2
  4. data/README.rdoc +16 -4
  5. data/VERSION +1 -1
  6. data/lib/rubyXL/convenience_methods/cell.rb +2 -2
  7. data/lib/rubyXL/convenience_methods/workbook.rb +2 -2
  8. data/lib/rubyXL/objects/border.rb +6 -1
  9. data/lib/rubyXL/objects/reference.rb +42 -17
  10. data/lib/rubyXL/objects/root.rb +1 -1
  11. data/lib/rubyXL/objects/sheet_data.rb +5 -0
  12. data/lib/rubyXL/objects/workbook.rb +7 -0
  13. data/rdoc/README_rdoc.html +532 -196
  14. data/rdoc/RubyXL/AExtension.html +603 -87
  15. data/rdoc/RubyXL/AExtensionStorageArea.html +493 -47
  16. data/rdoc/RubyXL/ActiveX.html +573 -75
  17. data/rdoc/RubyXL/ActiveXBinary.html +503 -49
  18. data/rdoc/RubyXL/AdjustHandleList.html +487 -47
  19. data/rdoc/RubyXL/Alignment.html +487 -47
  20. data/rdoc/RubyXL/AlternateContent.html +493 -47
  21. data/rdoc/RubyXL/AlternateUrls.html +487 -47
  22. data/rdoc/RubyXL/Authors.html +487 -47
  23. data/rdoc/RubyXL/AutoFilter.html +487 -47
  24. data/rdoc/RubyXL/AutoFilterColumn.html +487 -47
  25. data/rdoc/RubyXL/BinaryImageFile.html +510 -50
  26. data/rdoc/RubyXL/BodyProperties.html +487 -47
  27. data/rdoc/RubyXL/BooleanNode.html +493 -47
  28. data/rdoc/RubyXL/BooleanValue.html +493 -47
  29. data/rdoc/RubyXL/Border.html +636 -101
  30. data/rdoc/RubyXL/BorderEdge.html +576 -80
  31. data/rdoc/RubyXL/Borders.html +539 -69
  32. data/rdoc/RubyXL/Break.html +487 -47
  33. data/rdoc/RubyXL/BreakList.html +487 -47
  34. data/rdoc/RubyXL/CT_AdjPoint2D.html +487 -47
  35. data/rdoc/RubyXL/CT_AlphaBiLevelEffect.html +487 -47
  36. data/rdoc/RubyXL/CT_AlphaModulateEffect.html +487 -47
  37. data/rdoc/RubyXL/CT_AlphaModulateFixedEffect.html +487 -47
  38. data/rdoc/RubyXL/CT_AlphaOutsetEffect.html +487 -47
  39. data/rdoc/RubyXL/CT_AlphaReplaceEffect.html +487 -47
  40. data/rdoc/RubyXL/CT_Backdrop.html +487 -47
  41. data/rdoc/RubyXL/CT_Bevel.html +487 -47
  42. data/rdoc/RubyXL/CT_BiLevelEffect.html +487 -47
  43. data/rdoc/RubyXL/CT_BlendEffect.html +487 -47
  44. data/rdoc/RubyXL/CT_Blip.html +487 -47
  45. data/rdoc/RubyXL/CT_BlipFillProperties.html +487 -47
  46. data/rdoc/RubyXL/CT_BlurEffect.html +487 -47
  47. data/rdoc/RubyXL/CT_Camera.html +487 -47
  48. data/rdoc/RubyXL/CT_Color.html +487 -47
  49. data/rdoc/RubyXL/CT_ColorChangeEffect.html +487 -47
  50. data/rdoc/RubyXL/CT_ColorMapping.html +487 -47
  51. data/rdoc/RubyXL/CT_ColorScheme.html +487 -47
  52. data/rdoc/RubyXL/CT_ColorSchemeAndMapping.html +487 -47
  53. data/rdoc/RubyXL/CT_ConnectionSite.html +487 -47
  54. data/rdoc/RubyXL/CT_ConnectionSiteList.html +487 -47
  55. data/rdoc/RubyXL/CT_DashStop.html +487 -47
  56. data/rdoc/RubyXL/CT_DashStopList.html +487 -47
  57. data/rdoc/RubyXL/CT_DefaultShapeDefinition.html +487 -47
  58. data/rdoc/RubyXL/CT_DuotoneEffect.html +487 -47
  59. data/rdoc/RubyXL/CT_EffectContainer.html +487 -47
  60. data/rdoc/RubyXL/CT_EffectList.html +487 -47
  61. data/rdoc/RubyXL/CT_EffectReference.html +487 -47
  62. data/rdoc/RubyXL/CT_EffectStyleItem.html +487 -47
  63. data/rdoc/RubyXL/CT_EffectStyleList.html +487 -47
  64. data/rdoc/RubyXL/CT_EmbeddedWAVAudioFile.html +487 -47
  65. data/rdoc/RubyXL/CT_FillEffect.html +487 -47
  66. data/rdoc/RubyXL/CT_FillOverlayEffect.html +487 -47
  67. data/rdoc/RubyXL/CT_FillStyleList.html +487 -47
  68. data/rdoc/RubyXL/CT_FlatText.html +487 -47
  69. data/rdoc/RubyXL/CT_FontCollection.html +487 -47
  70. data/rdoc/RubyXL/CT_FontReference.html +487 -47
  71. data/rdoc/RubyXL/CT_GeomGuideList.html +487 -47
  72. data/rdoc/RubyXL/CT_GlowEffect.html +487 -47
  73. data/rdoc/RubyXL/CT_GradientFillProperties.html +487 -47
  74. data/rdoc/RubyXL/CT_GradientStop.html +487 -47
  75. data/rdoc/RubyXL/CT_GradientStopList.html +487 -47
  76. data/rdoc/RubyXL/CT_HSLEffect.html +487 -47
  77. data/rdoc/RubyXL/CT_HslColor.html +487 -47
  78. data/rdoc/RubyXL/CT_Hyperlink.html +487 -47
  79. data/rdoc/RubyXL/CT_InnerShadowEffect.html +487 -47
  80. data/rdoc/RubyXL/CT_LightRig.html +487 -47
  81. data/rdoc/RubyXL/CT_LineEndProperties.html +487 -47
  82. data/rdoc/RubyXL/CT_LineJoinMiterProperties.html +487 -47
  83. data/rdoc/RubyXL/CT_LineProperties.html +487 -47
  84. data/rdoc/RubyXL/CT_LineStyleList.html +487 -47
  85. data/rdoc/RubyXL/CT_LinearShadeProperties.html +487 -47
  86. data/rdoc/RubyXL/CT_LuminanceEffect.html +487 -47
  87. data/rdoc/RubyXL/CT_ObjectStyleDefaults.html +487 -47
  88. data/rdoc/RubyXL/CT_OuterShadowEffect.html +487 -47
  89. data/rdoc/RubyXL/CT_Path2D.html +487 -47
  90. data/rdoc/RubyXL/CT_Path2DArcTo.html +487 -47
  91. data/rdoc/RubyXL/CT_Path2DCubicBezierTo.html +487 -47
  92. data/rdoc/RubyXL/CT_Path2DList.html +487 -47
  93. data/rdoc/RubyXL/CT_Path2DQuadBezierTo.html +487 -47
  94. data/rdoc/RubyXL/CT_Path2DTo.html +487 -47
  95. data/rdoc/RubyXL/CT_PathShadeProperties.html +487 -47
  96. data/rdoc/RubyXL/CT_PatternFillProperties.html +487 -47
  97. data/rdoc/RubyXL/CT_Point3D.html +487 -47
  98. data/rdoc/RubyXL/CT_PolarAdjustHandle.html +487 -47
  99. data/rdoc/RubyXL/CT_PresetColor.html +487 -47
  100. data/rdoc/RubyXL/CT_PresetLineDashProperties.html +487 -47
  101. data/rdoc/RubyXL/CT_PresetShadowEffect.html +487 -47
  102. data/rdoc/RubyXL/CT_PresetTextShape.html +487 -47
  103. data/rdoc/RubyXL/CT_ReflectionEffect.html +487 -47
  104. data/rdoc/RubyXL/CT_RelativeOffsetEffect.html +487 -47
  105. data/rdoc/RubyXL/CT_RelativeRect.html +487 -47
  106. data/rdoc/RubyXL/CT_SRgbColor.html +487 -47
  107. data/rdoc/RubyXL/CT_ScRgbColor.html +487 -47
  108. data/rdoc/RubyXL/CT_Scene3D.html +487 -47
  109. data/rdoc/RubyXL/CT_SchemeColor.html +487 -47
  110. data/rdoc/RubyXL/CT_Shape3D.html +487 -47
  111. data/rdoc/RubyXL/CT_ShapeStyle.html +487 -47
  112. data/rdoc/RubyXL/CT_SoftEdgesEffect.html +487 -47
  113. data/rdoc/RubyXL/CT_SphereCoords.html +487 -47
  114. data/rdoc/RubyXL/CT_StretchInfoProperties.html +487 -47
  115. data/rdoc/RubyXL/CT_StyleMatrix.html +487 -47
  116. data/rdoc/RubyXL/CT_StyleMatrixReference.html +487 -47
  117. data/rdoc/RubyXL/CT_SupplementalFont.html +487 -47
  118. data/rdoc/RubyXL/CT_SystemColor.html +487 -47
  119. data/rdoc/RubyXL/CT_TextAutonumberBullet.html +487 -47
  120. data/rdoc/RubyXL/CT_TextBlipBullet.html +487 -47
  121. data/rdoc/RubyXL/CT_TextCharBullet.html +487 -47
  122. data/rdoc/RubyXL/CT_TextCharacterProperties.html +487 -47
  123. data/rdoc/RubyXL/CT_TextFont.html +487 -47
  124. data/rdoc/RubyXL/CT_TextListStyle.html +487 -47
  125. data/rdoc/RubyXL/CT_TextNormalAutofit.html +487 -47
  126. data/rdoc/RubyXL/CT_TextParagraphProperties.html +487 -47
  127. data/rdoc/RubyXL/CT_TextSpacing.html +487 -47
  128. data/rdoc/RubyXL/CT_TextTabStop.html +487 -47
  129. data/rdoc/RubyXL/CT_TextTabStopList.html +487 -47
  130. data/rdoc/RubyXL/CT_TileInfoProperties.html +487 -47
  131. data/rdoc/RubyXL/CT_TintEffect.html +487 -47
  132. data/rdoc/RubyXL/CT_Transform2D.html +487 -47
  133. data/rdoc/RubyXL/CT_TransformEffect.html +487 -47
  134. data/rdoc/RubyXL/CT_Vector3D.html +487 -47
  135. data/rdoc/RubyXL/CT_XYAdjustHandle.html +487 -47
  136. data/rdoc/RubyXL/CalculationChain.html +556 -72
  137. data/rdoc/RubyXL/CalculationChainCell.html +487 -47
  138. data/rdoc/RubyXL/CalculationProperties.html +487 -47
  139. data/rdoc/RubyXL/Cell.html +1014 -209
  140. data/rdoc/RubyXL/CellConvenienceMethods.html +1619 -431
  141. data/rdoc/RubyXL/CellExt.html +487 -47
  142. data/rdoc/RubyXL/CellSmartTag.html +487 -47
  143. data/rdoc/RubyXL/CellSmartTagProperty.html +487 -47
  144. data/rdoc/RubyXL/CellSmartTags.html +487 -47
  145. data/rdoc/RubyXL/CellStyle.html +487 -47
  146. data/rdoc/RubyXL/CellStyleXFs.html +539 -69
  147. data/rdoc/RubyXL/CellStyles.html +539 -69
  148. data/rdoc/RubyXL/CellValue.html +539 -69
  149. data/rdoc/RubyXL/CellWatch.html +487 -47
  150. data/rdoc/RubyXL/CellWatches.html +487 -47
  151. data/rdoc/RubyXL/CellXFs.html +539 -69
  152. data/rdoc/RubyXL/ChartColorsFile.html +510 -50
  153. data/rdoc/RubyXL/ChartFile.html +580 -76
  154. data/rdoc/RubyXL/ChartStyleFile.html +510 -50
  155. data/rdoc/RubyXL/ChartUserShapesFile.html +510 -50
  156. data/rdoc/RubyXL/Chartsheet.html +623 -93
  157. data/rdoc/RubyXL/ChartsheetPageSetup.html +487 -47
  158. data/rdoc/RubyXL/ChartsheetProperties.html +487 -47
  159. data/rdoc/RubyXL/ChartsheetProtection.html +487 -47
  160. data/rdoc/RubyXL/ChartsheetView.html +487 -47
  161. data/rdoc/RubyXL/ChartsheetViews.html +487 -47
  162. data/rdoc/RubyXL/Color.html +549 -71
  163. data/rdoc/RubyXL/ColorConvenienceClasses/HlsColor.html +622 -94
  164. data/rdoc/RubyXL/ColorConvenienceClasses/RgbColor.html +666 -106
  165. data/rdoc/RubyXL/ColorConvenienceClasses.html +482 -45
  166. data/rdoc/RubyXL/ColorConvenienceMethods.html +533 -66
  167. data/rdoc/RubyXL/ColorFilter.html +487 -47
  168. data/rdoc/RubyXL/ColorScale.html +487 -47
  169. data/rdoc/RubyXL/ColorSet.html +487 -47
  170. data/rdoc/RubyXL/Colors.html +487 -47
  171. data/rdoc/RubyXL/ColumnRange.html +660 -104
  172. data/rdoc/RubyXL/ColumnRanges.html +636 -100
  173. data/rdoc/RubyXL/Comment.html +487 -47
  174. data/rdoc/RubyXL/CommentList.html +487 -47
  175. data/rdoc/RubyXL/CommentsFile.html +569 -77
  176. data/rdoc/RubyXL/ConditionalFormatValue.html +487 -47
  177. data/rdoc/RubyXL/ConditionalFormatting.html +487 -47
  178. data/rdoc/RubyXL/ConditionalFormattingRule.html +487 -47
  179. data/rdoc/RubyXL/Connection.html +487 -47
  180. data/rdoc/RubyXL/ConnectionTable.html +487 -47
  181. data/rdoc/RubyXL/ConnectionTables.html +487 -47
  182. data/rdoc/RubyXL/ConnectionTextField.html +487 -47
  183. data/rdoc/RubyXL/ConnectionTextFields.html +487 -47
  184. data/rdoc/RubyXL/Connections.html +556 -72
  185. data/rdoc/RubyXL/ContentTypeDefault.html +493 -47
  186. data/rdoc/RubyXL/ContentTypeOverride.html +493 -47
  187. data/rdoc/RubyXL/ContentTypes.html +593 -83
  188. data/rdoc/RubyXL/ControlPropertiesFile.html +510 -50
  189. data/rdoc/RubyXL/CorePropertiesFile.html +816 -158
  190. data/rdoc/RubyXL/CustomColor.html +487 -47
  191. data/rdoc/RubyXL/CustomColorList.html +487 -47
  192. data/rdoc/RubyXL/CustomFilter.html +487 -47
  193. data/rdoc/RubyXL/CustomFilters.html +487 -47
  194. data/rdoc/RubyXL/CustomGeometry.html +487 -47
  195. data/rdoc/RubyXL/CustomProperties.html +487 -47
  196. data/rdoc/RubyXL/CustomPropertiesFile.html +510 -50
  197. data/rdoc/RubyXL/CustomProperty.html +487 -47
  198. data/rdoc/RubyXL/CustomPropertyFile.html +510 -50
  199. data/rdoc/RubyXL/CustomSheetView.html +487 -47
  200. data/rdoc/RubyXL/CustomSheetViews.html +487 -47
  201. data/rdoc/RubyXL/CustomWorkbookView.html +487 -47
  202. data/rdoc/RubyXL/CustomWorkbookViews.html +487 -47
  203. data/rdoc/RubyXL/CustomXMLFile.html +503 -49
  204. data/rdoc/RubyXL/DXF.html +487 -47
  205. data/rdoc/RubyXL/DXFs.html +487 -47
  206. data/rdoc/RubyXL/DataBar.html +487 -47
  207. data/rdoc/RubyXL/DataConsolidate.html +487 -47
  208. data/rdoc/RubyXL/DataConsolidationReference.html +487 -47
  209. data/rdoc/RubyXL/DataConsolidationReferences.html +487 -47
  210. data/rdoc/RubyXL/DataType.html +528 -53
  211. data/rdoc/RubyXL/DataValidation.html +487 -47
  212. data/rdoc/RubyXL/DataValidations.html +487 -47
  213. data/rdoc/RubyXL/DateGroupItem.html +487 -47
  214. data/rdoc/RubyXL/DefinedName.html +487 -47
  215. data/rdoc/RubyXL/DefinedNameExt.html +487 -47
  216. data/rdoc/RubyXL/DefinedNames.html +564 -47
  217. data/rdoc/RubyXL/DefinedNamesExt.html +487 -47
  218. data/rdoc/RubyXL/DocumentPropertiesFile.html +600 -88
  219. data/rdoc/RubyXL/DrawingFile.html +580 -76
  220. data/rdoc/RubyXL/DynamicFilter.html +487 -47
  221. data/rdoc/RubyXL/EmbeddedControl.html +487 -47
  222. data/rdoc/RubyXL/EmbeddedControls.html +487 -47
  223. data/rdoc/RubyXL/Extension.html +487 -47
  224. data/rdoc/RubyXL/ExtensionStorageArea.html +487 -47
  225. data/rdoc/RubyXL/Extents.html +487 -47
  226. data/rdoc/RubyXL/ExternalBook.html +487 -47
  227. data/rdoc/RubyXL/ExternalLinksFile.html +580 -76
  228. data/rdoc/RubyXL/ExternalReference.html +487 -47
  229. data/rdoc/RubyXL/ExternalReferences.html +487 -47
  230. data/rdoc/RubyXL/ExtraColorSchemeList.html +487 -47
  231. data/rdoc/RubyXL/FieldItem.html +487 -47
  232. data/rdoc/RubyXL/FileRecoveryProperties.html +487 -47
  233. data/rdoc/RubyXL/FileSharing.html +487 -47
  234. data/rdoc/RubyXL/FileVersion.html +487 -47
  235. data/rdoc/RubyXL/Fill.html +539 -69
  236. data/rdoc/RubyXL/Fills.html +539 -69
  237. data/rdoc/RubyXL/FilterContainer.html +487 -47
  238. data/rdoc/RubyXL/FloatNode.html +493 -47
  239. data/rdoc/RubyXL/FloatValue.html +493 -47
  240. data/rdoc/RubyXL/Font.html +550 -72
  241. data/rdoc/RubyXL/FontConvenienceMethods.html +924 -197
  242. data/rdoc/RubyXL/FontScheme.html +487 -47
  243. data/rdoc/RubyXL/Fonts.html +539 -69
  244. data/rdoc/RubyXL/Formula.html +487 -47
  245. data/rdoc/RubyXL/FunctionGroup.html +487 -47
  246. data/rdoc/RubyXL/FunctionGroups.html +487 -47
  247. data/rdoc/RubyXL/GenericStorageObject.html +667 -105
  248. data/rdoc/RubyXL/GradientFill.html +487 -47
  249. data/rdoc/RubyXL/HeaderFooterSettings.html +487 -47
  250. data/rdoc/RubyXL/Hyperlink.html +487 -47
  251. data/rdoc/RubyXL/HyperlinkRelFile.html +503 -49
  252. data/rdoc/RubyXL/Hyperlinks.html +487 -47
  253. data/rdoc/RubyXL/IconFilter.html +487 -47
  254. data/rdoc/RubyXL/IconSet.html +487 -47
  255. data/rdoc/RubyXL/IgnoredError.html +487 -47
  256. data/rdoc/RubyXL/IgnoredErrors.html +487 -47
  257. data/rdoc/RubyXL/IndexedColors.html +487 -47
  258. data/rdoc/RubyXL/InputCells.html +487 -47
  259. data/rdoc/RubyXL/IntegerNode.html +493 -47
  260. data/rdoc/RubyXL/IntegerValue.html +493 -47
  261. data/rdoc/RubyXL/LegacyCell.html +533 -66
  262. data/rdoc/RubyXL/LegacyWorksheet.html +707 -119
  263. data/rdoc/RubyXL/MRUColors.html +487 -47
  264. data/rdoc/RubyXL/MacrosFile.html +510 -50
  265. data/rdoc/RubyXL/MergedCell.html +487 -47
  266. data/rdoc/RubyXL/MergedCells.html +487 -47
  267. data/rdoc/RubyXL/NumFmt.html +487 -47
  268. data/rdoc/RubyXL/NumberFormat.html +539 -69
  269. data/rdoc/RubyXL/NumberFormats.html +550 -72
  270. data/rdoc/RubyXL/OLEObject.html +487 -47
  271. data/rdoc/RubyXL/OLEObjectFile.html +510 -50
  272. data/rdoc/RubyXL/OLEObjects.html +487 -47
  273. data/rdoc/RubyXL/OLESize.html +487 -47
  274. data/rdoc/RubyXL/OOXMLContainerObject.html +749 -142
  275. data/rdoc/RubyXL/OOXMLIgnored.html +596 -82
  276. data/rdoc/RubyXL/OOXMLObject.html +506 -52
  277. data/rdoc/RubyXL/OOXMLObjectClassMethods.html +723 -150
  278. data/rdoc/RubyXL/OOXMLObjectInstanceMethods.html +819 -169
  279. data/rdoc/RubyXL/OOXMLRelationshipsFile.html +883 -179
  280. data/rdoc/RubyXL/OOXMLTopLevelObject.html +730 -136
  281. data/rdoc/RubyXL/OdbcOleDbProperties.html +487 -47
  282. data/rdoc/RubyXL/Offset.html +487 -47
  283. data/rdoc/RubyXL/OlapProperties.html +487 -47
  284. data/rdoc/RubyXL/OleItem.html +487 -47
  285. data/rdoc/RubyXL/OleItems.html +487 -47
  286. data/rdoc/RubyXL/OleLink.html +487 -47
  287. data/rdoc/RubyXL/OutlineProperties.html +487 -47
  288. data/rdoc/RubyXL/PageMargins.html +487 -47
  289. data/rdoc/RubyXL/PageSetup.html +487 -47
  290. data/rdoc/RubyXL/PageSetupProperties.html +487 -47
  291. data/rdoc/RubyXL/Pane.html +487 -47
  292. data/rdoc/RubyXL/Parser.html +576 -80
  293. data/rdoc/RubyXL/PatternFill.html +487 -47
  294. data/rdoc/RubyXL/PersonMetadata.html +510 -50
  295. data/rdoc/RubyXL/PhoneticProperties.html +487 -47
  296. data/rdoc/RubyXL/PhoneticRun.html +487 -47
  297. data/rdoc/RubyXL/PivotArea.html +487 -47
  298. data/rdoc/RubyXL/PivotCache.html +487 -47
  299. data/rdoc/RubyXL/PivotCacheDefinitionFile.html +529 -55
  300. data/rdoc/RubyXL/PivotCacheRecordsFile.html +510 -50
  301. data/rdoc/RubyXL/PivotCaches.html +487 -47
  302. data/rdoc/RubyXL/PivotReference.html +487 -47
  303. data/rdoc/RubyXL/PivotReferences.html +487 -47
  304. data/rdoc/RubyXL/PivotTableFile.html +529 -55
  305. data/rdoc/RubyXL/PivotTableSelection.html +487 -47
  306. data/rdoc/RubyXL/PresetGeometry.html +487 -47
  307. data/rdoc/RubyXL/PrintOptions.html +487 -47
  308. data/rdoc/RubyXL/PrinterSettingsFile.html +510 -50
  309. data/rdoc/RubyXL/ProtectedRange.html +487 -47
  310. data/rdoc/RubyXL/ProtectedRanges.html +487 -47
  311. data/rdoc/RubyXL/Protection.html +487 -47
  312. data/rdoc/RubyXL/QueryParameter.html +487 -47
  313. data/rdoc/RubyXL/QueryParameters.html +487 -47
  314. data/rdoc/RubyXL/QueryTable.html +574 -76
  315. data/rdoc/RubyXL/QueryTableDeletedField.html +487 -47
  316. data/rdoc/RubyXL/QueryTableDeletedFields.html +487 -47
  317. data/rdoc/RubyXL/QueryTableField.html +487 -47
  318. data/rdoc/RubyXL/QueryTableFields.html +487 -47
  319. data/rdoc/RubyXL/QueryTableRefresh.html +487 -47
  320. data/rdoc/RubyXL/RID.html +493 -47
  321. data/rdoc/RubyXL/RawOOXML.html +603 -87
  322. data/rdoc/RubyXL/Reference.html +1085 -219
  323. data/rdoc/RubyXL/Relationship.html +493 -47
  324. data/rdoc/RubyXL/RelationshipSupport/ClassMehods.html +539 -66
  325. data/rdoc/RubyXL/RelationshipSupport.html +739 -132
  326. data/rdoc/RubyXL/RevisionPointer.html +487 -47
  327. data/rdoc/RubyXL/RichText.html +539 -69
  328. data/rdoc/RubyXL/RichTextRun.html +539 -69
  329. data/rdoc/RubyXL/Row.html +803 -157
  330. data/rdoc/RubyXL/RowExt.html +487 -47
  331. data/rdoc/RubyXL/RunProperties.html +487 -47
  332. data/rdoc/RubyXL/Scenario.html +487 -47
  333. data/rdoc/RubyXL/Scenarios.html +487 -47
  334. data/rdoc/RubyXL/Selection.html +539 -69
  335. data/rdoc/RubyXL/ShapeGuide.html +487 -47
  336. data/rdoc/RubyXL/ShapeTextRectangle.html +487 -47
  337. data/rdoc/RubyXL/SharedStringsTable.html +767 -143
  338. data/rdoc/RubyXL/Sheet.html +487 -47
  339. data/rdoc/RubyXL/SheetCalculationProperties.html +487 -47
  340. data/rdoc/RubyXL/SheetData.html +570 -80
  341. data/rdoc/RubyXL/SheetDataExt.html +487 -47
  342. data/rdoc/RubyXL/SheetDataSet.html +487 -47
  343. data/rdoc/RubyXL/SheetMetadata.html +510 -50
  344. data/rdoc/RubyXL/SheetName.html +487 -47
  345. data/rdoc/RubyXL/SheetNames.html +487 -47
  346. data/rdoc/RubyXL/Sheets.html +487 -47
  347. data/rdoc/RubyXL/SlicerCacheFile.html +510 -50
  348. data/rdoc/RubyXL/SlicerFile.html +510 -50
  349. data/rdoc/RubyXL/SmartTagProperties.html +487 -47
  350. data/rdoc/RubyXL/SmartTagType.html +487 -47
  351. data/rdoc/RubyXL/SmartTagTypes.html +487 -47
  352. data/rdoc/RubyXL/SmartTags.html +487 -47
  353. data/rdoc/RubyXL/SortCondition.html +487 -47
  354. data/rdoc/RubyXL/SortState.html +487 -47
  355. data/rdoc/RubyXL/Sqref.html +596 -82
  356. data/rdoc/RubyXL/Stop.html +487 -47
  357. data/rdoc/RubyXL/StringNode.html +493 -47
  358. data/rdoc/RubyXL/StringNodeW3C.html +596 -82
  359. data/rdoc/RubyXL/StringValue.html +493 -47
  360. data/rdoc/RubyXL/Stylesheet.html +702 -119
  361. data/rdoc/RubyXL/TableFile.html +510 -50
  362. data/rdoc/RubyXL/TableParts.html +493 -47
  363. data/rdoc/RubyXL/TableStyle.html +487 -47
  364. data/rdoc/RubyXL/TableStyles.html +487 -47
  365. data/rdoc/RubyXL/Text.html +588 -84
  366. data/rdoc/RubyXL/TextImportSettings.html +487 -47
  367. data/rdoc/RubyXL/Theme.html +633 -91
  368. data/rdoc/RubyXL/ThemeElements.html +487 -47
  369. data/rdoc/RubyXL/ThumbnailFile.html +510 -50
  370. data/rdoc/RubyXL/Top10.html +487 -47
  371. data/rdoc/RubyXL/VMLDrawingFile.html +530 -56
  372. data/rdoc/RubyXL/Variant.html +487 -47
  373. data/rdoc/RubyXL/Vector.html +539 -69
  374. data/rdoc/RubyXL/VectorValue.html +493 -47
  375. data/rdoc/RubyXL/VisualProperties.html +487 -47
  376. data/rdoc/RubyXL/WebPublishObject.html +487 -47
  377. data/rdoc/RubyXL/WebPublishObjects.html +487 -47
  378. data/rdoc/RubyXL/WebPublishingItem.html +487 -47
  379. data/rdoc/RubyXL/WebPublishingItems.html +487 -47
  380. data/rdoc/RubyXL/WebPublishingProperties.html +487 -47
  381. data/rdoc/RubyXL/WebQueryProperties.html +487 -47
  382. data/rdoc/RubyXL/Workbook.html +1514 -377
  383. data/rdoc/RubyXL/WorkbookConvenienceMethods.html +1046 -239
  384. data/rdoc/RubyXL/WorkbookProperties.html +487 -47
  385. data/rdoc/RubyXL/WorkbookProtection.html +487 -47
  386. data/rdoc/RubyXL/WorkbookRoot.html +736 -128
  387. data/rdoc/RubyXL/WorkbookView.html +487 -47
  388. data/rdoc/RubyXL/WorkbookViews.html +487 -47
  389. data/rdoc/RubyXL/Worksheet.html +833 -161
  390. data/rdoc/RubyXL/WorksheetConvenienceMethods.html +2628 -757
  391. data/rdoc/RubyXL/WorksheetDimensions.html +487 -47
  392. data/rdoc/RubyXL/WorksheetFormatProperties.html +493 -47
  393. data/rdoc/RubyXL/WorksheetProperties.html +487 -47
  394. data/rdoc/RubyXL/WorksheetProtection.html +487 -47
  395. data/rdoc/RubyXL/WorksheetView.html +487 -47
  396. data/rdoc/RubyXL/WorksheetViews.html +487 -47
  397. data/rdoc/RubyXL/XF.html +487 -47
  398. data/rdoc/RubyXL.html +1199 -164
  399. data/rdoc/created.rid +31 -31
  400. data/rdoc/css/rdoc.css +1652 -384
  401. data/rdoc/index.html +418 -440
  402. data/rdoc/js/aliki.js +511 -0
  403. data/rdoc/js/bash_highlighter.js +167 -0
  404. data/rdoc/js/c_highlighter.js +299 -0
  405. data/rdoc/js/{search.js → search_controller.js} +27 -8
  406. data/rdoc/js/search_data.js +1 -0
  407. data/rdoc/js/{navigation.js → search_navigation.js} +2 -2
  408. data/rdoc/js/search_ranker.js +239 -0
  409. data/rdoc/js/theme-toggle.js +112 -0
  410. data/rubyXL.gemspec +12 -45
  411. data/spec/lib/cell_spec.rb +1 -1
  412. data/spec/lib/reference_spec.rb +36 -3
  413. metadata +14 -47
  414. data/rdoc/css/fonts.css +0 -167
  415. data/rdoc/fonts/Lato-Light.ttf +0 -0
  416. data/rdoc/fonts/Lato-LightItalic.ttf +0 -0
  417. data/rdoc/fonts/Lato-Regular.ttf +0 -0
  418. data/rdoc/fonts/Lato-RegularItalic.ttf +0 -0
  419. data/rdoc/fonts/SourceCodePro-Bold.ttf +0 -0
  420. data/rdoc/fonts/SourceCodePro-Regular.ttf +0 -0
  421. data/rdoc/images/add.png +0 -0
  422. data/rdoc/images/arrow_up.png +0 -0
  423. data/rdoc/images/brick.png +0 -0
  424. data/rdoc/images/brick_link.png +0 -0
  425. data/rdoc/images/bug.png +0 -0
  426. data/rdoc/images/bullet_black.png +0 -0
  427. data/rdoc/images/bullet_toggle_minus.png +0 -0
  428. data/rdoc/images/bullet_toggle_plus.png +0 -0
  429. data/rdoc/images/date.png +0 -0
  430. data/rdoc/images/delete.png +0 -0
  431. data/rdoc/images/find.png +0 -0
  432. data/rdoc/images/loadingAnimation.gif +0 -0
  433. data/rdoc/images/macFFBgHack.png +0 -0
  434. data/rdoc/images/package.png +0 -0
  435. data/rdoc/images/page_green.png +0 -0
  436. data/rdoc/images/page_white_text.png +0 -0
  437. data/rdoc/images/page_white_width.png +0 -0
  438. data/rdoc/images/plugin.png +0 -0
  439. data/rdoc/images/ruby.png +0 -0
  440. data/rdoc/images/tag_blue.png +0 -0
  441. data/rdoc/images/tag_green.png +0 -0
  442. data/rdoc/images/transparent.png +0 -0
  443. data/rdoc/images/wrench.png +0 -0
  444. data/rdoc/images/wrench_orange.png +0 -0
  445. data/rdoc/images/zoom.png +0 -0
  446. data/rdoc/js/darkfish.js +0 -97
  447. data/rdoc/js/navigation.js.gz +0 -0
  448. data/rdoc/js/search_index.js +0 -1
  449. data/rdoc/js/search_index.js.gz +0 -0
  450. data/rdoc/js/searcher.js +0 -229
  451. data/rdoc/js/searcher.js.gz +0 -0
  452. data/rdoc/table_of_contents.html +0 -3026
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7cb660b3e6110d1d10406c1081cdfee6b3b129bd41c5d3cbb5aaf6a2413bd325
4
- data.tar.gz: b049b63628e8c146f65c9afebcc3847b99cdf21b82107074f20da731cb579e7c
3
+ metadata.gz: 653d773015a0aca3439878d0e16a4e91517cf07cf3c3a0ff62d72c56ebd307b6
4
+ data.tar.gz: 7c58595e70a5be7e8ae8f9ecb5ced1eea4721a78f62653bd494b82ef5957d19f
5
5
  SHA512:
6
- metadata.gz: da197a8e9cfedd42890c8edcc53cbd2d21c91a2c0ce81dec68633b899f87c64a6a2bd5e1dc516cf4999bfe0089c376b94fca6d4a3e106a5bfe6855fd11c1d290
7
- data.tar.gz: 801162af8071bfe1c9fb028d1b4ce6a9a756f3bd9d40baccbc5908cf3884b3f0c61b6c29098957e81fe758d3588824b2fcf167282814c63059b78b9af15022c6
6
+ metadata.gz: 216a635924307eb9180227ecda2b3817786985b40987826a74f031e7b99a4dba045d9fb97e6e5fedb5ffb87544c75852d82300f2a652627ecae7ad5f224f0802
7
+ data.tar.gz: f7ec19093979640748284eda348c6bf49de9543003ef63e6454fc8e04c4fdcf06ef8a52ce45c09d8dbb60f7b00435884351412f98e83de7c1538829842756fc7
data/.circleci/config.yml CHANGED
@@ -2,12 +2,15 @@
2
2
  #
3
3
  # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4
4
  #
5
- version: 2
5
+ version: 2.1
6
+
6
7
  jobs:
7
8
  build:
9
+ parameters:
10
+ ruby-version:
11
+ type: string
8
12
  docker:
9
- # specify the version you desire here
10
- - image: cimg/ruby:3.1.4
13
+ - image: cimg/ruby:<< parameters.ruby-version >>
11
14
 
12
15
  # Specify service dependencies here if necessary
13
16
  # CircleCI maintains a library of pre-built images
@@ -30,7 +33,7 @@ jobs:
30
33
  name: install dependencies
31
34
  command: |
32
35
  gem install bundler
33
- bundle install --jobs=4 --retry=3 --path vendor/bundle
36
+ bundle install --jobs=4 --retry=3
34
37
 
35
38
  #- save_cache:
36
39
  # paths:
@@ -58,3 +61,11 @@ jobs:
58
61
  - store_artifacts:
59
62
  path: /tmp/test-results
60
63
  destination: test-results
64
+
65
+ workflows:
66
+ test:
67
+ jobs:
68
+ - build:
69
+ matrix:
70
+ parameters:
71
+ ruby-version: ["3.0", "3.1", "3.2", "3.3", "3.4", "4.0"]
data/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
- source 'http://rubygems.org'
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Dependencies required to run this gem.
4
4
  gem 'nokogiri', '>= 1.10.8'
5
- gem "rubyzip", "~> 2.4", require: "zip" # Locking because #473
5
+ gem 'rubyzip', '>= 3.2.2', require: 'zip'
6
6
 
7
7
  # Development dependencies.
8
8
  group :development, :test do
data/README.rdoc CHANGED
@@ -132,13 +132,25 @@ Please note: these methods are being phased out in favor of the OOXML object mod
132
132
  worksheet.change_column_fill(0, '0ba53d') # Sets first column to have fill #0ba53d
133
133
 
134
134
  ==== Changing Borders
135
+ ===== Border Styles
135
136
  # Possible weights: hairline, thin, medium, thick
136
137
  # Possible "directions": top, bottom, left, right, diagonal
137
- worksheet.sheet_data[0][0].change_border(:top, 'thin') # Sets A1 to have a top, thin border
138
+ cell = worksheet.add_cell(1, 1, 'B2')
139
+ cell.change_border(:top, 'thin') # Sets the cell to have a top, thin border
140
+ # Note that with diagonals, you have to specify which one of the diagonals (or both) you need.
141
+ cell.change_border( :diagonal, 'thick', [ :diagonal_down ]) # Sets A1 to have a thin diagonal going from top left to bottom right
142
+ # You can turn on both diagonals, but then they both will share the same style and color:
143
+ cell.change_border( :diagonal, 'thick', [ :diagonal_down, :diagonal_up ])
144
+
145
+ ===== Border Colors
146
+ # Make sure you set the border style first so there's something to color.
147
+ cell.change_border_color(:top, '0ba53d') # Sets top border color to green
148
+ cell.change_border_color(:diagonal, 'dd0000') # Sets diaginal border color to red
149
+
150
+ ===== Changing whole row or column
151
+
138
152
  worksheet.change_row_border(0, :left, 'hairline') # Sets first row to have a left, hairline border
139
153
  worksheet.change_column_border(0, :diagonal, 'medium') # Sets first column to have diagonal, medium border
140
-
141
- # Set the border style first so there's something to color.
142
154
  worksheet.change_row_border_color(0, :top, '0ba53d') # Sets first row to have a green top border
143
155
  worksheet.change_column_border_color(0, :top, '0ba53d') # Sets first column to have a green top border
144
156
 
@@ -265,5 +277,5 @@ Take a look at the files in spec/lib/ for rspecs on most methods
265
277
 
266
278
  == Copyright
267
279
 
268
- Copyright (c) 2011 Vivek Bhagwat, 2013-2022 Wesha.
280
+ Copyright (c) 2011 Vivek Bhagwat, 2013-2026 Wesha.
269
281
  See LICENSE.txt for further details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.4.34
1
+ 3.4.38
@@ -68,9 +68,9 @@ module RubyXL
68
68
  self.style_index = workbook.modify_alignment(self.style_index) { |a| a.indent = indent }
69
69
  end
70
70
 
71
- def change_border(direction, weight)
71
+ def change_border(direction, weight, diagonals = nil)
72
72
  validate_worksheet
73
- self.style_index = workbook.modify_border(self.style_index, direction, weight)
73
+ self.style_index = workbook.modify_border(self.style_index, direction, weight, diagonals)
74
74
  end
75
75
 
76
76
  def change_border_color(direction, color)
@@ -72,14 +72,14 @@ module RubyXL
72
72
  register_new_xf(register_new_fill(new_fill, xf))
73
73
  end
74
74
 
75
- def modify_border(style_index, direction, weight)
75
+ def modify_border(style_index, direction, weight, diagonals = nil)
76
76
  xf = cell_xfs[style_index || 0].dup
77
77
  new_border = borders[xf.border_id || 0].dup
78
78
 
79
79
  edge = new_border.send(direction)
80
80
  new_border.send("#{direction}=", edge.dup) if edge
81
81
 
82
- new_border.set_edge_style(direction, weight)
82
+ new_border.set_edge_style(direction, weight, diagonals)
83
83
 
84
84
  xf.border_id = borders.find_index { |x| x == new_border } # Reuse existing border, if it exists
85
85
  xf.border_id ||= borders.size # If this border has never existed before, add it to collection.
@@ -34,13 +34,18 @@ module RubyXL
34
34
  edge && edge.style
35
35
  end
36
36
 
37
- def set_edge_style(direction, style)
37
+ def set_edge_style(direction, style, diagonals = nil)
38
38
  edge = self.send(direction)
39
39
  if edge
40
40
  edge.style = style
41
41
  else
42
42
  self.send("#{direction}=", RubyXL::BorderEdge.new(:style => style))
43
43
  end
44
+
45
+ if diagonals then
46
+ self.diagonal_up = true if diagonals.index(:diagonal_up)
47
+ self.diagonal_down = true if diagonals.index(:diagonal_down)
48
+ end
44
49
  end
45
50
 
46
51
  def get_edge_color(direction)
@@ -3,7 +3,8 @@ module RubyXL
3
3
  ROW_MAX = 1024 * 1024
4
4
  COL_MAX = 16393
5
5
 
6
- attr_reader :row_range, :col_range
6
+ attr_reader :row_range, :col_range, :sheet_name
7
+ attr_reader :row_from_absolute, :row_to_absolute, :col_from_absolute, :col_to_absolute
7
8
 
8
9
  # RubyXL::Reference.new(row, col)
9
10
  # RubyXL::Reference.new(row_from, row_to, col_from, col_to)
@@ -11,6 +12,7 @@ module RubyXL
11
12
  # RubyXL::Reference.new(row_from:, row_to:, col_from:, col_to:)
12
13
  def initialize(*params)
13
14
  row_from = row_to = col_from = col_to = nil
15
+ @row_from_absolute = @row_to_absolute = @col_from_absolute = @col_to_absolute = false
14
16
 
15
17
  case params.size
16
18
  when 4 then row_from, row_to, col_from, col_to = params
@@ -20,9 +22,16 @@ module RubyXL
20
22
  when Hash then
21
23
  row_from, row_to, col_from, col_to = params.first.fetch_values(:row_from, :row_to, :col_from, :col_to)
22
24
  when String then
23
- from, to = params[0].split(':')
24
- row_from, col_from = self.class.ref2ind(from)
25
- row_to, col_to = self.class.ref2ind(to) unless to.nil?
25
+ str = params.first
26
+ match_data = str.match(/^('(?<sheet_name1>[^']+)'|(?<sheet_name2>[^']+))!/)
27
+ if match_data then
28
+ @sheet_name = match_data['sheet_name1'] || match_data['sheet_name2']
29
+ str = str[match_data[0].size..-1]
30
+ end
31
+
32
+ from, to = str.split(':')
33
+ row_from, col_from, @row_from_absolute, @col_from_absolute = self.class.ref2ind(from)
34
+ row_to, col_to, @row_to_absolute, @col_to_absolute = self.class.ref2ind(to) unless to.nil?
26
35
  else
27
36
  raise ArgumentError.new("invalid value for #{self.class}: #{params[0].inspect}") unless params[0].is_a?(String)
28
37
  end
@@ -57,7 +66,8 @@ module RubyXL
57
66
  end
58
67
 
59
68
  def ==(other)
60
- !other.nil? && (@row_range == other.row_range) && (@col_range == other.col_range)
69
+ !other.nil? && (@sheet_name == other.sheet_name) &&
70
+ (@row_range == other.row_range) && (@col_range == other.col_range)
61
71
  end
62
72
 
63
73
  def cover?(other)
@@ -68,42 +78,57 @@ module RubyXL
68
78
  end
69
79
 
70
80
  def to_s
81
+ result = +''
82
+
83
+ if @sheet_name then
84
+ if @sheet_name.index(' ') then
85
+ result << "'#{@sheet_name}'"
86
+ else
87
+ result << @sheet_name
88
+ end
89
+ result << '!'
90
+ end
91
+
71
92
  if single_cell? then
72
- self.class.ind2ref(@row_range.begin, @col_range.begin)
93
+ result << self.class.ind2ref(@row_range.begin, @col_range.begin, @row_from_absolute, @col_from_absolute)
73
94
  else
74
- self.class.ind2ref(@row_range.begin, @col_range.begin) + ':' +
75
- self.class.ind2ref(@row_range.end, @col_range.end)
95
+ result << self.class.ind2ref(@row_range.begin, @col_range.begin, @row_from_absolute, @col_from_absolute)
96
+ result << ':'
97
+ result << self.class.ind2ref(@row_range.end, @col_range.end, @row_to_absolute, @col_to_absolute)
76
98
  end
77
99
  end
78
100
 
79
101
  def inspect
80
102
  if single_cell? then
81
- "#<#{self.class} @row=#{@row_range.begin} @col=#{@col_range.begin}>"
103
+ "#<#{self.class} @sheet_name=#{@sheet_name} @row=#{@row_range.begin} @col=#{@col_range.begin}>"
82
104
  else
83
- "#<#{self.class} @row_range=#{@row_range} @col_range=#{@col_range}>"
105
+ "#<#{self.class} @sheet_name=#{@sheet_name} @row_range=#{@row_range} @col_range=#{@col_range}>"
84
106
  end
85
107
  end
86
108
 
87
109
  # Converts +row+ and +col+ zero-based indices to Excel-style cell reference
88
110
  # <0> A...Z, AA...AZ, BA... ...ZZ, AAA... ...AZZ, BAA... ...XFD <16383>
89
- def self.ind2ref(row = 0, col = 0)
90
- str = ''
111
+ def self.ind2ref(row = 0, col = 0, row_abs = false, col_abs = false)
112
+ col_ref = ''
91
113
 
92
114
  loop do
93
115
  x = col % 26
94
- str = ('A'.ord + x).chr + str
116
+ col_ref = ('A'.ord + x).chr + col_ref
95
117
  col = (col / 26).floor - 1
96
118
  break if col < 0
97
119
  end
98
120
 
99
- str += (row + 1).to_s
121
+ "#{col_abs ? '$' : ''}#{col_ref}#{row_abs ? '$' : ''}#{row + 1}"
100
122
  end
101
123
 
102
124
  # Converts Excel-style cell reference to +row+ and +col+ zero-based indices.
103
125
  def self.ref2ind(str)
104
- return [ -1, -1 ] unless str =~ /\A([A-Z]+)(\d+)\Z/
105
- [ Regexp.last_match(2).to_i - 1,
106
- Regexp.last_match(1).each_byte.inject(0) { |col, chr| (col * 26) + (chr - 64) } - 1 ]
126
+ matchdata = str.match(/\A(?<cabs>\$?)(?<col>[A-Z]+)(?<rabs>\$?)(?<row>\d+)\Z/)
127
+ return [ -1, -1 ] unless matchdata
128
+ [ matchdata['row'].to_i - 1,
129
+ matchdata['col'].each_byte.inject(0) { |col, chr| (col * 26) + (chr - 64) } - 1,
130
+ !matchdata['rabs'].empty?,
131
+ !matchdata['cabs'].empty? ]
107
132
  end
108
133
  end
109
134
 
@@ -33,7 +33,7 @@ module RubyXL
33
33
 
34
34
  # Write <tt>.xlsx</tt> to a stream (useful for sending over HTTP)
35
35
  def stream
36
- stream = Zip::OutputStream.write_buffer { |zipstream|
36
+ stream = Zip::OutputStream.write_buffer(suppress_extra_fields: true) { |zipstream|
37
37
  self.rels_hash = {}
38
38
  self.relationship_container.owner = self
39
39
  collect_related_objects.compact.each { |obj|
@@ -111,6 +111,7 @@ module RubyXL
111
111
  when RubyXL::DataType::INLINE_STRING then is.to_s
112
112
  when RubyXL::DataType::RAW_STRING then raw_value
113
113
  when RubyXL::DataType::DATE then raw_value && DateTime.parse(raw_value)
114
+ when RubyXL::DataType::ERROR then nil
114
115
  else
115
116
  if is then is.to_s
116
117
  elsif is_date? then workbook.num_to_date(r.to_f)
@@ -123,6 +124,10 @@ module RubyXL
123
124
  end
124
125
  end
125
126
 
127
+ def error?
128
+ datatype == RubyXL::DataType::ERROR
129
+ end
130
+
126
131
  def inspect
127
132
  str = "#<#{self.class}(#{row},#{column}): #{raw_value.inspect}"
128
133
  str << " =#{self.formula.expression}" if self.formula
@@ -146,6 +146,13 @@ module RubyXL
146
146
  class DefinedNames < OOXMLContainerObject
147
147
  define_child_node(RubyXL::DefinedName, :collection => true)
148
148
  define_element_name 'definedNames'
149
+
150
+ def [](key)
151
+ case key
152
+ when Integer then super
153
+ when String then self.find { |n| n.name.eql?(key) }
154
+ end
155
+ end
149
156
  end
150
157
 
151
158
  # http://www.datypic.com/sc/ooxml/e-ssml_pivotCache-1.html