class Xlsxrb::Ooxml::Reader::WorksheetListener
SAX2 listener for parsing worksheet cells.
Attributes
Public Class Methods
Source
# File lib/xlsxrb/ooxml/reader.rb, line 1726 def initialize(shared_strings = []) @shared_strings = shared_strings @cells = {} @row_attributes = {} @cell_phonetic = {} @current_cell_ref = nil @current_cell_type = nil @inside_value = false @inside_inline_text = false @inside_formula = false @inside_is = false @inside_is_r = false @inside_is_rpr = false @value_buffer = +"" @inline_text_buffer = +"" @formula_buffer = +"" @is_runs = [] @is_has_runs = false @is_current_font = {} @is_run_text = +"" end
Public Instance Methods
Source
# File lib/xlsxrb/ooxml/reader.rb, line 1841 def characters(text) @value_buffer << text if @inside_value if @inside_inline_text if @inside_is_r @is_run_text << text else @inline_text_buffer << text end end @formula_buffer << text if @inside_formula end
# File lib/xlsxrb/ooxml/reader.rb, line 1853 def end_element(_uri, local_name, qname) name = element_name(local_name, qname) case name when "v" @inside_value = false when "f" @inside_formula = false when "t" @inside_inline_text = false when "rPr" @inside_is_rpr = false when "r" if @inside_is_r run = { text: @is_run_text.dup } run[:font] = @is_current_font.dup unless @is_current_font.empty? @is_runs << run @inside_is_r = false end when "is" @inside_is = false when "c" store_cell_value @cell_phonetic[@current_cell_ref] = true if @current_cell_ph @current_cell_ref = nil @current_cell_type = nil @value_buffer = +"" @inline_text_buffer = +"" @formula_buffer = +"" end end
# File lib/xlsxrb/ooxml/reader.rb, line 1748 def start_element(_uri, local_name, qname, attributes) name = element_name(local_name, qname) case name when "row" parse_row_attributes(attributes) when "c" @current_cell_ref = attributes["r"] @current_cell_type = attributes["t"] @current_cell_ph = %w[1 true].include?(attributes["ph"]) @value_buffer = +"" @inline_text_buffer = +"" @formula_buffer = +"" @formula_type = nil @formula_ref = nil @formula_si = nil @formula_ca = nil @formula_aca = nil @formula_bx = nil @formula_dt2d = nil @formula_dtr = nil @formula_r1 = nil @formula_r2 = nil @is_runs = [] @is_has_runs = false when "v" @inside_value = true when "f" @inside_formula = true @formula_type = attributes["t"] @formula_ref = attributes["ref"] si = attributes["si"] @formula_si = si&.to_i @formula_ca = true if %w[1 true].include?(attributes["ca"]) @formula_aca = true if %w[1 true].include?(attributes["aca"]) @formula_bx = true if %w[1 true].include?(attributes["bx"]) @formula_dt2d = true if %w[1 true].include?(attributes["dt2D"]) @formula_dtr = true if %w[1 true].include?(attributes["dtr"]) @formula_r1 = attributes["r1"] if attributes["r1"] @formula_r2 = attributes["r2"] if attributes["r2"] when "is" @inside_is = true if @current_cell_type == "inlineStr" when "r" if @inside_is @inside_is_r = true @is_has_runs = true @is_current_font = {} @is_run_text = +"" end when "rPr" @inside_is_rpr = true if @inside_is_r when "b" @is_current_font[:bold] = true if @inside_is_rpr when "i" @is_current_font[:italic] = true if @inside_is_rpr when "strike" @is_current_font[:strike] = true if @inside_is_rpr when "u" if @inside_is_rpr val = attributes["val"] @is_current_font[:underline] = val || true end when "vertAlign" @is_current_font[:vert_align] = attributes["val"] if @inside_is_rpr && attributes["val"] when "sz" @is_current_font[:sz] = attributes["val"]&.to_f if @inside_is_rpr when "color" if @inside_is_rpr if attributes["rgb"] @is_current_font[:color] = attributes["rgb"] elsif attributes["theme"] @is_current_font[:theme] = attributes["theme"].to_i @is_current_font[:tint] = attributes["tint"].to_f if attributes["tint"] elsif attributes["indexed"] @is_current_font[:indexed] = attributes["indexed"].to_i end end when "rFont" @is_current_font[:name] = attributes["val"] if @inside_is_rpr when "family" @is_current_font[:family] = attributes["val"]&.to_i if @inside_is_rpr when "scheme" @is_current_font[:scheme] = attributes["val"] if @inside_is_rpr when "t" if @inside_is_r @is_run_text = +"" @inside_inline_text = true elsif @inside_is || (@current_cell_type == "inlineStr" && !@current_cell_ref.nil?) @inside_inline_text = true end end end