summaryrefslogtreecommitdiff
path: root/tablib/packages/openpyxl/workbook.py
diff options
context:
space:
mode:
Diffstat (limited to 'tablib/packages/openpyxl/workbook.py')
-rw-r--r--tablib/packages/openpyxl/workbook.py186
1 files changed, 186 insertions, 0 deletions
diff --git a/tablib/packages/openpyxl/workbook.py b/tablib/packages/openpyxl/workbook.py
new file mode 100644
index 0000000..10a4564
--- /dev/null
+++ b/tablib/packages/openpyxl/workbook.py
@@ -0,0 +1,186 @@
+# file openpyxl/workbook.py
+
+# Copyright (c) 2010 openpyxl
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+# @license: http://www.opensource.org/licenses/mit-license.php
+# @author: Eric Gazoni
+
+"""Workbook is the top-level container for all document information."""
+
+__docformat__ = "restructuredtext en"
+
+# Python stdlib imports
+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
+
+
+class DocumentProperties(object):
+ """High-level properties of the document."""
+
+ def __init__(self):
+ self.creator = 'Unknown'
+ self.last_modified_by = self.creator
+ self.created = datetime.datetime.now()
+ self.modified = datetime.datetime.now()
+ self.title = 'Untitled'
+ self.subject = ''
+ self.description = ''
+ self.keywords = ''
+ self.category = ''
+ self.company = 'Microsoft Corporation'
+
+
+class DocumentSecurity(object):
+ """Security information about the document."""
+
+ def __init__(self):
+ self.lock_revision = False
+ self.lock_structure = False
+ self.lock_windows = False
+ self.revision_password = ''
+ self.workbook_password = ''
+
+
+class Workbook(object):
+ """Workbook is the container for all other parts of the document."""
+
+ def __init__(self, optimized_write = False):
+ self.worksheets = []
+ self._active_sheet_index = 0
+ self._named_ranges = []
+ self.properties = DocumentProperties()
+ self.style = Style()
+ self.security = DocumentSecurity()
+ self.__optimized_write = optimized_write
+ self.__optimized_read = False
+ self.strings_table_builder = StringTableBuilder()
+
+ if not optimized_write:
+ self.worksheets.append(Worksheet(self))
+
+ def _set_optimized_read(self):
+ self.__optimized_read = True
+
+ def get_active_sheet(self):
+ """Returns the current active sheet."""
+ return self.worksheets[self._active_sheet_index]
+
+ def create_sheet(self, index = None):
+ """Create a worksheet (at an optional index).
+
+ :param index: optional position at which the sheet will be inserted
+ :type index: int
+
+ """
+
+ if self.__optimized_read:
+ raise ReadOnlyWorkbookException('Cannot create new sheet in a read-only workbook')
+
+ if self.__optimized_write :
+ new_ws = DumpWorksheet(parent_workbook = self)
+ else:
+ new_ws = Worksheet(parent_workbook = self)
+
+ self.add_sheet(worksheet = new_ws, index = index)
+ return new_ws
+
+ def add_sheet(self, worksheet, index = None):
+ """Add an existing worksheet (at an optional index)."""
+ if index is None:
+ index = len(self.worksheets)
+ self.worksheets.insert(index, worksheet)
+
+ def remove_sheet(self, worksheet):
+ """Remove a worksheet from this workbook."""
+ self.worksheets.remove(worksheet)
+
+ def get_sheet_by_name(self, name):
+ """Returns a worksheet by its name.
+
+ Returns None if no worksheet has the name specified.
+
+ :param name: the name of the worksheet to look for
+ :type name: string
+
+ """
+ requested_sheet = None
+ for sheet in self.worksheets:
+ if sheet.title == name:
+ requested_sheet = sheet
+ break
+ return requested_sheet
+
+ def get_index(self, worksheet):
+ """Return the index of the worksheet."""
+ return self.worksheets.index(worksheet)
+
+ def get_sheet_names(self):
+ """Returns the list of the names of worksheets in the workbook.
+
+ Names are returned in the worksheets order.
+
+ :rtype: list of strings
+
+ """
+ return [s.title for s in self.worksheets]
+
+ def create_named_range(self, name, worksheet, range):
+ """Create a new named_range on a worksheet"""
+ assert isinstance(worksheet, Worksheet)
+ named_range = NamedRange(name, [(worksheet, range)])
+ self.add_named_range(named_range)
+
+ def get_named_ranges(self):
+ """Return all named ranges"""
+ return self._named_ranges
+
+ def add_named_range(self, named_range):
+ """Add an existing named_range to the list of named_ranges."""
+ self._named_ranges.append(named_range)
+
+ def get_named_range(self, name):
+ """Return the range specified by name."""
+ requested_range = None
+ for named_range in self._named_ranges:
+ if named_range.name == name:
+ requested_range = named_range
+ break
+ return requested_range
+
+ def remove_named_range(self, named_range):
+ """Remove a named_range from this workbook."""
+ self._named_ranges.remove(named_range)
+
+ def save(self, filename):
+ """ shortcut """
+ if self.__optimized_write:
+ save_dump(self, filename)
+ else:
+ save_workbook(self, filename)