/** * A workbook can contain thousands of cells containing string (non-numeric) data. Furthermore this * data is very likely to be repeated across many rows or columns. The goal of implementing a single * string table that is shared across the workbook is to improve performance in opening and saving * the file by only reading and writing the repetitive information once. * * [Example: Consider for example a workbook summarizing information for cities within various countries. * There can be a column for the name of the country, a column for the name of each city in that country, * and a column containing the data for each city. In this case the country name is repetitive, being * duplicated in many cells. end example] In many cases the repetition is extensive, and significant savings * are realized by making use of a shared string table when saving the workbook. When displaying text in * the spreadsheet, the cell table will just contain an index into the string table as the value of a cell, * instead of the full string. * * The shared string table is permitted to contain all the necessary information for displaying the string: * the text, formatting properties, and phonetic properties (for East Asian languages). * * Most strings in a workbook have formatting applied at the cell level, that is, the entire string in the * cell has the same formatting applied. In these cases, the formatting for the cell is stored in the styles * part, and the string for the cell can be stored in the shared strings table. In this case, the strings * stored in the shared strings table are very simple text elements. * * @private */Ext.define('Ext.exporter.file.ooxml.excel.SharedStrings', { extend: 'Ext.exporter.file.ooxml.Xml', isSharedStrings: true, config: { strings: [] }, contentType: { contentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml' }, relationship: { schema: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings' }, folder: '/xl/', fileName: 'sharedStrings', tpl: [ '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>', '<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="{strings.length}" uniqueCount="{strings.length}">', '<tpl for="strings.getRange()"><si><t>{.:this.utf8}</t></si></tpl>', '</sst>', { utf8: function(v){ return Ext.util.Base64._utf8_encode(v); } } ], destroy: function(){ this.setStrings(null); this.callParent(); }, applyStrings: function(data, dataCollection) { var col; if(data) { col = new Ext.util.Collection({ keyFn: Ext.identityFn }); col.add(data); } Ext.destroy(dataCollection); return col; }, addString: function(value){ var v = Ext.util.Format.htmlEncode(value), s = this.getStrings(), index; if(!s) { this.setStrings([]); s = this.getStrings(); } index = s.indexOfKey(v); if(index < 0){ s.add(v); index = s.length - 1; } return index; }});