Example #1
0
    def write_comments(self):
        # produce xml
        root = Element("{%s}comments" % SHEET_MAIN_NS)
        authorlist_tag = SubElement(root, "{%s}authors" % SHEET_MAIN_NS)
        for author in self.authors:
            leaf = SubElement(authorlist_tag, "{%s}author" % SHEET_MAIN_NS)
            leaf.text = author

        commentlist_tag = SubElement(root, "{%s}commentList" % SHEET_MAIN_NS)
        for comment in self.comments:
            attrs = {
                'ref': comment._parent.get_coordinate(),
                'authorId': self.author_to_id[comment.author],
                'shapeId': '0'
            }
            comment_tag = SubElement(commentlist_tag,
                                     "{%s}comment" % SHEET_MAIN_NS, attrs)

            text_tag = SubElement(comment_tag, "{%s}text" % SHEET_MAIN_NS)
            run_tag = SubElement(text_tag, "{%s}r" % SHEET_MAIN_NS)
            SubElement(run_tag, "{%s}rPr" % SHEET_MAIN_NS)
            t_tag = SubElement(run_tag, "{%s}t" % SHEET_MAIN_NS)
            t_tag.text = comment.text

        return get_document_content(root)
Example #2
0
def write_workbook(workbook):
    """Write the core workbook xml."""
    root = Element('{%s}workbook' % SHEET_MAIN_NS)
    SubElement(
        root, '{%s}fileVersion' % SHEET_MAIN_NS, {
            'appName': 'xl',
            'lastEdited': '4',
            'lowestEdited': '4',
            'rupBuild': '4505'
        })
    SubElement(root, '{%s}workbookPr' % SHEET_MAIN_NS, {
        'defaultThemeVersion': '124226',
        'codeName': 'ThisWorkbook'
    })

    # book views
    book_views = SubElement(root, '{%s}bookViews' % SHEET_MAIN_NS)
    SubElement(
        book_views, '{%s}workbookView' % SHEET_MAIN_NS, {
            'activeTab':
            '%d' % workbook.get_index(workbook.get_active_sheet()),
            'autoFilterDateGrouping': '1',
            'firstSheet': '0',
            'minimized': '0',
            'showHorizontalScroll': '1',
            'showSheetTabs': '1',
            'showVerticalScroll': '1',
            'tabRatio': '600',
            'visibility': 'visible'
        })

    # worksheets
    sheets = SubElement(root, '{%s}sheets' % SHEET_MAIN_NS)
    for i, sheet in enumerate(workbook.worksheets):
        sheet_node = SubElement(
            sheets, '{%s}sheet' % SHEET_MAIN_NS, {
                'name': sheet.title,
                'sheetId': '%d' % (i + 1),
                '{%s}id' % REL_NS: 'rId%d' % (i + 1)
            })
        if not sheet.sheet_state == sheet.SHEETSTATE_VISIBLE:
            sheet_node.set('state', sheet.sheet_state)

    # Defined names
    defined_names = SubElement(root, '{%s}definedNames' % SHEET_MAIN_NS)

    # Defined names -> named ranges
    for named_range in workbook.get_named_ranges():
        name = SubElement(defined_names, '{%s}definedName' % SHEET_MAIN_NS,
                          {'name': named_range.name})
        if named_range.scope:
            name.set('localSheetId',
                     '%s' % workbook.get_index(named_range.scope))

        if isinstance(named_range, NamedRange):
            # as there can be many cells in one range, generate the list of ranges
            dest_cells = []
            for worksheet, range_name in named_range.destinations:
                dest_cells.append("'%s'!%s" % (worksheet.title.replace(
                    "'", "''"), absolute_coordinate(range_name)))

            # finally write the cells list
            name.text = ','.join(dest_cells)
        else:
            assert isinstance(named_range, NamedRangeContainingValue)
            name.text = named_range.value

    # Defined names -> autoFilter
    for i, sheet in enumerate(workbook.worksheets):
        #continue
        auto_filter = sheet.auto_filter
        if not auto_filter:
            continue
        name = SubElement(
            defined_names, '{%s}definedName' % SHEET_MAIN_NS,
            dict(name='_xlnm._FilterDatabase', localSheetId=str(i),
                 hidden='1'))
        name.text = "'%s'!%s" % (sheet.title.replace(
            "'", "''"), absolute_coordinate(auto_filter))

    SubElement(root, '{%s}calcPr' % SHEET_MAIN_NS, {
        'calcId': '124519',
        'calcMode': 'auto',
        'fullCalcOnLoad': '1'
    })
    return get_document_content(root)