def _write_sst workbook, writer, offset, total, strings
sst = {}
worksheets(workbook).each do |worksheet|
offset += worksheet.boundsheet_size
@sst[worksheet] = sst
end
sst_size = strings.size
data = [total, sst_size].pack 'V2'
op = 0x00fc
wide = 0
offsets = []
strings.each_with_index do |string, idx|
sst.store string, idx
op_offset = data.size + 4
if idx % SST_CHUNKSIZE == 0
offsets.push [offset + writer.pos + op_offset, op_offset]
end
header, packed, next_wide = _unicode_string string, 2
must_fit = header.size + wide + 1
while data.size + must_fit > @recordsize_limit
op, data, wide = write_string_part writer, op, data, wide
end
wide = next_wide
data << header << packed
end
until data.empty?
op, data, wide = write_string_part writer, op, data, wide
end
write_extsst workbook, offsets, writer
end