# Path: openpyxl/writer/strings.py
# class StringTableBuilder(object):
# 
#     def __init__(self):
# 
#         self.counter = 0
#         self.dct = {}
# 
#     def add(self, key):
# 
#         key = key.strip()
#         try:
#             return self.dct[key]
#         except KeyError:
#             res = self.dct[key] = self.counter
#             self.counter += 1
#             return res
# 
#     def get_table(self):
# 
#         return self.dct
# 
# Path: openpyxl/style.py
# class Style(HashableObject):
#     """Style object containing all formatting details."""
#     __fields__ = ('font',
#                   'fill',
#                   'borders',
#                   'alignment',
#                   'number_format',
#                   'protection')
#     __slots__ = __fields__
# 
#     def __init__(self):
#         super(Style, self).__init__()
#         self.font = Font()
#         self.fill = Fill()
#         self.borders = Borders()
#         self.alignment = Alignment()
#         self.number_format = NumberFormat()
#         self.protection = Protection()
# 
# Path: openpyxl/writer/excel.py
# def save_workbook(workbook, filename):
#     """Save the given workbook on the filesystem under the name filename.
# 
#     :param workbook: the workbook to save
#     :type workbook: :class:`openpyxl.workbook.Workbook`
# 
#     :param filename: the path to which save the workbook
#     :type filename: string
# 
#     :rtype: bool
# 
#     """
#     writer = ExcelWriter(workbook)
#     writer.save(filename)
#     return True


import datetime
import os
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
        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

# Path: openpyxl/writer/strings.py
# class StringTableBuilder(object):
# 
#     def __init__(self):
# 
#         self.counter = 0
#         self.dct = {}
# 
#     def add(self, key):
# 
#         key = key.strip()
#         try:
#             return self.dct[key]
#         except KeyError:
#             res = self.dct[key] = self.counter
#             self.counter += 1
#             return res
# 
#     def get_table(self):
# 
#         return self.dct
# 
# Path: openpyxl/style.py
# class Style(HashableObject):
#     """Style object containing all formatting details."""
#     __fields__ = ('font',
#                   'fill',
#                   'borders',
#                   'alignment',
#                   'number_format',
#                   'protection')
#     __slots__ = __fields__
# 
#     def __init__(self):
#         super(Style, self).__init__()
#         self.font = Font()
#         self.fill = Fill()
#         self.borders = Borders()
#         self.alignment = Alignment()
#         self.number_format = NumberFormat()
#         self.protection = Protection()
# 
# Path: openpyxl/writer/excel.py
# def save_workbook(workbook, filename):
#     """Save the given workbook on the filesystem under the name filename.
# 
#     :param workbook: the workbook to save
#     :type workbook: :class:`openpyxl.workbook.Workbook`
# 
#     :param filename: the path to which save the workbook
#     :type filename: string
# 
#     :rtype: bool
# 
#     """
#     writer = ExcelWriter(workbook)
#     writer.save(filename)
#     return True


# Path: openpyxl/workbook.py
import datetime
import os
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

        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()