Sha256: 760f339095dd95b3a8a7fe554f6bfe8c02a2db46fb8dc2189f616fbbb4f877d2
Contents?: true
Size: 1.67 KB
Versions: 3
Compression:
Stored size: 1.67 KB
Contents
require 'digest/md5' class XlsxWriter class SharedStrings BUFSIZE = 131072 #128kb attr_reader :document attr_reader :path attr_reader :indexes def initialize(document) @mutex = Mutex.new @document = document @indexes = {} @path = File.join document.staging_dir, relative_path FileUtils.mkdir_p File.dirname(path) @strings_tmp_file_writer = File.open(strings_tmp_file_path, 'wb') end def relative_path 'xl/sharedstrings.xml' end def ndx(str) @mutex.synchronize do digest = Digest::MD5.digest str unless ndx = indexes[digest] ndx = indexes.length indexes[digest] = ndx @strings_tmp_file_writer.write %{<si><t>#{str.fast_xs}</t></si>} end ndx end end def generated? @generated == true end def generate return if generated? @mutex.synchronize do return if generated? @generated = true @strings_tmp_file_writer.close File.open(path, 'wb') do |f| f.write <<-EOS <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="#{indexes.length}" uniqueCount="#{indexes.length}"> EOS File.open(strings_tmp_file_path, 'rb') do |strings_tmp_file_reader| buffer = '' while strings_tmp_file_reader.read(BUFSIZE, buffer) f.write buffer end end f.write %{</sst>} end File.unlink strings_tmp_file_path end end private def strings_tmp_file_path path + '.strings_tmp_file' end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
xlsx_writer-0.4.2 | lib/xlsx_writer/shared_strings.rb |
xlsx_writer-0.4.1 | lib/xlsx_writer/shared_strings.rb |
xlsx_writer-0.4.0 | lib/xlsx_writer/shared_strings.rb |