Always work on a copy Recalculation can take time and may update formula results. Confirm formulas and values after repair, especially in workbooks with external links or macros.

Check Whether the Chain Is the Problem

Use Excel's repair log to confirm it names xl/calcChain.xml. The chain may be absent in a healthy workbook, so its absence alone does not mean the file is damaged. Excel simply rebuilds it the next time it saves.

What a Healthy calcChain.xml Looks Like

Each <c> entry names a formula cell in r and, in i, the **sheetId** of the worksheet it sits on. That is the value from workbook.xml, not the sheet's zero-based tab position. The l attribute marks the start of a new dependency level. The clean reference workbook has one formula, =SUM(A1:A5) in cell A11 of Sheet1, so it has one entry:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<calcChain xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <c r="A11" i="1" l="1"/>
</calcChain>

<!-- xl/workbook.xml: the sheetId values -->
<sheet name="Sheet1" sheetId="1" r:id="rId1"/>
<sheet name="Sheet2" sheetId="2" r:id="rId2"/>

<!-- xl/worksheets/sheet1.xml: the formula the entry refers to -->
<c r="A11"><f>SUM(A1:A5)</f><v>15</v></c>

When i is left out, an entry belongs to the same sheet as the entry before it. Removing or changing entries on guesswork can leave formula recalculation incomplete, so only touch an entry you have proven wrong.

📄
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
📄
CLEAN-calcchain-valid.xlsx Clean Reference
A control file: a well-formed chain whose entries (A1, B1, C1) all use sheetId 1, which exists. Use it to confirm a repair tool leaves a structurally valid chain alone.
Download

Type 1

Entry Points to a Nonexistent sheetId

The workbook has two sheets, with sheetId 1 and 2, but chain entries name sheets 3, 4, 5, and 7. This happens when a sheet is deleted, or a workbook is assembled by a tool that does not rewrite the chain. One bad entry and several bad entries are the same problem.

<!-- workbook.xml: the only sheetId values are 1 and 2 -->

<!-- CalcChain_InvalidSheetReference -->
<c r="A1" i="1"/>
<c r="B1" i="4"/>   <!-- ← CORRUPT: no sheet has sheetId 4 -->
<c r="C1" i="1"/>

<!-- CalcChain_MultipleInvalidReferences -->
<c r="A1" i="1"/>
<c r="B1" i="3"/>   <!-- ← CORRUPT -->
<c r="C1" i="1"/>
<c r="D1" i="5"/>   <!-- ← CORRUPT -->
<c r="E1" i="7"/>   <!-- ← CORRUPT -->
<c r="F1" i="1"/>

Fix: For each bad entry, confirm which worksheet actually contains the formula and look up that sheet's sheetId in workbook.xml. Only then correct the value. If you cannot prove which sheet an entry belongs to, delete that entry. If many entries are wrong, use the rebuild method below rather than editing them one by one.

<!-- Fixed: invalid entries removed (or corrected to a real sheetId) -->
<c r="A1" i="1"/>
<c r="C1" i="1"/>
<c r="F1" i="1"/>
📄
CORRUPT-calcchain-invalid-sheet-reference.xlsx Corrupt Example
One chain entry (B1) names sheetId 4, which does not exist in the workbook.
Download
📄
CORRUPT-calcchain-multiple-invalid-references.xlsx Corrupt Example
Three chain entries (B1, D1, E1) name sheetIds 3, 5, and 7, none of which exist.
Download
Type 2

Invalid Cell Reference

The r attribute must be a real cell address. A worksheet has at most 1,048,576 rows and 16,384 columns (A to XFD), so an address outside those limits cannot refer to any cell.

<c r="A1" i="1"/>
<c r="B2000000" i="1"/>   <!-- ← CORRUPT: row 2,000,000 is past the last row (1,048,576) -->
<c r="ZZZZZ1" i="1"/>     <!-- ← CORRUPT: column ZZZZZ is past the last column (XFD) -->
<c r="C1" i="1"/>

Fix: Delete the entries whose address is impossible. If a valid-looking address is wrong rather than impossible, open the worksheet XML and check whether the cell actually holds an <f> formula before deciding to keep it.

<!-- Fixed -->
<c r="A1" i="1"/>
<c r="C1" i="1"/>
📄
CORRUPT-calcchain-invalid-cell-reference.xlsx Corrupt Example
The chain contains B2000000 and ZZZZZ1, which are outside Excel's row and column limits.
Download
Type 3

Malformed calcChain XML

When a save is interrupted, or a tool writes the chain badly, an entry can be left unclosed. A chain that does not parse cannot be trusted, and a hand-reconstructed one could silently skip formulas.

<calcChain xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    <c r="A1" i="1"/>
    <c r="B1">
    <c r="C1" i="1"
                   <!-- ← CORRUPT: B1 is never closed, C1 has no "/>", and </calcChain> is gone -->

Fix: Do not try to patch a malformed chain. Delete the part and let Excel rebuild it, using the steps below. The formulas themselves are in the worksheet XML and are not affected.

📄
CORRUPT-calcchain-malformed-xml.xlsx Corrupt Example
The chain has an unclosed <c> element, a tag with no closing, and no closing </calcChain>, so it is not well-formed XML.
Download
Type 4

Empty Calculation Chain

The chain file exists but contains no entries at all. The workbook still has formulas (=SUM(A1:A5) in Sheet1!A11), so an empty chain describes nothing and does not match the sheet. The schema expects a chain to list at least one cell, so an empty one is invalid rather than harmless.

<calcChain xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <!-- ← CORRUPT: no <c> entries, but the workbook has formulas -->
</calcChain>

Fix: Either restore the entries (here, <c r="A11" i="1" l="1"/>) or, more simply, delete the chain and let Excel rebuild it.

📄
CORRUPT-calcchain-empty.xlsx Corrupt Example
calcChain.xml contains the root element but no entries, while Sheet1 still contains a formula.
Download
Type 5

Chain Damage Combined with Style Damage

Corruption rarely stays in one part. Here the chain names a nonexistent sheet and styles.xml has a second cell format that refers to a font that does not exist. Fixing only the chain leaves the file broken.

<!-- calcChain.xml -->
<c r="A1" i="1"/>
<c r="B1" i="4"/>   <!-- ← CORRUPT: no sheet has sheetId 4 -->

<!-- styles.xml: only one font exists (fontId 0) -->
<cellXfs count="2">
  <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>
  <xf numFmtId="0" fontId="999" fillId="0" borderId="0" xfId="0"/>
  <!-- ← CORRUPT: fontId 999 does not exist -->
</cellXfs>

Fix: Repair the two parts separately. For the chain, remove the bad entry or rebuild the chain. For the style, either point the format at a font that exists or delete the extra <xf> and put the count back. See Fix styles.xml for the full set of style repairs.

<!-- Fixed: styles.xml -->
<cellXfs count="1">
  <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/>
</cellXfs>
📄
CORRUPT-calcchain-and-styles.xlsx Corrupt Example
calcChain.xml names a nonexistent sheetId, and styles.xml has a cell format with fontId 999 that does not exist.
Download

Let Excel Rebuild a Damaged Calculation Chain

When damage is widespread, or you cannot prove which entries are wrong, removing the chain is safer than reconstructing calculation order by hand. This is the right fix for Types 3 and 4 above, and a good option for Types 1 and 2 when many entries are affected:

  1. Close Excel and make a copy of the workbook.
  2. Open the copy as a ZIP package and delete xl/calcChain.xml.
  3. In xl/_rels/workbook.xml.rels, remove only the relationship whose type ends in /calcChain, if present.
  4. In [Content_Types].xml, remove only the override for /xl/calcChain.xml, if present.
  5. Re-zip the package with the correct folder structure and open it in Excel.
  6. Force a full recalculation: press Ctrl+Alt+F9, or use Formulas > Calculate Now.
<!-- xl/_rels/workbook.xml.rels: delete this line only -->
<Relationship Id="rId6" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain" Target="calcChain.xml"/>

<!-- [Content_Types].xml: delete this line only -->
<Override PartName="/xl/calcChain.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml"/>

Do not remove similarly named formula or worksheet parts. Keep the workbook formulas; the calculation chain is separate metadata. To make Excel recalculate every time the file is opened until you have saved a clean copy, you can also add fullCalcOnLoad="1" to the calcPr element in workbook.xml:

<calcPr calcId="191029" fullCalcOnLoad="1"/>
Repair scope Removing a calculation chain does not restore deleted formulas, and it does not guarantee cached values are current. Keep a backup and verify important calculations.

Checklist: How to Check calcChain.xml in Your File

  • Confirm Excel's message actually names calcChain.xml
  • Rename your XLSX to .zip, copy xl/calcChain.xml to your Desktop, and open it in VS Code (with the Red Hat XML extension); press Shift+Alt+F to format
  • Check that the file parses and contains at least one <c> entry
  • Check that every i value matches a sheetId in workbook.xml, not a tab position
  • Check that every r is a real cell address and that the cell contains an <f> formula in its worksheet
  • If you removed the chain, check that its relationship and its override are gone too
  • Recalculate and inspect important totals and dependent cells
  • Review external links, volatile formulas, and macros that affect calculations
  • Save a new copy and reopen it to confirm Excel no longer reports the chain error