Ejemplo n.º 1
0
 def bind_value(self, value):
     """Given a value, infer type and display options."""
     self._data_type = self.data_type_for_value(value)
     if value is None:
         self.set_value_explicit('', self.TYPE_NULL)
         return True
     elif self._data_type == self.TYPE_STRING:
         # percentage detection
         if isinstance(value, unicode):
             percentage_search = self.RE_PATTERNS['percentage'].match(value)
         else:
             percentage_search = self.RE_PATTERNS['percentage'].match(
                 str(value))
         if percentage_search and value.strip() != '%':
             value = float(value.replace('%', '')) / 100.0
             self.set_value_explicit(value, self.TYPE_NUMERIC)
             self._set_number_format(NumberFormat.FORMAT_PERCENTAGE)
             return True
         # time detection
         if isinstance(value, unicode):
             time_search = self.RE_PATTERNS['time'].match(value)
         else:
             time_search = self.RE_PATTERNS['time'].match(str(value))
         if time_search:
             sep_count = value.count(':')  # pylint: disable=E1103
             if sep_count == 1:
                 hours, minutes = [int(bit) for bit in value.split(':')]  # pylint: disable=E1103
                 seconds = 0
             elif sep_count == 2:
                 hours, minutes, seconds = \
                         [int(bit) for bit in value.split(':')]  # pylint: disable=E1103
             days = (hours / 24.0) + (minutes / 1440.0) + \
                     (seconds / 86400.0)
             self.set_value_explicit(days, self.TYPE_NUMERIC)
             self._set_number_format(NumberFormat.FORMAT_DATE_TIME3)
             return True
     if self._data_type == self.TYPE_NUMERIC:
         # date detection
         # if the value is a date, but not a date time, make it a
         # datetime, and set the time part to 0
         if isinstance(value, datetime.date) and not \
                 isinstance(value, datetime.datetime):
             value = datetime.datetime.combine(value, datetime.time())
         if isinstance(
                 value,
             (datetime.datetime, datetime.time, datetime.timedelta)):
             if isinstance(value, datetime.datetime):
                 self._set_number_format(NumberFormat.FORMAT_DATE_YYYYMMDD2)
             elif isinstance(value, datetime.time):
                 self._set_number_format(NumberFormat.FORMAT_DATE_TIME6)
             elif isinstance(value, datetime.timedelta):
                 self._set_number_format(NumberFormat.FORMAT_DATE_TIMEDELTA)
             value = SharedDate().datetime_to_julian(date=value)
             self.set_value_explicit(value, self.TYPE_NUMERIC)
             return True
     self.set_value_explicit(value, self._data_type)
Ejemplo n.º 2
0
    def __init__(self, parent_workbook, title):
        Worksheet.__init__(self, parent_workbook, title)

        self._max_col = 0
        self._max_row = 0
        self._parent = parent_workbook

        self._fileobj_header_name = create_temporary_file(suffix='.header')
        self._fileobj_content_name = create_temporary_file(suffix='.content')
        self._fileobj_name = create_temporary_file()

        self._shared_date = SharedDate()
        self._string_builder = self._parent.strings_table_builder
Ejemplo n.º 3
0
 def __init__(self, worksheet, column, row, value=None):
     self.column = column.upper()
     self.row = row
     # _value is the stored value, while value is the displayed value
     self._value = None
     self._hyperlink_rel = None
     self._data_type = self.TYPE_NULL
     if value:
         self.value = value
     self.parent = worksheet
     self.xf_index = 0
     self._shared_date = SharedDate(
         base_date=worksheet.parent.excel_base_date)
     self.merged = False
Ejemplo n.º 4
0
    def __init__(self, parent_workbook, title, workbook_name, sheet_codename,
                 xml_source, string_table):

        Worksheet.__init__(self, parent_workbook, title)
        self._workbook_name = workbook_name
        self._sheet_codename = sheet_codename
        self._xml_source = xml_source
        self._string_table = string_table

        min_col, min_row, max_col, max_row = read_dimension(
            xml_source=xml_source)

        self._max_row = max_row
        self._max_column = max_col
        self._dimensions = '%s%s:%s%s' % (min_col, min_row, max_col, max_row)

        self._shared_date = SharedDate(
            base_date=parent_workbook.excel_base_date)
Ejemplo n.º 5
0
                                               PACKAGE_WORKSHEETS, MAX_ROW,
                                               MIN_ROW, ARC_STYLE)
from spreadsheet.openpyxl.shared.compat import iterparse, xrange
from zipfile import ZipFile
import re
import tempfile
import zlib
import zipfile
import struct

TYPE_NULL = Cell.TYPE_NULL
MISSING_VALUE = None

RE_COORDINATE = re.compile('^([A-Z]+)([0-9]+)$')

SHARED_DATE = SharedDate()

_COL_CONVERSION_CACHE = dict(
    (get_column_letter(i), i) for i in xrange(1, 18279))


def column_index_from_string(str_col,
                             _col_conversion_cache=_COL_CONVERSION_CACHE):
    # we use a function argument to get indexed name lookup
    return _col_conversion_cache[str_col]


del _COL_CONVERSION_CACHE

RAW_ATTRIBUTES = [
    'row', 'column', 'coordinate', 'internal_value', 'data_type', 'style_id',