Always work on a copy Relationship IDs are referenced by other XML files. Changing an ID in a .rels file without updating every reference to it can break additional parts.

Locate the Relationship Files

  • _rels/.rels connects the package root to the workbook and to the document properties.
  • xl/_rels/workbook.xml.rels connects 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.

📄
CLEAN-template-workbook.xlsx Clean Reference
A valid two-sheet workbook saved by Excel. Open, unzip, and inspect this file as a working reference while following the examples above.
Download

Type 1

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 -->
📄
CORRUPT-rels-duplicate-id-bad-target.xlsx Corrupt Example
workbook.xml.rels has a second rId3 that points at the non-existent worksheets/sheet99.xml.
Download
📄
CORRUPT-rootrels-duplicate-ids.xlsx Corrupt Example
_rels/.rels has a second rId3 with a repeated Target attribute, so the file is not well-formed XML.
Download
Type 2

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"/>
📄
CORRUPT-rels-empty-target.xlsx Corrupt Example
workbook.xml.rels contains an extra worksheet relationship (rId888) whose Target is empty.
Download
📄
CORRUPT-rootrels-empty-target.xlsx Corrupt Example
In _rels/.rels the targets for the workbook and the app properties are both blank.
Download
Type 3

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 -->
📄
CORRUPT-rels-missing-target.xlsx Corrupt Example
workbook.xml.rels has an extra relationship (rId999) targeting worksheets/nonexistent.xml.
Download
📄
CORRUPT-rootrels-invalid-target.xlsx Corrupt Example
_rels/.rels has a second officeDocument relationship (rId999) targeting xl/nonexistent.xml.
Download
Type 4

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 example worksheets/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"/>
📄
CORRUPT-rootrels-missing-attributes.xlsx Corrupt Example
_rels/.rels contains a relationship (rId777) with a Target but no Type attribute.
Download
Type 5

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"/>
📄
CORRUPT-rootrels-missing-workbook.xlsx Corrupt Example
The officeDocument and extended-properties relationships have been removed from _rels/.rels, leaving only the core properties.
Download
Type 6

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.

📄
CORRUPT-rootrels-missing.xlsx Corrupt Example
_rels/.rels has been removed from the package, so Excel has no relationship pointing at the workbook.
Download
📄
CORRUPT-missing-workbook-rels.xlsx Corrupt Example
xl/_rels/workbook.xml.rels has been removed, so the workbook has no links to its worksheets or supporting parts.
Download
Repair scope A relationship repairs a link, not the contents of the target file. If the target part is gone, fixing the link will not bring it back; see Fix Missing XLSX Parts. Keep a backup before removing or redirecting any relationship. For sheet references specifically, see Common Corruptions in workbook.xml; for part declarations, see [Fix [Content_Types].xml](/guides/fix-content-types-xml.html).

Checklist: How to Check Relationships in Your File

  • Rename your XLSX to .zip and open it
  • Check that both _rels/.rels and xl/_rels/workbook.xml.rels exist
  • Copy each one to your Desktop and open it in VS Code (with the Red Hat XML extension); press Shift+Alt+F to format
  • Check that every r:id in workbook.xml has exactly one matching Id in workbook.xml.rels
  • Check that each Id appears only once within its own .rels file, and that no element repeats an attribute
  • Check that every relationship has an Id, a Type, and a non-empty Target
  • Resolve each Target from the owning part's folder and confirm the file exists in the ZIP
  • Check that _rels/.rels has one officeDocument relationship, 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