.rels file without updating every reference to it can break additional parts.
Locate the Relationship Files
_rels/.relsconnects the package root to the workbook and to the document properties.xl/_rels/workbook.xml.relsconnects the workbook to worksheets, styles, shared strings, the theme, and other workbook parts.
Relationship IDs are local to their own .rels file. The same ID, such as rId1, can appear in both files and mean two different things.
What Healthy Relationship Files Look Like
The root relationships file tells Excel where the workbook and the document properties are. Reformatted from the clean reference workbook:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/>
</Relationships>
The workbook relationships file maps the r:id values used in workbook.xml to real parts. Here rId1 and rId2 are the two worksheets, and the other four relationships are supporting parts:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>
<Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet2.xml"/>
<Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/>
<Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain" Target="calcChain.xml"/>
<Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/>
<Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
</Relationships>
<!-- xl/workbook.xml: each sheet carries an r:id that must match an Id above -->
<sheets>
<sheet name="Sheet1" sheetId="1" r:id="rId1"/>
<sheet name="Sheet2" sheetId="2" r:id="rId2"/>
</sheets>
A Target without a leading slash is resolved from the folder of the part that owns the .rels file. For xl/_rels/workbook.xml.rels that folder is xl/, so worksheets/sheet1.xml means xl/worksheets/sheet1.xml. For _rels/.rels the folder is the package root, so xl/workbook.xml is already complete.
Duplicate Relationship IDs
Within one .rels file every Id must be unique. Here an extra relationship has been added that reuses rId3, which is already taken. In the workbook file it also points at a worksheet that does not exist. In the root file the added line is worse: it repeats the Target attribute, which makes the XML invalid, so the file cannot be parsed at all.
<!-- xl/_rels/workbook.xml.rels -->
<Relationship Id="rId3" Type=".../relationships/theme" Target="theme/theme1.xml"/>
...
<Relationship Id="rId3" Type=".../relationships/worksheet" Target="worksheets/sheet99.xml"/>
<!-- ↑ CORRUPT: rId3 is already used, and sheet99.xml does not exist -->
<!-- _rels/.rels -->
<Relationship Id="rId3" Type=".../relationships/extended-properties" Target="docProps/app.xml"/>
...
<Relationship Id="rId3" Type=".../relationships/extended-properties"
Target="docProps/app.xml" Target="duplicate.xml"/>
<!-- ↑ CORRUPT: duplicate Id and a repeated Target attribute -->
Fix: Work out which line belongs. Check which ID workbook.xml actually uses (rId1 and rId2 for the two sheets) and whether any part is genuinely supposed to live at the stray target. In both cases the stray line points at nothing real and no sheet refers to it, so delete it. Do not renumber IDs unless you also update every source reference.
<!-- Fixed: the stray duplicate lines are removed, the original rId3 entries stay -->
Empty Target
The relationship exists, but its Target is blank, so there is no path to resolve. In the workbook file one extra relationship has an empty target. In the root file the targets of the workbook and properties relationships have both been blanked, which leaves Excel with no way to find the workbook.
<!-- xl/_rels/workbook.xml.rels -->
<Relationship Id="rId888" Type=".../relationships/worksheet" Target=""/>
<!-- ↑ CORRUPT: empty target -->
<!-- _rels/.rels -->
<Relationship Id="rId3" Type=".../relationships/extended-properties" Target=""/>
<!-- ↑ CORRUPT: should be docProps/app.xml -->
<Relationship Id="rId1" Type=".../relationships/officeDocument" Target=""/>
<!-- ↑ CORRUPT: should be xl/workbook.xml -->
Fix: For the root file, the relationship type tells you what the target must be. The officeDocument relationship points at xl/workbook.xml, extended-properties at docProps/app.xml, and core-properties at docProps/core.xml. For the extra worksheet relationship in the workbook file, no worksheet exists for it, so delete the line. Only fill in a target when you have confirmed the part exists.
<!-- Fixed: _rels/.rels -->
<Relationship Id="rId3" Type=".../relationships/extended-properties" Target="docProps/app.xml"/>
<Relationship Id="rId1" Type=".../relationships/officeDocument" Target="xl/workbook.xml"/>
Target Points to a Part That Does Not Exist
The relationship is well-formed and complete, but the path it names is not in the ZIP. The path may have a typo, point to a renamed file, or be left over from a part that was deleted.
<!-- xl/_rels/workbook.xml.rels -->
<Relationship Id="rId999" Type=".../relationships/worksheet" Target="worksheets/nonexistent.xml"/>
<!-- ↑ CORRUPT: xl/worksheets/nonexistent.xml is not in the archive -->
<!-- _rels/.rels -->
<Relationship Id="rId999" Type=".../relationships/officeDocument" Target="xl/nonexistent.xml"/>
<!-- ↑ CORRUPT: a second "workbook" relationship pointing at nothing -->
Fix: List the files in the matching folder and identify the intended part. If a real part exists under a different name, point the Target at it only after opening it to confirm. If nothing matches, the part is lost or the relationship is an unwanted extra, so delete the line. Take extra care in _rels/.rels: a workbook package should have one officeDocument relationship, and it must point at the real workbook.
<!-- Fixed: both stray lines removed -->
Relationship Missing Its Type
Every relationship needs an Id, a Type, and a Target. Excel uses the type to decide how to read the target, so a relationship without one cannot be used.
<Relationship Id="rId777" Target="xl/workbook.xml"/>
<!-- ↑ CORRUPT: no Type attribute -->
Fix: If the line is a stray extra, delete it. If it is a real relationship that lost its type, add the type that matches the target. The types you will meet most often are:
.../relationships/officeDocument:xl/workbook.xml, from_rels/.rels.../relationships/worksheet: a worksheet, for exampleworksheets/sheet1.xml.../relationships/styles:styles.xml.../relationships/sharedStrings:sharedStrings.xml.../relationships/theme:theme/theme1.xml.../relationships/calcChain:calcChain.xml
<!-- Fixed, if the line was a real relationship -->
<Relationship Id="rId777"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
Target="xl/workbook.xml"/>
Required Relationship Removed
A relationship is simply gone. In the root file this is the worst case: without the officeDocument relationship Excel cannot find the workbook, even though xl/workbook.xml is sitting in the ZIP.
<!-- _rels/.rels: only the core-properties relationship is left -->
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId2" Type=".../metadata/core-properties" Target="docProps/core.xml"/>
<!-- ← CORRUPT: officeDocument (rId1) and extended-properties (rId3) are gone -->
</Relationships>
Fix: Add the missing relationships back. Their targets are fixed by convention, so you do not need a backup: the workbook is always xl/workbook.xml and the application properties are docProps/app.xml. Add them inside the existing <Relationships> element.
<!-- Fixed: add inside <Relationships> -->
<Relationship Id="rId1"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
Target="xl/workbook.xml"/>
<Relationship Id="rId3"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"
Target="docProps/app.xml"/>
A .rels File Is Missing Entirely
If a whole relationship file is gone, every link it described is gone with it. Without _rels/.rels Excel cannot find the workbook. Without xl/_rels/workbook.xml.rels it cannot find the worksheets, styles, shared strings, or theme.
Corrupted.xlsx
[Content_Types].xml
_rels/
<- CORRUPT: .rels is not in this folder
xl/
_rels/
<- CORRUPT: workbook.xml.rels is not in this folder
Fix: Recreate the file using the healthy examples at the top of this guide. The Id values for the worksheets are the one thing you must get right: they have to match the r:id values in workbook.xml (rId1 for Sheet1 and rId2 for Sheet2 here). For the supporting parts the IDs only need to be unique within the file, and each Type must match its target. Include a relationship for every part that exists in the package, then check that every Target resolves to a real file.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
<Relationship Id="rId1" Type=".../relationships/worksheet" Target="worksheets/sheet1.xml"/>
<Relationship Id="rId2" Type=".../relationships/worksheet" Target="worksheets/sheet2.xml"/>
<Relationship Id="rId3" Type=".../relationships/theme" Target="theme/theme1.xml"/>
<Relationship Id="rId4" Type=".../relationships/styles" Target="styles.xml"/>
<Relationship Id="rId5" Type=".../relationships/sharedStrings" Target="sharedStrings.xml"/>
<Relationship Id="rId6" Type=".../relationships/calcChain" Target="calcChain.xml"/>
</Relationships>
The Type values are abbreviated above with ...; use the full http://schemas.openxmlformats.org/officeDocument/2006/relationships/ prefix shown in the healthy file. If the workbook has more sheets or parts than this example, add one relationship for each.
Checklist: How to Check Relationships in Your File
- Rename your XLSX to .zip and open it
- Check that both
_rels/.relsandxl/_rels/workbook.xml.relsexist - Copy each one to your Desktop and open it in VS Code (with the Red Hat XML extension); press
Shift+Alt+Fto format - Check that every
r:idinworkbook.xmlhas exactly one matchingIdinworkbook.xml.rels - Check that each
Idappears only once within its own.relsfile, and that no element repeats an attribute - Check that every relationship has an
Id, aType, and a non-emptyTarget - Resolve each
Targetfrom the owning part's folder and confirm the file exists in the ZIP - Check that
_rels/.relshas oneofficeDocumentrelationship, pointing at the real workbook - If you changed any ID, update both ends of the reference, then re-zip and open the copy in Excel