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.
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"/>
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"/>
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.
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.
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>
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:
- Close Excel and make a copy of the workbook.
- Open the copy as a ZIP package and delete
xl/calcChain.xml. - In
xl/_rels/workbook.xml.rels, remove only the relationship whose type ends in/calcChain, if present. - In
[Content_Types].xml, remove only the override for/xl/calcChain.xml, if present. - Re-zip the package with the correct folder structure and open it in Excel.
- 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"/>
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.xmlto your Desktop, and open it in VS Code (with the Red Hat XML extension); pressShift+Alt+Fto format - Check that the file parses and contains at least one
<c>entry - Check that every
ivalue matches asheetIdinworkbook.xml, not a tab position - Check that every
ris 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