summaryrefslogtreecommitdiff
path: root/tablib
diff options
context:
space:
mode:
authorKenneth Reitz <me@kennethreitz.com>2011-05-12 17:54:00 -0400
committerKenneth Reitz <me@kennethreitz.com>2011-05-12 17:54:00 -0400
commit6b6ef70c61e1f35ea1b26535a2bec33a74be6bdf (patch)
tree69636e0a6048bf5b47c5822b04714d8a5f9c6ff2 /tablib
parent322283b8f968c036321ae2bf90a334f808f7cf3f (diff)
downloadtablib-6b6ef70c61e1f35ea1b26535a2bec33a74be6bdf.tar.gz
Convert openpyxl to relative imports
Diffstat (limited to 'tablib')
-rw-r--r--tablib/packages/openpyxl/__init__.py16
-rw-r--r--tablib/packages/openpyxl/cell.py16
-rw-r--r--tablib/packages/openpyxl/chart.py132
-rw-r--r--tablib/packages/openpyxl/drawing.py101
-rw-r--r--tablib/packages/openpyxl/namedrange.py2
-rw-r--r--tablib/packages/openpyxl/reader/__init__.py10
-rw-r--r--tablib/packages/openpyxl/reader/excel.py24
-rw-r--r--tablib/packages/openpyxl/reader/iter_worksheet.py46
-rw-r--r--tablib/packages/openpyxl/reader/strings.py4
-rw-r--r--tablib/packages/openpyxl/reader/style.py6
-rw-r--r--tablib/packages/openpyxl/reader/workbook.py10
-rw-r--r--tablib/packages/openpyxl/reader/worksheet.py14
-rw-r--r--tablib/packages/openpyxl/shared/__init__.py10
-rw-r--r--tablib/packages/openpyxl/shared/xmltools.py2
-rw-r--r--tablib/packages/openpyxl/workbook.py14
-rw-r--r--tablib/packages/openpyxl/worksheet.py30
-rw-r--r--tablib/packages/openpyxl/writer/__init__.py12
-rw-r--r--tablib/packages/openpyxl/writer/charts.py88
-rw-r--r--tablib/packages/openpyxl/writer/drawings.py2
-rw-r--r--tablib/packages/openpyxl/writer/dump_worksheet.py36
-rw-r--r--tablib/packages/openpyxl/writer/excel.py18
-rw-r--r--tablib/packages/openpyxl/writer/strings.py2
-rw-r--r--tablib/packages/openpyxl/writer/styles.py62
-rw-r--r--tablib/packages/openpyxl/writer/theme.py2
-rw-r--r--tablib/packages/openpyxl/writer/workbook.py10
-rw-r--r--tablib/packages/openpyxl/writer/worksheet.py6
26 files changed, 337 insertions, 338 deletions
diff --git a/tablib/packages/openpyxl/__init__.py b/tablib/packages/openpyxl/__init__.py
index c3dcc5e..81381d7 100644
--- a/tablib/packages/openpyxl/__init__.py
+++ b/tablib/packages/openpyxl/__init__.py
@@ -26,14 +26,14 @@
"""Imports for the openpyxl package."""
# package imports
-from openpyxl import cell
-from openpyxl import namedrange
-from openpyxl import style
-from openpyxl import workbook
-from openpyxl import worksheet
-from openpyxl import reader
-from openpyxl import shared
-from openpyxl import writer
+from . import cell
+from . import namedrange
+from . import style
+from . import workbook
+from . import worksheet
+from . import reader
+from . import shared
+from . import writer
# constants
diff --git a/tablib/packages/openpyxl/cell.py b/tablib/packages/openpyxl/cell.py
index 324fc96..d3a4d0b 100644
--- a/tablib/packages/openpyxl/cell.py
+++ b/tablib/packages/openpyxl/cell.py
@@ -38,10 +38,10 @@ import datetime
import re
# package imports
-from openpyxl.shared.date_time import SharedDate
-from openpyxl.shared.exc import CellCoordinatesException, \
+from .shared.date_time import SharedDate
+from .shared.exc import CellCoordinatesException, \
ColumnStringIndexException, DataTypeException
-from openpyxl.style import NumberFormat
+from .style import NumberFormat
# constants
COORD_RE = re.compile('^[$]?([A-Z]+)[$]?(\d+)$')
@@ -70,12 +70,12 @@ def absolute_coordinate(coord_string):
def column_index_from_string(column, fast = False):
"""Convert a column letter into a column number (e.g. B -> 2)
-
+
Excel only supports 1-3 letter column names from A -> ZZZ, so we
restrict our column names to 1-3 characters, each in the range A-Z.
-
+
.. note::
-
+
Fast mode is faster but does not check that all letters are capitals between A and Z
"""
@@ -349,7 +349,7 @@ class Cell(object):
:rtype: string
"""
return '%s%s' % (self.column, self.row)
-
+
@property
def address(self):
"""Return the coordinate string for this cell (e.g. 'B12')
@@ -376,7 +376,7 @@ class Cell(object):
def is_date(self):
"""Returns whether the value is *probably* a date or not
-
+
:rtype: bool
"""
return (self.has_style
diff --git a/tablib/packages/openpyxl/chart.py b/tablib/packages/openpyxl/chart.py
index c23e78f..56cbb4d 100644
--- a/tablib/packages/openpyxl/chart.py
+++ b/tablib/packages/openpyxl/chart.py
@@ -25,20 +25,20 @@ THE SOFTWARE.
import math
-from openpyxl.style import NumberFormat
-from openpyxl.drawing import Drawing, Shape
-from openpyxl.shared.units import pixels_to_EMU, short_color
-from openpyxl.cell import get_column_letter
+from .style import NumberFormat
+from .drawing import Drawing, Shape
+from .shared.units import pixels_to_EMU, short_color
+from .cell import get_column_letter
class Axis(object):
-
+
POSITION_BOTTOM = 'b'
POSITION_LEFT = 'l'
-
+
ORIENTATION_MIN_MAX = "minMax"
-
+
def __init__(self):
-
+
self.orientation = self.ORIENTATION_MIN_MAX
self.number_format = NumberFormat()
for attr in ('position','tick_label_position','crosses',
@@ -47,11 +47,11 @@ class Axis(object):
self.min = 0
self.max = None
self.unit = None
-
+
@classmethod
def default_category(cls):
""" default values for category axes """
-
+
ax = Axis()
ax.id = 60871424
ax.cross = 60873344
@@ -62,11 +62,11 @@ class Axis(object):
ax.label_align = 'ctr'
ax.label_offset = 100
return ax
-
+
@classmethod
def default_value(cls):
""" default values for value axes """
-
+
ax = Axis()
ax.id = 60873344
ax.cross = 60871424
@@ -82,7 +82,7 @@ class Reference(object):
""" a simple wrapper around a serie of reference data """
def __init__(self, sheet, pos1, pos2=None):
-
+
self.sheet = sheet
self.pos1 = pos1
self.pos2 = pos2
@@ -93,10 +93,10 @@ class Reference(object):
return 'str'
else:
return 'num'
-
+
def _get_ref(self):
""" format excel reference notation """
-
+
if self.pos2:
return '%s!$%s$%s:$%s$%s' % (self.sheet.title,
get_column_letter(self.pos1[1]+1), self.pos1[0]+1,
@@ -104,11 +104,11 @@ class Reference(object):
else:
return '%s!$%s$%s' % (self.sheet.title,
get_column_letter(self.pos1[1]+1), self.pos1[0]+1)
-
-
+
+
def _get_cache(self):
""" read data in sheet - to be used at writing time """
-
+
cache = []
if self.pos2:
for row in range(self.pos1[0], self.pos2[0]+1):
@@ -118,15 +118,15 @@ class Reference(object):
cell = self.sheet.cell(row=self.pos1[0], column=self.pos1[1])
cache.append(cell.value)
return cache
-
+
class Serie(object):
""" a serie of data and possibly associated labels """
-
+
MARKER_NONE = 'none'
-
+
def __init__(self, values, labels=None, legend=None, color=None, xvalues=None):
-
+
self.marker = Serie.MARKER_NONE
self.values = values
self.xvalues = xvalues
@@ -134,13 +134,13 @@ class Serie(object):
self.legend = legend
self.error_bar = None
self._color = color
-
+
def _get_color(self):
return self._color
-
+
def _set_color(self, color):
self._color = short_color(color)
-
+
color = property(_get_color, _set_color)
def get_min_max(self):
@@ -152,43 +152,43 @@ class Serie(object):
else:
vals = self.values._get_cache()
return min(vals), max(vals)
-
+
def __len__(self):
return len(self.values.cache)
-
+
class Legend(object):
-
+
def __init__(self):
-
+
self.position = 'r'
self.layout = None
-
+
class ErrorBar(object):
-
+
PLUS = 1
MINUS = 2
PLUS_MINUS = 3
-
+
def __init__(self, _type, values):
-
+
self.type = _type
self.values = values
-
+
class Chart(object):
""" raw chart class """
-
+
GROUPING_CLUSTERED = 'clustered'
GROUPING_STANDARD = 'standard'
-
+
BAR_CHART = 1
LINE_CHART = 2
SCATTER_CHART = 3
-
+
def __init__(self, _type, grouping):
-
+
self._series = []
-
+
# public api
self.type = _type
self.grouping = grouping
@@ -198,46 +198,46 @@ class Chart(object):
self.lang = 'fr-FR'
self.title = ''
self.print_margins = dict(b=.75, l=.7, r=.7, t=.75, header=0.3, footer=.3)
-
+
# the containing drawing
self.drawing = Drawing()
-
+
# the offset for the plot part in percentage of the drawing size
self.width = .6
self.height = .6
self.margin_top = self._get_max_margin_top()
self.margin_left = 0
-
+
# the user defined shapes
self._shapes = []
-
+
def add_serie(self, serie):
-
+
serie.id = len(self._series)
self._series.append(serie)
self._compute_min_max()
if not None in [s.xvalues for s in self._series]:
self._compute_xmin_xmax()
-
+
def add_shape(self, shape):
-
+
shape._chart = self
self._shapes.append(shape)
-
+
def get_x_units(self):
""" calculate one unit for x axis in EMU """
return max([len(s.values._get_cache()) for s in self._series])
-
+
def get_y_units(self):
""" calculate one unit for y axis in EMU """
dh = pixels_to_EMU(self.drawing.height)
return (dh * self.height) / self.y_axis.max
-
+
def get_y_chars(self):
""" estimate nb of chars for y axis """
-
+
_max = max([max(s.values._get_cache()) for s in self._series])
return len(str(int(_max)))
@@ -265,14 +265,14 @@ class Chart(object):
if mul is not None:
maxi = maxi/mul
unit = unit/mul
-
+
if maxi / unit > 9:
# no more that 10 ticks
unit *= 2
-
+
self.y_axis.max = maxi
self.y_axis.unit = unit
-
+
def _compute_xmin_xmax(self):
""" compute x axis limits and units """
@@ -297,44 +297,44 @@ class Chart(object):
if mul is not None:
maxi = maxi/mul
unit = unit/mul
-
+
if maxi / unit > 9:
# no more that 10 ticks
unit *= 2
-
+
self.x_axis.max = maxi
self.x_axis.unit = unit
-
+
def _get_max_margin_top(self):
-
+
mb = Shape.FONT_HEIGHT + Shape.MARGIN_BOTTOM
plot_height = self.drawing.height * self.height
return float(self.drawing.height - plot_height - mb)/self.drawing.height
-
+
def _get_min_margin_left(self):
-
+
ml = (self.get_y_chars() * Shape.FONT_WIDTH) + Shape.MARGIN_LEFT
return float(ml)/self.drawing.width
def _get_margin_top(self):
""" get margin in percent """
-
+
return min(self.margin_top, self._get_max_margin_top())
-
+
def _get_margin_left(self):
-
+
return max(self._get_min_margin_left(), self.margin_left)
class BarChart(Chart):
def __init__(self):
super(BarChart, self).__init__(Chart.BAR_CHART, Chart.GROUPING_CLUSTERED)
-
+
class LineChart(Chart):
def __init__(self):
super(LineChart, self).__init__(Chart.LINE_CHART, Chart.GROUPING_STANDARD)
-
+
class ScatterChart(Chart):
def __init__(self):
super(ScatterChart, self).__init__(Chart.SCATTER_CHART, Chart.GROUPING_STANDARD)
-
-
+
+
diff --git a/tablib/packages/openpyxl/drawing.py b/tablib/packages/openpyxl/drawing.py
index c9cf084..d3dc00b 100644
--- a/tablib/packages/openpyxl/drawing.py
+++ b/tablib/packages/openpyxl/drawing.py
@@ -24,11 +24,11 @@ THE SOFTWARE.
'''
import math
-from openpyxl.style import Color
-from openpyxl.shared.units import pixels_to_EMU, EMU_to_pixels, short_color
+from .style import Color
+from .shared.units import pixels_to_EMU, EMU_to_pixels, short_color
class Shadow(object):
-
+
SHADOW_BOTTOM = 'b'
SHADOW_BOTTOM_LEFT = 'bl'
SHADOW_BOTTOM_RIGHT = 'br'
@@ -46,17 +46,17 @@ class Shadow(object):
self.alignment = self.SHADOW_BOTTOM_RIGHT
self.color = Color(Color.BLACK)
self.alpha = 50
-
+
class Drawing(object):
- """ a drawing object - eg container for shapes or charts
- we assume user specifies dimensions in pixels; units are
+ """ a drawing object - eg container for shapes or charts
+ we assume user specifies dimensions in pixels; units are
converted to EMU in the drawing part
"""
count = 0
def __init__(self):
-
+
self.name = ''
self.description = ''
self.coordinates = ((1,2), (16,8))
@@ -67,38 +67,38 @@ class Drawing(object):
self.resize_proportional = False
self.rotation = 0
# self.shadow = Shadow()
-
+
def _set_width(self, w):
-
+
if self.resize_proportional and w:
ratio = self._height / self._width
self._height = round(ratio * w)
self._width = w
-
+
def _get_width(self):
-
+
return self._width
-
+
width = property(_get_width, _set_width)
-
+
def _set_height(self, h):
-
+
if self.resize_proportional and h:
ratio = self._width / self._height
self._width = round(ratio * h)
self._height = h
-
+
def _get_height(self):
-
+
return self._height
-
+
height = property(_get_height, _set_height)
-
+
def set_dimension(self, w=0, h=0):
xratio = w / self._width
yratio = h / self._height
-
+
if self.resize_proportional and w and h:
if (xratio * self._height) < h:
self._height = math.ceil(xratio * self._height)
@@ -106,28 +106,28 @@ class Drawing(object):
else:
self._width = math.ceil(yratio * self._width)
self._height = height
-
+
def get_emu_dimensions(self):
""" return (x, y, w, h) in EMU """
-
+
return (pixels_to_EMU(self.left), pixels_to_EMU(self.top),
pixels_to_EMU(self._width), pixels_to_EMU(self._height))
-
+
class Shape(object):
""" a drawing inside a chart
coordiantes are specified by the user in the axis units
"""
-
+
MARGIN_LEFT = 6 + 13 + 1
MARGIN_BOTTOM = 17 + 11
-
+
FONT_WIDTH = 7
FONT_HEIGHT = 8
-
+
ROUND_RECT = 'roundRect'
RECT = 'rect'
-
+
# other shapes to define :
'''
"line"
@@ -317,9 +317,9 @@ class Shape(object):
"chartStar"
"chartPlus"
'''
-
+
def __init__(self, coordinates=((0,0), (1,1)), text=None, scheme="accent1"):
-
+
self.coordinates = coordinates # in axis unit
self.text = text
self.scheme = scheme
@@ -328,47 +328,47 @@ class Shape(object):
self._border_color = Color.BLACK[2:] #"F3B3C5"
self._color = Color.WHITE[2:]
self._text_color = Color.BLACK[2:]
-
+
def _get_border_color(self):
return self._border_color
-
+
def _set_border_color(self, color):
self._border_color = short_color(color)
-
+
border_color = property(_get_border_color, _set_border_color)
-
+
def _get_color(self):
return self._color
-
+
def _set_color(self, color):
self._color = short_color(color)
-
+
color = property(_get_color, _set_color)
-
+
def _get_text_color(self):
return self._text_color
-
+
def _set_text_color(self, color):
self._text_color = short_color(color)
-
+
text_color = property(_get_text_color, _set_text_color)
-
+
def _get_border_width(self):
-
+
return EMU_to_pixels(self._border_width)
-
+
def _set_border_width(self, w):
-
+
self._border_width = pixels_to_EMU(w)
print self._border_width
-
+
border_width = property(_get_border_width, _set_border_width)
-
+
def get_coordinates(self):
""" return shape coordinates in percentages (left, top, right, bottom) """
(x1, y1), (x2, y2) = self.coordinates
-
+
drawing_width = pixels_to_EMU(self._chart.drawing.width)
drawing_height = pixels_to_EMU(self._chart.drawing.height)
plot_width = drawing_width * self._chart.width
@@ -376,27 +376,26 @@ class Shape(object):
margin_left = self._chart._get_margin_left() * drawing_width
xunit = plot_width / self._chart.get_x_units()
-
+
margin_top = self._chart._get_margin_top() * drawing_height
yunit = self._chart.get_y_units()
-
+
x_start = (margin_left + (float(x1) * xunit)) / drawing_width
y_start = (margin_top + plot_height - (float(y1) * yunit)) / drawing_height
x_end = (margin_left + (float(x2) * xunit)) / drawing_width
y_end = (margin_top + plot_height - (float(y2) * yunit)) / drawing_height
-
+
def _norm_pct(pct):
""" force shapes to appear by truncating too large sizes """
if pct>1: pct = 1
elif pct<0: pct = 0
return pct
-
+
# allow user to specify y's in whatever order
# excel expect y_end to be lower
if y_end < y_start:
y_end, y_start = y_start, y_end
-
- return (_norm_pct(x_start), _norm_pct(y_start),
+
+ return (_norm_pct(x_start), _norm_pct(y_start),
_norm_pct(x_end), _norm_pct(y_end))
- \ No newline at end of file
diff --git a/tablib/packages/openpyxl/namedrange.py b/tablib/packages/openpyxl/namedrange.py
index 617847a..bffa978 100644
--- a/tablib/packages/openpyxl/namedrange.py
+++ b/tablib/packages/openpyxl/namedrange.py
@@ -29,7 +29,7 @@
import re
# package imports
-from openpyxl.shared.exc import NamedRangeException
+from .shared.exc import NamedRangeException
# constants
NAMED_RANGE_RE = re.compile("'?([^']*)'?!((\$([A-Za-z]+))?\$([0-9]+)(:(\$([A-Za-z]+))?(\$([0-9]+)))?)$")
diff --git a/tablib/packages/openpyxl/reader/__init__.py b/tablib/packages/openpyxl/reader/__init__.py
index a45d67e..9b0ee2f 100644
--- a/tablib/packages/openpyxl/reader/__init__.py
+++ b/tablib/packages/openpyxl/reader/__init__.py
@@ -26,8 +26,8 @@
"""Imports for the openpyxl.reader namespace."""
# package imports
-from openpyxl.reader import excel
-from openpyxl.reader import strings
-from openpyxl.reader import style
-from openpyxl.reader import workbook
-from openpyxl.reader import worksheet
+from ..reader import excel
+from ..reader import strings
+from ..reader import style
+from ..reader import workbook
+from ..reader import worksheet
diff --git a/tablib/packages/openpyxl/reader/excel.py b/tablib/packages/openpyxl/reader/excel.py
index ba633e6..3dc6547 100644
--- a/tablib/packages/openpyxl/reader/excel.py
+++ b/tablib/packages/openpyxl/reader/excel.py
@@ -29,32 +29,32 @@
from zipfile import ZipFile, ZIP_DEFLATED, BadZipfile
# package imports
-from openpyxl.shared.exc import OpenModeError, InvalidFileException
-from openpyxl.shared.ooxml import ARC_SHARED_STRINGS, ARC_CORE, ARC_APP, \
+from ..shared.exc import OpenModeError, InvalidFileException
+from ..shared.ooxml import ARC_SHARED_STRINGS, ARC_CORE, ARC_APP, \
ARC_WORKBOOK, PACKAGE_WORKSHEETS, ARC_STYLE
-from openpyxl.workbook import Workbook
-from openpyxl.reader.strings import read_string_table
-from openpyxl.reader.style import read_style_table
-from openpyxl.reader.workbook import read_sheets_titles, read_named_ranges, \
+from ..workbook import Workbook
+from ..reader.strings import read_string_table
+from ..reader.style import read_style_table
+from ..reader.workbook import read_sheets_titles, read_named_ranges, \
read_properties_core, get_sheet_ids
-from openpyxl.reader.worksheet import read_worksheet
-from openpyxl.reader.iter_worksheet import unpack_worksheet
+from ..reader.worksheet import read_worksheet
+from ..reader.iter_worksheet import unpack_worksheet
def load_workbook(filename, use_iterators = False):
"""Open the given filename and return the workbook
:param filename: the path to open
:type filename: string
-
+
:param use_iterators: use lazy load for cells
:type use_iterators: bool
:rtype: :class:`openpyxl.workbook.Workbook`
-
+
.. note::
-
+
When using lazy load, all worksheets will be :class:`openpyxl.reader.iter_worksheet.IterableWorksheet`
- and the returned workbook will be read-only.
+ and the returned workbook will be read-only.
"""
diff --git a/tablib/packages/openpyxl/reader/iter_worksheet.py b/tablib/packages/openpyxl/reader/iter_worksheet.py
index f8e9399..926116d 100644
--- a/tablib/packages/openpyxl/reader/iter_worksheet.py
+++ b/tablib/packages/openpyxl/reader/iter_worksheet.py
@@ -23,7 +23,7 @@
# @license: http://www.opensource.org/licenses/mit-license.php
# @author: Eric Gazoni
-""" Iterators-based worksheet reader
+""" Iterators-based worksheet reader
*Still very raw*
"""
@@ -32,18 +32,18 @@ import warnings
import operator
from functools import partial
from itertools import ifilter, groupby
-from openpyxl.worksheet import Worksheet
-from openpyxl.cell import coordinate_from_string, get_column_letter, Cell
-from openpyxl.reader.excel import get_sheet_ids
-from openpyxl.reader.strings import read_string_table
-from openpyxl.reader.style import read_style_table, NumberFormat
-from openpyxl.shared.date_time import SharedDate
-from openpyxl.reader.worksheet import read_dimension
-from openpyxl.shared.ooxml import (MIN_COLUMN, MAX_COLUMN, PACKAGE_WORKSHEETS,
+from ..worksheet import Worksheet
+from ..cell import coordinate_from_string, get_column_letter, Cell
+from ..reader.excel import get_sheet_ids
+from ..reader.strings import read_string_table
+from ..reader.style import read_style_table, NumberFormat
+from ..shared.date_time import SharedDate
+from ..reader.worksheet import read_dimension
+from ..shared.ooxml import (MIN_COLUMN, MAX_COLUMN, PACKAGE_WORKSHEETS,
MAX_ROW, MIN_ROW, ARC_SHARED_STRINGS, ARC_APP, ARC_STYLE)
from xml.etree.cElementTree import iterparse
from zipfile import ZipFile
-import openpyxl.cell
+from .. import cell
import re
import tempfile
import zlib
@@ -51,7 +51,7 @@ import zipfile
import struct
TYPE_NULL = Cell.TYPE_NULL
-MISSING_VALUE = None
+MISSING_VALUE = None
RE_COORDINATE = re.compile('^([A-Z]+)([0-9]+)$')
@@ -108,11 +108,11 @@ class RawCell(BaseRawCell):
def is_date(self):
res = (self.data_type == Cell.TYPE_NUMERIC
and self.number_format is not None
- and ('d' in self.number_format
+ and ('d' in self.number_format
or 'm' in self.number_format
or 'y' in self.number_format
or 'h' in self.number_format
- or 's' in self.number_format
+ or 's' in self.number_format
))
return res
@@ -121,7 +121,7 @@ def iter_rows(workbook_name, sheet_name, xml_source, range_string = '', row_offs
archive = get_archive_file(workbook_name)
- source = xml_source
+ source = xml_source
if range_string:
min_col, min_row, max_col, max_row = get_range_boundaries(range_string, row_offset, column_offset)
@@ -187,7 +187,7 @@ def get_range_boundaries(range_string, row = 0, column = 0):
min_col, min_row = coordinate_from_string(range_string)
min_col = column_index_from_string(min_col)
max_col = min_col + 1
- max_row = min_row
+ max_row = min_row
return (min_col, min_row, max_col, max_row)
@@ -215,7 +215,7 @@ def get_squared_range(p, min_col, min_row, max_col, max_row, string_table, style
for gap_row in xrange(current_row, row):
dummy_cells = get_missing_cells(gap_row, expected_columns)
-
+
yield tuple([dummy_cells[column] for column in expected_columns])
current_row = row
@@ -254,11 +254,11 @@ def get_squared_range(p, min_col, min_row, max_col, max_row, string_table, style
yield tuple(full_row)
-#------------------------------------------------------------------------------
+#------------------------------------------------------------------------------
class IterableWorksheet(Worksheet):
- def __init__(self, parent_workbook, title, workbook_name,
+ def __init__(self, parent_workbook, title, workbook_name,
sheet_codename, xml_source):
Worksheet.__init__(self, parent_workbook, title)
@@ -267,20 +267,20 @@ class IterableWorksheet(Worksheet):
self._xml_source = xml_source
def iter_rows(self, range_string = '', row_offset = 0, column_offset = 0):
- """ Returns a squared range based on the `range_string` parameter,
+ """ Returns a squared range based on the `range_string` parameter,
using generators.
-
+
:param range_string: range of cells (e.g. 'A1:C4')
:type range_string: string
-
+
:param row: row index of the cell (e.g. 4)
:type row: int
:param column: column index of the cell (e.g. 3)
:type column: int
-
+
:rtype: generator
-
+
"""
return iter_rows(workbook_name = self._workbook_name,
diff --git a/tablib/packages/openpyxl/reader/strings.py b/tablib/packages/openpyxl/reader/strings.py
index 525d502..e19e291 100644
--- a/tablib/packages/openpyxl/reader/strings.py
+++ b/tablib/packages/openpyxl/reader/strings.py
@@ -26,8 +26,8 @@
"""Read the shared strings table."""
# package imports
-from openpyxl.shared.xmltools import fromstring, QName
-from openpyxl.shared.ooxml import NAMESPACES
+from ..shared.xmltools import fromstring, QName
+from ..shared.ooxml import NAMESPACES
def read_string_table(xml_source):
diff --git a/tablib/packages/openpyxl/reader/style.py b/tablib/packages/openpyxl/reader/style.py
index 1286f9a..f773070 100644
--- a/tablib/packages/openpyxl/reader/style.py
+++ b/tablib/packages/openpyxl/reader/style.py
@@ -26,9 +26,9 @@
"""Read shared style definitions"""
# package imports
-from openpyxl.shared.xmltools import fromstring, QName
-from openpyxl.shared.exc import MissingNumberFormat
-from openpyxl.style import Style, NumberFormat
+from ..shared.xmltools import fromstring, QName
+from ..shared.exc import MissingNumberFormat
+from ..style import Style, NumberFormat
def read_style_table(xml_source):
diff --git a/tablib/packages/openpyxl/reader/workbook.py b/tablib/packages/openpyxl/reader/workbook.py
index 3419a31..d9bc161 100644
--- a/tablib/packages/openpyxl/reader/workbook.py
+++ b/tablib/packages/openpyxl/reader/workbook.py
@@ -26,11 +26,11 @@
"""Read in global settings to be maintained by the workbook object."""
# package imports
-from openpyxl.shared.xmltools import fromstring, QName
-from openpyxl.shared.ooxml import NAMESPACES
-from openpyxl.workbook import DocumentProperties
-from openpyxl.shared.date_time import W3CDTF_to_datetime
-from openpyxl.namedrange import NamedRange, split_named_range
+from ..shared.xmltools import fromstring, QName
+from ..shared.ooxml import NAMESPACES
+from ..workbook import DocumentProperties
+from ..shared.date_time import W3CDTF_to_datetime
+from ..namedrange import NamedRange, split_named_range
import datetime
diff --git a/tablib/packages/openpyxl/reader/worksheet.py b/tablib/packages/openpyxl/reader/worksheet.py
index f7f3a73..722b6fd 100644
--- a/tablib/packages/openpyxl/reader/worksheet.py
+++ b/tablib/packages/openpyxl/reader/worksheet.py
@@ -34,12 +34,12 @@ from itertools import ifilter
from StringIO import StringIO
# package imports
-from openpyxl.cell import Cell, coordinate_from_string
-from openpyxl.worksheet import Worksheet
+from ..cell import Cell, coordinate_from_string
+from ..worksheet import Worksheet
def _get_xml_iter(xml_source):
- if not hasattr(xml_source, 'name'):
+ if not hasattr(xml_source, 'name'):
return StringIO(xml_source)
else:
xml_source.seek(0)
@@ -47,7 +47,7 @@ def _get_xml_iter(xml_source):
def read_dimension(xml_source):
- source = _get_xml_iter(xml_source)
+ source = _get_xml_iter(xml_source)
it = iterparse(source)
@@ -73,7 +73,7 @@ def filter_cells((event, element)):
def fast_parse(ws, xml_source, string_table, style_table):
- source = _get_xml_iter(xml_source)
+ source = _get_xml_iter(xml_source)
it = iterparse(source)
@@ -98,13 +98,13 @@ def fast_parse(ws, xml_source, string_table, style_table):
# to avoid memory exhaustion, clear the item after use
element.clear()
-from openpyxl.reader.iter_worksheet import IterableWorksheet
+from ..reader.iter_worksheet import IterableWorksheet
def read_worksheet(xml_source, parent, preset_title, string_table,
style_table, workbook_name = None, sheet_codename = None):
"""Read an xml worksheet"""
if workbook_name and sheet_codename:
- ws = IterableWorksheet(parent, preset_title, workbook_name,
+ ws = IterableWorksheet(parent, preset_title, workbook_name,
sheet_codename, xml_source)
else:
ws = Worksheet(parent, preset_title)
diff --git a/tablib/packages/openpyxl/shared/__init__.py b/tablib/packages/openpyxl/shared/__init__.py
index ef0f171..8b560df 100644
--- a/tablib/packages/openpyxl/shared/__init__.py
+++ b/tablib/packages/openpyxl/shared/__init__.py
@@ -26,8 +26,8 @@
"""Imports for the openpyxl.shared namespace."""
# package imports
-from openpyxl.shared import date_time
-from openpyxl.shared import exc
-from openpyxl.shared import ooxml
-from openpyxl.shared import password_hasher
-from openpyxl.shared import xmltools
+from . import date_time
+from . import exc
+from . import ooxml
+from . import password_hasher
+from . import xmltools
diff --git a/tablib/packages/openpyxl/shared/xmltools.py b/tablib/packages/openpyxl/shared/xmltools.py
index 9f0f943..275cfca 100644
--- a/tablib/packages/openpyxl/shared/xmltools.py
+++ b/tablib/packages/openpyxl/shared/xmltools.py
@@ -41,7 +41,7 @@ except ImportError:
QName, fromstring, tostring
# package imports
-from openpyxl import __name__ as prefix
+from .. import __name__ as prefix
def get_document_content(xml_node):
diff --git a/tablib/packages/openpyxl/workbook.py b/tablib/packages/openpyxl/workbook.py
index 10a4564..bbb14b6 100644
--- a/tablib/packages/openpyxl/workbook.py
+++ b/tablib/packages/openpyxl/workbook.py
@@ -32,13 +32,13 @@ import datetime
import os
# package imports
-from openpyxl.worksheet import Worksheet
-from openpyxl.writer.dump_worksheet import DumpWorksheet, save_dump
-from openpyxl.writer.strings import StringTableBuilder
-from openpyxl.namedrange import NamedRange
-from openpyxl.style import Style
-from openpyxl.writer.excel import save_workbook
-from openpyxl.shared.exc import ReadOnlyWorkbookException
+from .worksheet import Worksheet
+from .writer.dump_worksheet import DumpWorksheet, save_dump
+from .writer.strings import StringTableBuilder
+from .namedrange import NamedRange
+from .style import Style
+from .writer.excel import save_workbook
+from .shared.exc import ReadOnlyWorkbookException
class DocumentProperties(object):
diff --git a/tablib/packages/openpyxl/worksheet.py b/tablib/packages/openpyxl/worksheet.py
index bfc873c..ea5e81b 100644
--- a/tablib/packages/openpyxl/worksheet.py
+++ b/tablib/packages/openpyxl/worksheet.py
@@ -29,15 +29,15 @@
import re
# package imports
-import openpyxl.cell
-from openpyxl.cell import coordinate_from_string, \
+from . import cell
+from .cell import coordinate_from_string, \
column_index_from_string, get_column_letter
-from openpyxl.shared.exc import SheetTitleException, \
+from .shared.exc import SheetTitleException, \
InsufficientCoordinatesException, CellCoordinatesException, \
NamedRangeException
-from openpyxl.shared.password_hasher import hash_password
-from openpyxl.style import Style, DEFAULTS as DEFAULTS_STYLE
-from openpyxl.drawing import Drawing
+from .shared.password_hasher import hash_password
+from .style import Style, DEFAULTS as DEFAULTS_STYLE
+from .drawing import Drawing
_DEFAULTS_STYLE_HASH = hash(DEFAULTS_STYLE)
@@ -344,7 +344,7 @@ class Worksheet(object):
if not coordinate in self._cells:
column, row = coordinate_from_string(coordinate)
- new_cell = openpyxl.cell.Cell(self, column, row)
+ new_cell = cell.Cell(self, column, row)
self._cells[coordinate] = new_cell
if column not in self.column_dimensions:
self.column_dimensions[column] = ColumnDimension(column)
@@ -354,7 +354,7 @@ class Worksheet(object):
def get_highest_row(self):
"""Returns the maximum row index containing data
-
+
:rtype: int
"""
if self.row_dimensions:
@@ -364,7 +364,7 @@ class Worksheet(object):
def get_highest_column(self):
"""Get the largest value for column currently stored.
-
+
:rtype: int
"""
if self.column_dimensions:
@@ -475,21 +475,21 @@ class Worksheet(object):
def append(self, list_or_dict):
"""Appends a group of values at the bottom of the current sheet.
-
+
* If it's a list: all values are added in order, starting from the first column
* If it's a dict: values are assigned to the columns indicated by the keys (numbers or letters)
-
+
:param list_or_dict: list or dict containing values to append
:type list_or_dict: list/tuple or dict
-
+
Usage:
-
+
* append(['This is A1', 'This is B1', 'This is C1'])
* **or** append({'A' : 'This is A1', 'C' : 'This is C1'})
* **or** append({0 : 'This is A1', 2 : 'This is C1'})
-
+
:raise: TypeError when list_or_dict is neither a list/tuple nor a dict
-
+
"""
row_idx = len(self.row_dimensions)
diff --git a/tablib/packages/openpyxl/writer/__init__.py b/tablib/packages/openpyxl/writer/__init__.py
index fff1f92..9eb0a21 100644
--- a/tablib/packages/openpyxl/writer/__init__.py
+++ b/tablib/packages/openpyxl/writer/__init__.py
@@ -26,9 +26,9 @@
"""Imports for the openpyxl.writer namespace."""
# package imports
-from openpyxl.writer import excel
-from openpyxl.writer import strings
-from openpyxl.writer import styles
-from openpyxl.writer import theme
-from openpyxl.writer import workbook
-from openpyxl.writer import worksheet
+from . import excel
+from . import strings
+from . import styles
+from . import theme
+from . import workbook
+from . import worksheet
diff --git a/tablib/packages/openpyxl/writer/charts.py b/tablib/packages/openpyxl/writer/charts.py
index 1d3dbd9..b5f4570 100644
--- a/tablib/packages/openpyxl/writer/charts.py
+++ b/tablib/packages/openpyxl/writer/charts.py
@@ -24,33 +24,33 @@ THE SOFTWARE.
@author: Eric Gazoni
'''
-from openpyxl.shared.xmltools import Element, SubElement, get_document_content
-from openpyxl.chart import Chart, ErrorBar
+from ..shared.xmltools import Element, SubElement, get_document_content
+from ..chart import Chart, ErrorBar
class ChartWriter(object):
-
+
def __init__(self, chart):
self.chart = chart
-
+
def write(self):
""" write a chart """
-
- root = Element('c:chartSpace',
+
+ root = Element('c:chartSpace',
{'xmlns:c':"http://schemas.openxmlformats.org/drawingml/2006/chart",
'xmlns:a':"http://schemas.openxmlformats.org/drawingml/2006/main",
'xmlns:r':"http://schemas.openxmlformats.org/officeDocument/2006/relationships"})
-
+
SubElement(root, 'c:lang', {'val':self.chart.lang})
self._write_chart(root)
self._write_print_settings(root)
self._write_shapes(root)
return get_document_content(root)
-
+
def _write_chart(self, root):
-
+
chart = self.chart
-
+
ch = SubElement(root, 'c:chart')
self._write_title(ch)
plot_area = SubElement(ch, 'c:plotArea')
@@ -63,7 +63,7 @@ class ChartWriter(object):
SubElement(mlayout, 'c:y', {'val':str(chart._get_margin_top())})
SubElement(mlayout, 'c:w', {'val':str(chart.width)})
SubElement(mlayout, 'c:h', {'val':str(chart.height)})
-
+
if chart.type == Chart.SCATTER_CHART:
subchart = SubElement(plot_area, 'c:scatterChart')
SubElement(subchart, 'c:scatterStyle', {'val':str('lineMarker')})
@@ -73,23 +73,23 @@ class ChartWriter(object):
SubElement(subchart, 'c:barDir', {'val':'col'})
else:
subchart = SubElement(plot_area, 'c:lineChart')
-
+
SubElement(subchart, 'c:grouping', {'val':chart.grouping})
-
+
self._write_series(subchart)
-
+
SubElement(subchart, 'c:marker', {'val':'1'})
SubElement(subchart, 'c:axId', {'val':str(chart.x_axis.id)})
SubElement(subchart, 'c:axId', {'val':str(chart.y_axis.id)})
-
+
if chart.type == Chart.SCATTER_CHART:
self._write_axis(plot_area, chart.x_axis, 'c:valAx')
else:
self._write_axis(plot_area, chart.x_axis, 'c:catAx')
self._write_axis(plot_area, chart.y_axis, 'c:valAx')
-
+
self._write_legend(ch)
-
+
SubElement(ch, 'c:plotVisOnly', {'val':'1'})
def _write_title(self, chart):
@@ -108,16 +108,16 @@ class ChartWriter(object):
SubElement(title, 'c:layout')
def _write_axis(self, plot_area, axis, label):
-
+
ax = SubElement(plot_area, label)
SubElement(ax, 'c:axId', {'val':str(axis.id)})
-
+
scaling = SubElement(ax, 'c:scaling')
SubElement(scaling, 'c:orientation', {'val':axis.orientation})
if label == 'c:valAx':
SubElement(scaling, 'c:max', {'val':str(axis.max)})
SubElement(scaling, 'c:min', {'val':str(axis.min)})
-
+
SubElement(ax, 'c:axPos', {'val':axis.position})
if label == 'c:valAx':
SubElement(ax, 'c:majorGridlines')
@@ -137,18 +137,18 @@ class ChartWriter(object):
else:
SubElement(ax, 'c:crossBetween', {'val':'between'})
SubElement(ax, 'c:majorUnit', {'val':str(axis.unit)})
-
+
def _write_series(self, subchart):
-
+
for i, serie in enumerate(self.chart._series):
ser = SubElement(subchart, 'c:ser')
SubElement(ser, 'c:idx', {'val':str(i)})
SubElement(ser, 'c:order', {'val':str(i)})
-
+
if serie.legend:
tx = SubElement(ser, 'c:tx')
self._write_serial(tx, serie.legend)
-
+
if serie.color:
sppr = SubElement(ser, 'c:spPr')
if self.chart.type == Chart.BAR_CHART:
@@ -159,17 +159,17 @@ class ChartWriter(object):
ln = SubElement(sppr, 'a:ln')
fill = SubElement(ln, 'a:solidFill')
SubElement(fill, 'a:srgbClr', {'val':serie.color})
-
+
if serie.error_bar:
self._write_error_bar(ser, serie)
-
+
marker = SubElement(ser, 'c:marker')
SubElement(marker, 'c:symbol', {'val':serie.marker})
if serie.labels:
cat = SubElement(ser, 'c:cat')
self._write_serial(cat, serie.labels)
-
+
if self.chart.type == Chart.SCATTER_CHART:
if serie.xvalues:
xval = SubElement(ser, 'c:xVal')
@@ -180,7 +180,7 @@ class ChartWriter(object):
else:
val = SubElement(ser, 'c:val')
self._write_serial(val, serie.values)
-
+
def _write_serial(self, node, serie, literal=False):
cache = serie._get_cache()
@@ -188,7 +188,7 @@ class ChartWriter(object):
typ = 'str'
else:
typ = 'num'
-
+
if not literal:
if typ == 'num':
ref = SubElement(node, 'c:numRef')
@@ -208,51 +208,51 @@ class ChartWriter(object):
values = (1,)
else:
values = cache
-
+
SubElement(data, 'c:ptCount', {'val':str(len(values))})
for j, val in enumerate(values):
point = SubElement(data, 'c:pt', {'idx':str(j)})
SubElement(point, 'c:v').text = str(val)
def _write_error_bar(self, node, serie):
-
- flag = {ErrorBar.PLUS_MINUS:'both',
- ErrorBar.PLUS:'plus',
+
+ flag = {ErrorBar.PLUS_MINUS:'both',
+ ErrorBar.PLUS:'plus',
ErrorBar.MINUS:'minus'}
-
+
eb = SubElement(node, 'c:errBars')
SubElement(eb, 'c:errBarType', {'val':flag[serie.error_bar.type]})
SubElement(eb, 'c:errValType', {'val':'cust'})
-
+
plus = SubElement(eb, 'c:plus')
self._write_serial(plus, serie.error_bar.values,
literal=(serie.error_bar.type==ErrorBar.MINUS))
-
+
minus = SubElement(eb, 'c:minus')
self._write_serial(minus, serie.error_bar.values,
literal=(serie.error_bar.type==ErrorBar.PLUS))
-
+
def _write_legend(self, chart):
-
+
legend = SubElement(chart, 'c:legend')
SubElement(legend, 'c:legendPos', {'val':self.chart.legend.position})
SubElement(legend, 'c:layout')
-
+
def _write_print_settings(self, root):
-
+
settings = SubElement(root, 'c:printSettings')
SubElement(settings, 'c:headerFooter')
margins = dict([(k, str(v)) for (k,v) in self.chart.print_margins.iteritems()])
SubElement(settings, 'c:pageMargins', margins)
SubElement(settings, 'c:pageSetup')
-
+
def _write_shapes(self, root):
-
+
if self.chart._shapes:
SubElement(root, 'c:userShapes', {'r:id':'rId1'})
-
+
def write_rels(self, drawing_id):
-
+
root = Element('Relationships', {'xmlns' : 'http://schemas.openxmlformats.org/package/2006/relationships'})
attrs = {'Id' : 'rId1',
'Type' : 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartUserShapes',
diff --git a/tablib/packages/openpyxl/writer/drawings.py b/tablib/packages/openpyxl/writer/drawings.py
index e6e5b30..8a6cce2 100644
--- a/tablib/packages/openpyxl/writer/drawings.py
+++ b/tablib/packages/openpyxl/writer/drawings.py
@@ -24,7 +24,7 @@ THE SOFTWARE.
@author: Eric Gazoni
'''
-from openpyxl.shared.xmltools import Element, SubElement, get_document_content
+from ..shared.xmltools import Element, SubElement, get_document_content
class DrawingWriter(object):
diff --git a/tablib/packages/openpyxl/writer/dump_worksheet.py b/tablib/packages/openpyxl/writer/dump_worksheet.py
index da4ef56..7f098f5 100644
--- a/tablib/packages/openpyxl/writer/dump_worksheet.py
+++ b/tablib/packages/openpyxl/writer/dump_worksheet.py
@@ -28,19 +28,19 @@
import datetime
import os
-from openpyxl.cell import column_index_from_string, get_column_letter, Cell
-from openpyxl.worksheet import Worksheet
-from openpyxl.shared.xmltools import XMLGenerator, get_document_content, \
+from ..cell import column_index_from_string, get_column_letter, Cell
+from ..worksheet import Worksheet
+from ..shared.xmltools import XMLGenerator, get_document_content, \
start_tag, end_tag, tag
-from openpyxl.shared.date_time import SharedDate
-from openpyxl.shared.ooxml import MAX_COLUMN, MAX_ROW
+from ..shared.date_time import SharedDate
+from ..shared.ooxml import MAX_COLUMN, MAX_ROW
from tempfile import NamedTemporaryFile
-from openpyxl.writer.excel import ExcelWriter
-from openpyxl.writer.strings import write_string_table
-from openpyxl.writer.styles import StyleWriter
-from openpyxl.style import Style, NumberFormat
+from ..writer.excel import ExcelWriter
+from ..writer.strings import write_string_table
+from ..writer.styles import StyleWriter
+from ..style import Style, NumberFormat
-from openpyxl.shared.ooxml import ARC_SHARED_STRINGS, ARC_CONTENT_TYPES, \
+from ..shared.ooxml import ARC_SHARED_STRINGS, ARC_CONTENT_TYPES, \
ARC_ROOT_RELS, ARC_WORKBOOK_RELS, ARC_APP, ARC_CORE, ARC_THEME, \
ARC_STYLE, ARC_WORKBOOK, \
PACKAGE_WORKSHEETS, PACKAGE_DRAWINGS, PACKAGE_CHARTS
@@ -58,7 +58,7 @@ STYLES = {'datetime' : {'type':Cell.TYPE_NUMERIC,
}
DATETIME_STYLE = Style()
-DATETIME_STYLE.number_format.format_code = NumberFormat.FORMAT_DATE_YYYYMMDD2
+DATETIME_STYLE.number_format.format_code = NumberFormat.FORMAT_DATE_YYYYMMDD2
BOUNDING_BOX_PLACEHOLDER = 'A1:%s%d' % (get_column_letter(MAX_COLUMN), MAX_ROW)
class DumpWorksheet(Worksheet):
@@ -66,7 +66,7 @@ class DumpWorksheet(Worksheet):
"""
.. warning::
- You shouldn't initialize this yourself, use :class:`openpyxl.workbook.Workbook` constructor instead,
+ You shouldn't initialize this yourself, use :class:`openpyxl.workbook.Workbook` constructor instead,
with `optimized_write = True`.
"""
@@ -101,7 +101,7 @@ class DumpWorksheet(Worksheet):
'xmlns:r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'})
start_tag(doc, 'sheetPr')
tag(doc, 'outlinePr',
- {'summaryBelow': '1',
+ {'summaryBelow': '1',
'summaryRight': '1'})
end_tag(doc, 'sheetPr')
tag(doc, 'dimension', {'ref': 'A1:%s' % (self.get_dimensions())})
@@ -141,7 +141,7 @@ class DumpWorksheet(Worksheet):
self._fileobj.flush()
def _close_header(self):
-
+
doc = self.header
#doc.endDocument()
@@ -159,7 +159,7 @@ class DumpWorksheet(Worksheet):
return 'A1'
else:
return '%s%d' % (get_column_letter(self._max_col), (self._max_row))
-
+
def append(self, row):
"""
@@ -185,7 +185,7 @@ class DumpWorksheet(Worksheet):
if cell is None:
continue
- coordinate = '%s%d' % (get_column_letter(col_idx+1), row_idx)
+ coordinate = '%s%d' % (get_column_letter(col_idx+1), row_idx)
attributes = {'r': coordinate}
if isinstance(cell, bool):
@@ -211,7 +211,7 @@ class DumpWorksheet(Worksheet):
tag(doc, 'v')
else:
tag(doc, 'v', body = '%s' % cell)
-
+
end_tag(doc, 'c')
@@ -253,4 +253,4 @@ class StyleDumpWriter(StyleWriter):
def _get_style_list(self, workbook):
return []
-
+
diff --git a/tablib/packages/openpyxl/writer/excel.py b/tablib/packages/openpyxl/writer/excel.py
index 192716e..1e915d9 100644
--- a/tablib/packages/openpyxl/writer/excel.py
+++ b/tablib/packages/openpyxl/writer/excel.py
@@ -30,19 +30,19 @@ from zipfile import ZipFile, ZIP_DEFLATED
from StringIO import StringIO
# package imports
-from openpyxl.shared.ooxml import ARC_SHARED_STRINGS, ARC_CONTENT_TYPES, \
+from ..shared.ooxml import ARC_SHARED_STRINGS, ARC_CONTENT_TYPES, \
ARC_ROOT_RELS, ARC_WORKBOOK_RELS, ARC_APP, ARC_CORE, ARC_THEME, \
ARC_STYLE, ARC_WORKBOOK, \
PACKAGE_WORKSHEETS, PACKAGE_DRAWINGS, PACKAGE_CHARTS
-from openpyxl.writer.strings import create_string_table, write_string_table
-from openpyxl.writer.workbook import write_content_types, write_root_rels, \
+from ..writer.strings import create_string_table, write_string_table
+from ..writer.workbook import write_content_types, write_root_rels, \
write_workbook_rels, write_properties_app, write_properties_core, \
write_workbook
-from openpyxl.writer.theme import write_theme
-from openpyxl.writer.styles import StyleWriter
-from openpyxl.writer.drawings import DrawingWriter, ShapeWriter
-from openpyxl.writer.charts import ChartWriter
-from openpyxl.writer.worksheet import write_worksheet, write_worksheet_rels
+from ..writer.theme import write_theme
+from ..writer.styles import StyleWriter
+from ..writer.drawings import DrawingWriter, ShapeWriter
+from ..writer.charts import ChartWriter
+from ..writer.worksheet import write_worksheet, write_worksheet_rels
class ExcelWriter(object):
@@ -56,7 +56,7 @@ class ExcelWriter(object):
"""Write the various xml files into the zip archive."""
# cleanup all worksheets
shared_string_table = self._write_string_table(archive)
-
+
archive.writestr(ARC_CONTENT_TYPES, write_content_types(self.workbook))
archive.writestr(ARC_ROOT_RELS, write_root_rels(self.workbook))
archive.writestr(ARC_WORKBOOK_RELS, write_workbook_rels(self.workbook))
diff --git a/tablib/packages/openpyxl/writer/strings.py b/tablib/packages/openpyxl/writer/strings.py
index 245c48b..1359e93 100644
--- a/tablib/packages/openpyxl/writer/strings.py
+++ b/tablib/packages/openpyxl/writer/strings.py
@@ -29,7 +29,7 @@
from StringIO import StringIO
# package imports
-from openpyxl.shared.xmltools import start_tag, end_tag, tag, XMLGenerator
+from ..shared.xmltools import start_tag, end_tag, tag, XMLGenerator
def create_string_table(workbook):
diff --git a/tablib/packages/openpyxl/writer/styles.py b/tablib/packages/openpyxl/writer/styles.py
index 7bf91dd..fb04343 100644
--- a/tablib/packages/openpyxl/writer/styles.py
+++ b/tablib/packages/openpyxl/writer/styles.py
@@ -26,17 +26,17 @@
"""Write the shared style table."""
# package imports
-from openpyxl.shared.xmltools import Element, SubElement
-from openpyxl.shared.xmltools import get_document_content
-from openpyxl import style
+from ..shared.xmltools import Element, SubElement
+from ..shared.xmltools import get_document_content
+from .. import style
class StyleWriter(object):
-
+
def __init__(self, workbook):
self._style_list = self._get_style_list(workbook)
- self._root = Element('styleSheet',
+ self._root = Element('styleSheet',
{'xmlns':'http://schemas.openxmlformats.org/spreadsheetml/2006/main'})
-
+
def _get_style_list(self, workbook):
crc = {}
for worksheet in workbook.worksheets:
@@ -51,7 +51,7 @@ class StyleWriter(object):
def get_style_by_hash(self):
return dict([(hash(style), id) \
for style, id in self.style_table.iteritems()])
-
+
def write_table(self):
number_format_table = self._write_number_formats()
fonts_table = self._write_fonts()
@@ -71,7 +71,7 @@ class StyleWriter(object):
"""
fonts = SubElement(self._root, 'fonts')
-
+
# default
font_node = SubElement(fonts, 'font')
SubElement(font_node, 'sz', {'val':'11'})
@@ -79,7 +79,7 @@ class StyleWriter(object):
SubElement(font_node, 'name', {'val':'Calibri'})
SubElement(font_node, 'family', {'val':'2'})
SubElement(font_node, 'scheme', {'val':'minor'})
-
+
# others
table = {}
index = 1
@@ -97,7 +97,7 @@ class StyleWriter(object):
if st.font.italic:
SubElement(font_node, 'i')
index += 1
-
+
fonts.attrib["count"] = str(index)
return table
@@ -122,7 +122,7 @@ class StyleWriter(object):
if hash(st.fill.end_color) != hash(style.DEFAULTS.fill.end_color):
SubElement(node, 'bgColor', {'rgb':str(st.fill.start_color.index)})
index += 1
-
+
fills.attrib["count"] = str(index)
return table
@@ -136,7 +136,7 @@ class StyleWriter(object):
SubElement(border, 'top')
SubElement(border, 'bottom')
SubElement(border, 'diagonal')
-
+
# others
table = {}
index = 1
@@ -150,40 +150,40 @@ class StyleWriter(object):
node = SubElement(border, side, {'style':obj.border_style})
SubElement(node, 'color', {'rgb':str(obj.color.index)})
index += 1
-
+
borders.attrib["count"] = str(index)
return table
def _write_cell_style_xfs(self):
cell_style_xfs = SubElement(self._root, 'cellStyleXfs', {'count':'1'})
- xf = SubElement(cell_style_xfs, 'xf',
+ xf = SubElement(cell_style_xfs, 'xf',
{'numFmtId':"0", 'fontId':"0", 'fillId':"0", 'borderId':"0"})
-
+
def _write_cell_xfs(self, number_format_table, fonts_table, fills_table, borders_table):
""" write styles combinations based on ids found in tables """
-
+
# writing the cellXfs
- cell_xfs = SubElement(self._root, 'cellXfs',
+ cell_xfs = SubElement(self._root, 'cellXfs',
{'count':'%d' % (len(self._style_list) + 1)})
-
+
# default
def _get_default_vals():
- return dict(numFmtId='0', fontId='0', fillId='0',
+ return dict(numFmtId='0', fontId='0', fillId='0',
xfId='0', borderId='0')
-
+
SubElement(cell_xfs, 'xf', _get_default_vals())
-
+
for st in self._style_list:
vals = _get_default_vals()
-
+
if hash(st.font) != hash(style.DEFAULTS.font):
vals['fontId'] = fonts_table[hash(st.font)]
vals['applyFont'] = '1'
-
+
if hash(st.borders) != hash(style.DEFAULTS.borders):
vals['borderId'] = borders_table[hash(st.borders)]
vals['applyBorder'] = '1'
-
+
if hash(st.fill) != hash(style.DEFAULTS.fill):
vals['fillId'] = fills_table[hash(st.fill)]
vals['applyFillId'] = '1'
@@ -191,7 +191,7 @@ class StyleWriter(object):
if st.number_format != style.DEFAULTS.number_format:
vals['numFmtId'] = '%d' % number_format_table[st.number_format]
vals['applyNumberFormat'] = '1'
-
+
if hash(st.alignment) != hash(style.DEFAULTS.alignment):
vals['applyAlignment'] = '1'
@@ -209,7 +209,7 @@ class StyleWriter(object):
def _write_cell_style(self):
cell_styles = SubElement(self._root, 'cellStyles', {'count':'1'})
- cell_style = SubElement(cell_styles, 'cellStyle',
+ cell_style = SubElement(cell_styles, 'cellStyle',
{'name':"Normal", 'xfId':"0", 'builtinId':"0"})
def _write_dxfs(self):
@@ -217,7 +217,7 @@ class StyleWriter(object):
def _write_table_styles(self):
- table_styles = SubElement(self._root, 'tableStyles',
+ table_styles = SubElement(self._root, 'tableStyles',
{'count':'0', 'defaultTableStyle':'TableStyleMedium9',
'defaultPivotStyle':'PivotStyleLight16'})
@@ -245,12 +245,12 @@ class StyleWriter(object):
num_fmt_offset += 1
exceptions_list.append(number_format)
- num_fmts = SubElement(self._root, 'numFmts',
+ num_fmts = SubElement(self._root, 'numFmts',
{'count':'%d' % len(exceptions_list)})
for number_format in exceptions_list :
- SubElement(num_fmts, 'numFmt',
+ SubElement(num_fmts, 'numFmt',
{'numFmtId':'%d' % number_format_table[number_format],
- 'formatCode':'%s' % number_format.format_code})
-
+ 'formatCode':'%s' % number_format.format_code})
+
return number_format_table
diff --git a/tablib/packages/openpyxl/writer/theme.py b/tablib/packages/openpyxl/writer/theme.py
index 4b1723b..80700f2 100644
--- a/tablib/packages/openpyxl/writer/theme.py
+++ b/tablib/packages/openpyxl/writer/theme.py
@@ -27,7 +27,7 @@
"""Write the theme xml based on a fixed string."""
# package imports
-from openpyxl.shared.xmltools import fromstring, get_document_content
+from ..shared.xmltools import fromstring, get_document_content
def write_theme():
diff --git a/tablib/packages/openpyxl/writer/workbook.py b/tablib/packages/openpyxl/writer/workbook.py
index 5d05b31..e7b390c 100644
--- a/tablib/packages/openpyxl/writer/workbook.py
+++ b/tablib/packages/openpyxl/writer/workbook.py
@@ -26,12 +26,12 @@
"""Write the workbook global settings to the archive."""
# package imports
-from openpyxl.shared.xmltools import Element, SubElement
-from openpyxl.cell import absolute_coordinate
-from openpyxl.shared.xmltools import get_document_content
-from openpyxl.shared.ooxml import NAMESPACES, ARC_CORE, ARC_WORKBOOK, \
+from ..shared.xmltools import Element, SubElement
+from ..cell import absolute_coordinate
+from ..shared.xmltools import get_document_content
+from ..shared.ooxml import NAMESPACES, ARC_CORE, ARC_WORKBOOK, \
ARC_APP, ARC_THEME, ARC_STYLE, ARC_SHARED_STRINGS
-from openpyxl.shared.date_time import datetime_to_W3CDTF
+from ..shared.date_time import datetime_to_W3CDTF
def write_properties_core(properties):
diff --git a/tablib/packages/openpyxl/writer/worksheet.py b/tablib/packages/openpyxl/writer/worksheet.py
index ed85fcb..d9c493a 100644
--- a/tablib/packages/openpyxl/writer/worksheet.py
+++ b/tablib/packages/openpyxl/writer/worksheet.py
@@ -29,8 +29,8 @@
from StringIO import StringIO # cStringIO doesn't handle unicode
# package imports
-from openpyxl.cell import coordinate_from_string, column_index_from_string
-from openpyxl.shared.xmltools import Element, SubElement, XMLGenerator, \
+from ..cell import coordinate_from_string, column_index_from_string
+from ..shared.xmltools import Element, SubElement, XMLGenerator, \
get_document_content, start_tag, end_tag, tag
@@ -100,7 +100,7 @@ def write_worksheet_sheetviews(doc, worksheet):
tag(doc, 'selection', selectionAttrs)
end_tag(doc, 'sheetView')
end_tag(doc, 'sheetViews')
-
+
def write_worksheet_cols(doc, worksheet):
"""Write worksheet columns to xml."""