ooxml_parser 0.6.0 → 0.7.0
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.
- checksums.yaml +4 -4
- data/lib/ooxml_parser.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart.rb +6 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart/series.rb +2 -2
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/chart/chart/series/series_text.rb +0 -2
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/docx_drawing_distance_from_text.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_coordinates.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/drawing_properties/ooxml_size.rb +4 -1
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_blip/file_reference.rb +4 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/picture/docx_picture.rb +0 -2
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/docx_shape/ooxml_text_box.rb +1 -3
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/color/docx_color_scheme.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/custom_geometry/docx_custom_geometry/docx_shape_line_path/docx_shape_line_element.rb +0 -2
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_line.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/drawing/graphic/shape/shape_properties/docx_shape_properties.rb +1 -3
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/old_docx_picture.rb +1 -3
- data/lib/ooxml_parser/common_parser/common_data/alternate_content/picture/shape/old_docx_shape_properties.rb +1 -3
- data/lib/ooxml_parser/common_parser/common_data/borders_properties.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/color.rb +36 -4
- data/lib/ooxml_parser/common_parser/common_data/color/ooxml_color.rb +5 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/hsl_color.rb +11 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/scheme_color.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/colors/theme_colors.rb +4 -0
- data/lib/ooxml_parser/common_parser/common_data/content_types.rb +2 -0
- data/lib/ooxml_parser/common_parser/common_data/content_types/content_type_default.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/content_types/content_type_override.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/coordinates.rb +7 -0
- data/lib/ooxml_parser/common_parser/common_data/ooxml_document_object.rb +24 -2
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragraph_run/run_properties.rb +0 -8
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/numbering_properties.rb +2 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/paragraph_borders.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/paragraph/paragrpah_properties/spacing.rb +16 -13
- data/lib/ooxml_parser/common_parser/common_data/table.rb +2 -0
- data/lib/ooxml_parser/common_parser/common_data/table/margins/paragraph_margins.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/table/margins/table_margins.rb +7 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_position.rb +1 -0
- data/lib/ooxml_parser/common_parser/common_data/table/properties/table_style_properties/table_style_properties_helper.rb +4 -4
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/cell_properties.rb +4 -7
- data/lib/ooxml_parser/common_parser/common_data/table/row/cell/properties/borders.rb +6 -0
- data/lib/ooxml_parser/common_parser/common_data/table/table_grid.rb +3 -0
- data/lib/ooxml_parser/common_parser/common_data/underline.rb +4 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure.rb +27 -3
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/comments/comment.rb +3 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/document_style.rb +2 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph.rb +22 -1
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/bookmark_end.rb +1 -1
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/comment_range_start.rb +1 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_formula/pre_sub_superscript.rb +3 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run.rb +13 -3
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/docx_paragraph_run_helpers.rb +4 -1
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/docx_paragraph_run/shape.rb +0 -2
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/frame_properties.rb +3 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/docx_paragraph/indents.rb +2 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/header_footer.rb +0 -2
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/numbering.rb +5 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/note.rb +3 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/page_properties/page_size.rb +1 -0
- data/lib/ooxml_parser/docx_parser/docx_data/document_structure/styles.rb +2 -0
- data/lib/ooxml_parser/docx_parser/docx_parser.rb +3 -0
- data/lib/ooxml_parser/name.rb +1 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation.rb +2 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme.rb +3 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/presentation_theme/theme_color.rb +3 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide.rb +3 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide/timing/time_node.rb +3 -0
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/slide_helper.rb +15 -1
- data/lib/ooxml_parser/pptx_parser/pptx_data/presentation/slide/transition/transition.rb +3 -0
- data/lib/ooxml_parser/pptx_parser/pptx_parser.rb +3 -0
- data/lib/ooxml_parser/version.rb +2 -1
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook.rb +21 -2
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/chartsheet.rb +3 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache.rb +41 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition.rb +37 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source.rb +33 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source/worksheet_source.rb +26 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet.rb +2 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/cell_xfs/xf.rb +5 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fills/fill.rb +2 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet/fonts/font.rb +3 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet.rb +5 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/excel_comments.rb +4 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_column_properties.rb +4 -0
- data/lib/ooxml_parser/xlsx_parser/xlsx_parser.rb +3 -0
- metadata +64 -4
|
@@ -30,6 +30,9 @@ module OoxmlParser
|
|
|
30
30
|
self
|
|
31
31
|
end
|
|
32
32
|
|
|
33
|
+
# Parse list of timing nodes
|
|
34
|
+
# @param timing_list_node [Nokogiri::XML::Element] node to parse
|
|
35
|
+
# @return [Array<TimeNode>] list of nodes
|
|
33
36
|
def self.parse_list(timing_list_node)
|
|
34
37
|
timings = []
|
|
35
38
|
timing_list_node.xpath('*').each do |time_node|
|
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
module OoxmlParser
|
|
4
4
|
# Methods to help working with slide data
|
|
5
5
|
module SlideHelper
|
|
6
|
+
# @return [Array] list of not empty element on slide
|
|
6
7
|
def nonempty_elements
|
|
7
8
|
elements.reject { |cur_shape| cur_shape.text_body.paragraphs.first.characters.empty? }
|
|
8
9
|
end
|
|
9
10
|
|
|
11
|
+
# @return [Array<GraphicFrame>] list GraphicFrame elements on slide
|
|
10
12
|
def graphic_frames
|
|
11
13
|
elements.select { |cur_element| cur_element.is_a?(GraphicFrame) }
|
|
12
14
|
end
|
|
@@ -17,7 +19,7 @@ module OoxmlParser
|
|
|
17
19
|
def transform_of_object(object)
|
|
18
20
|
case object
|
|
19
21
|
when :image
|
|
20
|
-
elements.find { |e| e.is_a?
|
|
22
|
+
elements.find { |e| e.is_a? DocxPicture }.properties.transform
|
|
21
23
|
when :chart
|
|
22
24
|
elements.find { |e| e.is_a? GraphicFrame }.transform
|
|
23
25
|
when :table
|
|
@@ -29,6 +31,10 @@ module OoxmlParser
|
|
|
29
31
|
end
|
|
30
32
|
end
|
|
31
33
|
|
|
34
|
+
# Get horizontal align of object on slide
|
|
35
|
+
# @param object [Symbol] object to get
|
|
36
|
+
# @param slide_size [SlideSize] size of slide
|
|
37
|
+
# @return [Symbol] type of align
|
|
32
38
|
def content_horizontal_align(object, slide_size)
|
|
33
39
|
transform = transform_of_object(object)
|
|
34
40
|
return :left if transform.offset.x.zero?
|
|
@@ -38,6 +44,10 @@ module OoxmlParser
|
|
|
38
44
|
:unknown
|
|
39
45
|
end
|
|
40
46
|
|
|
47
|
+
# Get vertical align of object on slide
|
|
48
|
+
# @param object [Symbol] object to get
|
|
49
|
+
# @param slide_size [SlideSize] size of slide
|
|
50
|
+
# @return [Symbol] type of align
|
|
41
51
|
def content_vertical_align(object, slide_size)
|
|
42
52
|
transform = transform_of_object(object)
|
|
43
53
|
return :top if transform.offset.y.zero?
|
|
@@ -47,6 +57,10 @@ module OoxmlParser
|
|
|
47
57
|
:unknown
|
|
48
58
|
end
|
|
49
59
|
|
|
60
|
+
# Get content distribution of object
|
|
61
|
+
# @param object [Symbol] object to get
|
|
62
|
+
# @param slide_size [SlideSize] size of slide
|
|
63
|
+
# @return [Array<Symbol>] type of align
|
|
50
64
|
def content_distribute(object, slide_size)
|
|
51
65
|
return %i[horizontally vertically] if content_horizontal_align(object, slide_size) == :center && content_vertical_align(object, slide_size) == :middle
|
|
52
66
|
return [:horizontally] if content_horizontal_align(object, slide_size) == :center
|
|
@@ -7,6 +7,9 @@ module OoxmlParser
|
|
|
7
7
|
class Transition < OOXMLDocumentObject
|
|
8
8
|
attr_accessor :speed, :properties, :sound_action, :advance_on_click, :delay, :duration
|
|
9
9
|
|
|
10
|
+
# Parse Transition object
|
|
11
|
+
# @param node [Nokogiri::XML:Element] node to parse
|
|
12
|
+
# @return [Transition] result of parsing
|
|
10
13
|
def parse(node)
|
|
11
14
|
node.xpath('*').each do |node_child|
|
|
12
15
|
@properties = TransitionProperties.new(parent: self).parse(node_child)
|
|
@@ -5,6 +5,9 @@ require_relative 'pptx_data/presentation.rb'
|
|
|
5
5
|
module OoxmlParser
|
|
6
6
|
# Basic class for parsing pptx
|
|
7
7
|
class PptxParser
|
|
8
|
+
# Parse pptx file
|
|
9
|
+
# @param path_to_file [String] file path
|
|
10
|
+
# @return [Presentation] result of parse
|
|
8
11
|
def self.parse_pptx(path_to_file)
|
|
9
12
|
Parser.parse_format(path_to_file) do
|
|
10
13
|
Presentation.new.parse
|
data/lib/ooxml_parser/version.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative 'workbook/chartsheet'
|
|
4
|
+
require_relative 'workbook/pivot_cache'
|
|
4
5
|
require_relative 'workbook/shared_string_table'
|
|
5
6
|
require_relative 'workbook/style_sheet'
|
|
6
7
|
require_relative 'workbook/worksheet'
|
|
@@ -18,12 +19,20 @@ module OoxmlParser
|
|
|
18
19
|
attr_accessor :style_sheet
|
|
19
20
|
# @return [SharedStringTable] styles of book
|
|
20
21
|
attr_accessor :shared_strings_table
|
|
22
|
+
# @return [Array<PivotCache>] list of pivot caches
|
|
23
|
+
attr_accessor :pivot_caches
|
|
21
24
|
|
|
22
25
|
def initialize(params = {})
|
|
23
26
|
@worksheets = []
|
|
27
|
+
@pivot_caches = []
|
|
24
28
|
super
|
|
25
29
|
end
|
|
26
30
|
|
|
31
|
+
# Return cell by coordinates
|
|
32
|
+
# @param column [String, Integer] number or numeric digit of column
|
|
33
|
+
# @param row [Integer] row to find
|
|
34
|
+
# @param sheet [Integer] number of sheet
|
|
35
|
+
# @return [XlsxCell] result
|
|
27
36
|
def cell(column, row, sheet = 0)
|
|
28
37
|
column = Coordinates.new(row, column).column_number unless StringHelper.numeric?(column.to_s)
|
|
29
38
|
|
|
@@ -88,6 +97,8 @@ module OoxmlParser
|
|
|
88
97
|
@shared_strings_table = SharedStringTable.new(parent: self).parse(shared_string_file)
|
|
89
98
|
end
|
|
90
99
|
|
|
100
|
+
# Parse content of Workbook
|
|
101
|
+
# @return [XLSXWorkbook]
|
|
91
102
|
def parse
|
|
92
103
|
@content_types = ContentTypes.new(parent: self).parse
|
|
93
104
|
@relationships = Relationships.new(parent: self).parse_file("#{OOXMLDocumentObject.path_to_folder}xl/_rels/workbook.xml.rels")
|
|
@@ -95,10 +106,10 @@ module OoxmlParser
|
|
|
95
106
|
OOXMLDocumentObject.xmls_stack = []
|
|
96
107
|
OOXMLDocumentObject.root_subfolder = 'xl/'
|
|
97
108
|
OOXMLDocumentObject.add_to_xmls_stack('xl/workbook.xml')
|
|
98
|
-
doc = Nokogiri::XML.parse(File.open(OOXMLDocumentObject.current_xml))
|
|
109
|
+
@doc = Nokogiri::XML.parse(File.open(OOXMLDocumentObject.current_xml))
|
|
99
110
|
@theme = PresentationTheme.parse("xl/#{link_to_theme_xml}") if link_to_theme_xml
|
|
100
111
|
@style_sheet = StyleSheet.new(parent: self).parse
|
|
101
|
-
doc.xpath('xmlns:workbook/xmlns:sheets/xmlns:sheet').each do |sheet|
|
|
112
|
+
@doc.xpath('xmlns:workbook/xmlns:sheets/xmlns:sheet').each do |sheet|
|
|
102
113
|
file = @relationships.target_by_id(sheet.attribute('id').value)
|
|
103
114
|
if file.start_with?('worksheets')
|
|
104
115
|
@worksheets << Worksheet.new(parent: self).parse(file)
|
|
@@ -107,6 +118,7 @@ module OoxmlParser
|
|
|
107
118
|
@worksheets << Chartsheet.new(parent: self).parse(file)
|
|
108
119
|
end
|
|
109
120
|
end
|
|
121
|
+
parse_pivot_cache
|
|
110
122
|
OOXMLDocumentObject.xmls_stack.pop
|
|
111
123
|
self
|
|
112
124
|
end
|
|
@@ -116,5 +128,12 @@ module OoxmlParser
|
|
|
116
128
|
def link_to_theme_xml
|
|
117
129
|
relationships.target_by_type('theme').first
|
|
118
130
|
end
|
|
131
|
+
|
|
132
|
+
# Perform parsing of pivot cache
|
|
133
|
+
def parse_pivot_cache
|
|
134
|
+
@doc.xpath('xmlns:workbook/xmlns:pivotCaches/xmlns:pivotCache').each do |pivot_cache|
|
|
135
|
+
@pivot_caches << PivotCache.new(parent: self).parse(pivot_cache)
|
|
136
|
+
end
|
|
137
|
+
end
|
|
119
138
|
end
|
|
120
139
|
end
|
|
@@ -11,6 +11,9 @@ module OoxmlParser
|
|
|
11
11
|
@parent = parent
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
+
# Parse Chartsheet object
|
|
15
|
+
# @param file [String] file to parse
|
|
16
|
+
# @return [Chartsheet] result of parsing
|
|
14
17
|
def parse(file)
|
|
15
18
|
OOXMLDocumentObject.add_to_xmls_stack(OOXMLDocumentObject.root_subfolder + file)
|
|
16
19
|
doc = parse_xml(OOXMLDocumentObject.current_xml)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'pivot_cache/pivot_cache_definition'
|
|
4
|
+
|
|
5
|
+
module OoxmlParser
|
|
6
|
+
# Class for parsing <pivotCache> tag
|
|
7
|
+
class PivotCache < OOXMLDocumentObject
|
|
8
|
+
# @return [Integer] cacheId of pivot cache
|
|
9
|
+
attr_reader :cache_id
|
|
10
|
+
# @return [String] id of pivot cache
|
|
11
|
+
attr_reader :id
|
|
12
|
+
# @return [PivotCacheDefinition] parsed pivot cache definition
|
|
13
|
+
attr_reader :pivot_cache_definition
|
|
14
|
+
|
|
15
|
+
# Parse Pivot Cache data
|
|
16
|
+
# @param [Nokogiri::XML:Element] node with Pivot Cache data
|
|
17
|
+
# @return [PivotCache] value of PivotCache
|
|
18
|
+
def parse(node)
|
|
19
|
+
node.attributes.each do |key, value|
|
|
20
|
+
case key
|
|
21
|
+
when 'cacheId'
|
|
22
|
+
@cache_id = value.value.to_i
|
|
23
|
+
when 'id'
|
|
24
|
+
@id = value.value.to_s
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
parse_pivot_cache_definition
|
|
28
|
+
self
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
# @return [PivotCacheDefinition] pivot cache definition for current pivot cache
|
|
34
|
+
def parse_pivot_cache_definition
|
|
35
|
+
definition_file = root_object.relationships.target_by_id(id)
|
|
36
|
+
full_file_path = "#{OOXMLDocumentObject.path_to_folder}/xl/#{definition_file}"
|
|
37
|
+
@pivot_cache_definition = PivotCacheDefinition.new(parent: root_object)
|
|
38
|
+
.parse(full_file_path)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'pivot_cache_definition/cache_source'
|
|
4
|
+
module OoxmlParser
|
|
5
|
+
# Class for parsing <pivotCacheDefinition> file
|
|
6
|
+
class PivotCacheDefinition < OOXMLDocumentObject
|
|
7
|
+
# @return [String] id of pivot cache definition
|
|
8
|
+
attr_reader :id
|
|
9
|
+
# @return [CacheSource] source of pivot cache
|
|
10
|
+
attr_reader :cache_source
|
|
11
|
+
|
|
12
|
+
# Parse PivotCacheDefinition file
|
|
13
|
+
# @param file [String] path to file
|
|
14
|
+
# @return [PivotCacheDefinition]
|
|
15
|
+
def parse(file)
|
|
16
|
+
return nil unless File.exist?(file)
|
|
17
|
+
|
|
18
|
+
document = parse_xml(file)
|
|
19
|
+
node = document.xpath('*').first
|
|
20
|
+
|
|
21
|
+
node.attributes.each do |key, value|
|
|
22
|
+
case key
|
|
23
|
+
when 'id'
|
|
24
|
+
@id = value.value.to_s
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
node.xpath('*').each do |node_child|
|
|
29
|
+
case node_child.name
|
|
30
|
+
when 'cacheSource'
|
|
31
|
+
@cache_source = CacheSource.new(parent: self).parse(node_child)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
self
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'cache_source/worksheet_source'
|
|
4
|
+
|
|
5
|
+
module OoxmlParser
|
|
6
|
+
# Class for parsing <cacheSource> file
|
|
7
|
+
class CacheSource < OOXMLDocumentObject
|
|
8
|
+
# @return [String] type
|
|
9
|
+
attr_reader :type
|
|
10
|
+
# @return [WorksheetSource] source of worksheet data
|
|
11
|
+
attr_reader :worksheet_source
|
|
12
|
+
|
|
13
|
+
# Parse `<cacheSource>` tag
|
|
14
|
+
# # @param [Nokogiri::XML:Element] node with CacheSource data
|
|
15
|
+
# @return [CacheSource]
|
|
16
|
+
def parse(node)
|
|
17
|
+
node.attributes.each do |key, value|
|
|
18
|
+
case key
|
|
19
|
+
when 'type'
|
|
20
|
+
@type = value.value.to_s
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
node.xpath('*').each do |node_child|
|
|
25
|
+
case node_child.name
|
|
26
|
+
when 'worksheetSource'
|
|
27
|
+
@worksheet_source = WorksheetSource.new(parent: self).parse(node_child)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
self
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module OoxmlParser
|
|
4
|
+
# Class for parsing <worksheetSource> file
|
|
5
|
+
class WorksheetSource < OOXMLDocumentObject
|
|
6
|
+
# @return [String] ref of cells
|
|
7
|
+
attr_reader :ref
|
|
8
|
+
# @return [String] sheet name
|
|
9
|
+
attr_reader :sheet
|
|
10
|
+
|
|
11
|
+
# Parse `<worksheetSource>` tag
|
|
12
|
+
# # @param [Nokogiri::XML:Element] node with WorksheetSource data
|
|
13
|
+
# @return [WorksheetSource]
|
|
14
|
+
def parse(node)
|
|
15
|
+
node.attributes.each do |key, value|
|
|
16
|
+
case key
|
|
17
|
+
when 'ref'
|
|
18
|
+
@ref = value.value.to_s
|
|
19
|
+
when 'sheet'
|
|
20
|
+
@sheet = value.value.to_s
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
self
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -26,6 +26,8 @@ module OoxmlParser
|
|
|
26
26
|
@parent = parent
|
|
27
27
|
end
|
|
28
28
|
|
|
29
|
+
# Parse StyleSheet object
|
|
30
|
+
# @return [StyleSheet] result of parsing
|
|
29
31
|
def parse
|
|
30
32
|
doc = parse_xml("#{OOXMLDocumentObject.path_to_folder}/#{OOXMLDocumentObject.root_subfolder}/styles.xml")
|
|
31
33
|
doc.root.xpath('*').each do |node_child|
|
|
@@ -4,6 +4,7 @@ require_relative 'cell_style/alignment'
|
|
|
4
4
|
module OoxmlParser
|
|
5
5
|
# Class for parsing `xf` object
|
|
6
6
|
class Xf < OOXMLDocumentObject
|
|
7
|
+
# [Array<String,nil>] list of predefined format values
|
|
7
8
|
ALL_FORMAT_VALUE = ['General',
|
|
8
9
|
'0',
|
|
9
10
|
'0.00',
|
|
@@ -119,18 +120,22 @@ module OoxmlParser
|
|
|
119
120
|
self
|
|
120
121
|
end
|
|
121
122
|
|
|
123
|
+
# @return [Font] font of object
|
|
122
124
|
def font
|
|
123
125
|
root_object.style_sheet.fonts[@font_id]
|
|
124
126
|
end
|
|
125
127
|
|
|
128
|
+
# @return [XlsxBorder] border of object
|
|
126
129
|
def borders
|
|
127
130
|
root_object.style_sheet.borders.borders_array[@border_id] if @apply_border
|
|
128
131
|
end
|
|
129
132
|
|
|
133
|
+
# @return [Fill] fill color of object
|
|
130
134
|
def fill_color
|
|
131
135
|
root_object.style_sheet.fills[@fill_id] if @apply_fill
|
|
132
136
|
end
|
|
133
137
|
|
|
138
|
+
# @return [String] numerical format of object
|
|
134
139
|
def numerical_format
|
|
135
140
|
return @numerical_format unless @apply_number_format
|
|
136
141
|
|
|
@@ -42,6 +42,8 @@ module OoxmlParser
|
|
|
42
42
|
@parent = parent
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
+
# Perform parsing of relationships
|
|
46
|
+
# @return [nil]
|
|
45
47
|
def parse_relationships
|
|
46
48
|
OOXMLDocumentObject.add_to_xmls_stack("#{OOXMLDocumentObject.root_subfolder}/worksheets/_rels/#{@xml_name}.rels")
|
|
47
49
|
@relationships = Relationships.new(parent: self).parse_file(OOXMLDocumentObject.current_xml) if File.exist?(OOXMLDocumentObject.current_xml)
|
|
@@ -67,6 +69,9 @@ module OoxmlParser
|
|
|
67
69
|
end
|
|
68
70
|
end
|
|
69
71
|
|
|
72
|
+
# Parse data of Worksheet
|
|
73
|
+
# @param path_to_xml_file [String] path to file to parse
|
|
74
|
+
# @return [Worksheet] parsed worksheet
|
|
70
75
|
def parse(path_to_xml_file)
|
|
71
76
|
@xml_name = File.basename path_to_xml_file
|
|
72
77
|
parse_relationships
|
|
@@ -16,6 +16,7 @@ module OoxmlParser
|
|
|
16
16
|
@parent = parent
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
+
# @return [Array<ExcelComment>] list of comments
|
|
19
20
|
def comments
|
|
20
21
|
comment_list.comments
|
|
21
22
|
end
|
|
@@ -23,6 +24,9 @@ module OoxmlParser
|
|
|
23
24
|
extend Gem::Deprecate
|
|
24
25
|
deprecate :comments, 'comment_list.comments', 2020, 1
|
|
25
26
|
|
|
27
|
+
# Parse file with ExcelComments
|
|
28
|
+
# @param file [String] file to parse
|
|
29
|
+
# @return [ExcelComments] object with data
|
|
26
30
|
def parse(file)
|
|
27
31
|
doc = parse_xml(file)
|
|
28
32
|
node = doc.xpath('*').first
|
data/lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/worksheet/xlsx_column_properties.rb
CHANGED
|
@@ -38,6 +38,10 @@ module OoxmlParser
|
|
|
38
38
|
self
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
+
# Parse list of XlsxColumnProperties
|
|
42
|
+
# @param columns_width_node [Nokogiri::XML:Element] node to parse
|
|
43
|
+
# @param parent [OOXMLDocumentObject] parent of result objects
|
|
44
|
+
# @return [Array<XlsxColumnProperties>] list of XlsxColumnProperties
|
|
41
45
|
def self.parse_list(columns_width_node, parent: nil)
|
|
42
46
|
columns = []
|
|
43
47
|
columns_width_node.xpath('xmlns:col').each do |col_node|
|
|
@@ -5,6 +5,9 @@ require_relative 'xlsx_data/view_model/workbook'
|
|
|
5
5
|
module OoxmlParser
|
|
6
6
|
# Basic class for parsing xlsx
|
|
7
7
|
class XlsxParser
|
|
8
|
+
# Parse xlsx file
|
|
9
|
+
# @param path_to_file [String] file path
|
|
10
|
+
# @return [XLSXWorkbook] result of parse
|
|
8
11
|
def self.parse_xlsx(path_to_file)
|
|
9
12
|
Parser.parse_format(path_to_file) do
|
|
10
13
|
XLSXWorkbook.new.parse
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ooxml_parser
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- ONLYOFFICE
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2020-
|
|
13
|
+
date: 2020-07-10 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: nokogiri
|
|
@@ -74,6 +74,62 @@ dependencies:
|
|
|
74
74
|
- - "~>"
|
|
75
75
|
- !ruby/object:Gem::Version
|
|
76
76
|
version: '13.0'
|
|
77
|
+
- !ruby/object:Gem::Dependency
|
|
78
|
+
name: rubocop
|
|
79
|
+
requirement: !ruby/object:Gem::Requirement
|
|
80
|
+
requirements:
|
|
81
|
+
- - '='
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: 0.87.1
|
|
84
|
+
type: :development
|
|
85
|
+
prerelease: false
|
|
86
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - '='
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: 0.87.1
|
|
91
|
+
- !ruby/object:Gem::Dependency
|
|
92
|
+
name: rubocop-performance
|
|
93
|
+
requirement: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - '='
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: 1.7.0
|
|
98
|
+
type: :development
|
|
99
|
+
prerelease: false
|
|
100
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
101
|
+
requirements:
|
|
102
|
+
- - '='
|
|
103
|
+
- !ruby/object:Gem::Version
|
|
104
|
+
version: 1.7.0
|
|
105
|
+
- !ruby/object:Gem::Dependency
|
|
106
|
+
name: rubocop-rake
|
|
107
|
+
requirement: !ruby/object:Gem::Requirement
|
|
108
|
+
requirements:
|
|
109
|
+
- - '='
|
|
110
|
+
- !ruby/object:Gem::Version
|
|
111
|
+
version: 0.5.1
|
|
112
|
+
type: :development
|
|
113
|
+
prerelease: false
|
|
114
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
115
|
+
requirements:
|
|
116
|
+
- - '='
|
|
117
|
+
- !ruby/object:Gem::Version
|
|
118
|
+
version: 0.5.1
|
|
119
|
+
- !ruby/object:Gem::Dependency
|
|
120
|
+
name: rubocop-rspec
|
|
121
|
+
requirement: !ruby/object:Gem::Requirement
|
|
122
|
+
requirements:
|
|
123
|
+
- - '='
|
|
124
|
+
- !ruby/object:Gem::Version
|
|
125
|
+
version: 1.42.0
|
|
126
|
+
type: :development
|
|
127
|
+
prerelease: false
|
|
128
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
129
|
+
requirements:
|
|
130
|
+
- - '='
|
|
131
|
+
- !ruby/object:Gem::Version
|
|
132
|
+
version: 1.42.0
|
|
77
133
|
description: Parse OOXML files (docx, xlsx, pptx)
|
|
78
134
|
email:
|
|
79
135
|
- shockwavenn@gmail.com
|
|
@@ -365,6 +421,10 @@ files:
|
|
|
365
421
|
- lib/ooxml_parser/version.rb
|
|
366
422
|
- lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook.rb
|
|
367
423
|
- lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/chartsheet.rb
|
|
424
|
+
- lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache.rb
|
|
425
|
+
- lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition.rb
|
|
426
|
+
- lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source.rb
|
|
427
|
+
- lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/pivot_cache/pivot_cache_definition/cache_source/worksheet_source.rb
|
|
368
428
|
- lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/shared_string_table.rb
|
|
369
429
|
- lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/shared_string_table/string_index.rb
|
|
370
430
|
- lib/ooxml_parser/xlsx_parser/xlsx_data/view_model/workbook/style_sheet.rb
|
|
@@ -429,14 +489,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
429
489
|
requirements:
|
|
430
490
|
- - ">="
|
|
431
491
|
- !ruby/object:Gem::Version
|
|
432
|
-
version: '2.
|
|
492
|
+
version: '2.4'
|
|
433
493
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
434
494
|
requirements:
|
|
435
495
|
- - ">="
|
|
436
496
|
- !ruby/object:Gem::Version
|
|
437
497
|
version: '0'
|
|
438
498
|
requirements: []
|
|
439
|
-
rubygems_version: 3.
|
|
499
|
+
rubygems_version: 3.2.0.pre1
|
|
440
500
|
signing_key:
|
|
441
501
|
specification_version: 4
|
|
442
502
|
summary: OoxmlParser Gem
|