def parse(self): src = self.archive.read(self.workbook_part_name) node = fromstring(src) package = WorkbookPackage.from_tree(node) if package.properties.date1904: self.wb.epoch = CALENDAR_MAC_1904 self.wb.code_name = package.properties.codeName self.wb.active = package.active self.wb.views = package.bookViews self.sheets = package.sheets self.wb.calculation = package.calcPr self.caches = package.pivotCaches #external links contain cached worksheets and can be very big if not self.keep_links: package.externalReferences = [] for ext_ref in package.externalReferences: rel = self.rels[ext_ref.id] self.wb._external_links.append( read_external_link(self.archive, rel.Target)) if package.definedNames: package.definedNames._cleanup() self.wb.defined_names = package.definedNames self.wb.security = package.workbookProtection
def test_broken_sheet_ref(self, datadir, recwarn, WorkbookParser): from openpyxl.packaging.workbook import WorkbookPackage datadir.chdir() with open("workbook_missing_id.xml", "rb") as src: xml = src.read() node = fromstring(xml) wb = WorkbookPackage.from_tree(node) archive = ZipFile(BytesIO(), "a") archive.write("workbook_links.xml", ARC_WORKBOOK) archive.writestr(ARC_WORKBOOK_RELS, b"<root />") parser = WorkbookParser(archive, ARC_WORKBOOK) parser.sheets = wb.sheets sheets = parser.find_sheets() list(sheets) w = recwarn.pop() assert issubclass(w.category, UserWarning)