Source code for simple_report.core.shared_table

#coding: utf-8
from lxml.etree import _Element, Element, SubElement

__author__ = 'prefer'


[docs]class SharedStringsTable(object): """ Таблица общих строк """ def __init__(self, root): """ """ # Ключами являются строки, индексами значения self.new_elements_dict = {} self.new_elements_list = [] self._new_elements_dict = {} assert isinstance(root, _Element) #assert 'count' in root.attrib # TODO: Разобраться почему нет в виндовых шаблонах #assert 'uniqueCount' in root.attrib # TODO: Разобраться почему нет в виндовых шаблонах assert hasattr(root, 'nsmap') self.nsmap = root.nsmap self.uniq_elements = self.count = 0 self.elements = [''.join(t.text or '' for t in si) for si in root]
[docs] def get_new_index(self, value_string): """ Возвращаем индекс нового элемента таблицы shared string Ищем в множестве, иначе получаем нелинейное время flush секции """ new_index = self._new_elements_dict.get(value_string) if new_index is None: new_index = self.uniq_elements self.new_elements_list.append(value_string) self._new_elements_dict[new_index] = value_string self.uniq_elements += 1 return str(new_index)
[docs] def get_new_index_old(self, value_string): """ Возвращаем индекс нового элемента таблицы shared string """ try: new_index = self.new_elements_list.index(value_string) except ValueError: new_index = self.uniq_elements self.new_elements_list.append(value_string) self.uniq_elements += 1 return str(new_index)
[docs] def get_value(self, index): """ :param index: индекс :result: значение ячейки по индексу """ return self.elements[index]
[docs] def to_xml(self): u""" Переводит таблицу в xml :result: корневой узел xml """ root = Element('sst', {'count': str(len(self.new_elements_list)), 'uniqueCount': str(self.uniq_elements)}, nsmap=self.nsmap) for elem in self.new_elements_list: si = SubElement(root, 'si') t = SubElement(si, 't') t.text = unicode(elem) return root