Always work on a copy Keep the original workbook untouched. An incorrect content type can make a valid part unreadable to Excel, and re-zipping a package incorrectly can undo your repair.

Where to Find the Manifest

Open the XLSX as a ZIP archive using the steps in Edit and Re-Zip an XLSX. [Content_Types].xml sits beside the _rels folder and the xl folder at the root of the archive, not inside xl.

What a Healthy [Content_Types].xml Looks Like

There are two kinds of declaration. A Default applies to every file with a given extension. An Override applies to one exact package path and takes priority over any Default. Because .xml falls back to the generic application/xml type, every worksheet, style sheet, theme, and the workbook itself needs its own override. This is the manifest from the clean reference workbook, reformatted so each entry is on its own line:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
  <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
  <Default Extension="xml" ContentType="application/xml"/>
  <Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
  <Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
  <Override PartName="/xl/worksheets/sheet2.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
  <Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>
  <Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
  <Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>
  <Override PartName="/xl/calcChain.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml"/>
  <Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>
  <Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>
</Types>
📄
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

Missing Override for an Existing Part

An override has been deleted, but the part it described is still in the ZIP. Without the override, Excel falls back to the generic application/xml type and no longer knows the part is a style sheet, a shared strings table, or the workbook. Losing the workbook override is the most serious, because Excel cannot identify the main document part at all.

<!-- Missing shared strings declaration -->
<Override PartName="/xl/styles.xml" ContentType="...spreadsheetml.styles+xml"/>
<!-- ← CORRUPT: no Override for /xl/sharedStrings.xml, but the file exists -->
<Override PartName="/xl/calcChain.xml" ContentType="...spreadsheetml.calcChain+xml"/>

<!-- Missing styles declaration -->
<Override PartName="/xl/theme/theme1.xml" ContentType="...theme+xml"/>
<!-- ← CORRUPT: no Override for /xl/styles.xml, but the file exists -->
<Override PartName="/xl/sharedStrings.xml" ContentType="...spreadsheetml.sharedStrings+xml"/>

<!-- Missing workbook declaration -->
<Default Extension="xml" ContentType="application/xml"/>
<!-- ← CORRUPT: no Override for /xl/workbook.xml -->
<Override PartName="/xl/worksheets/sheet1.xml" ContentType="...spreadsheetml.worksheet+xml"/>

Fix: Confirm the part really exists in the ZIP, then add one override for it inside the existing <Types> element, using the content type that matches the part. The new line is a child element, not a replacement root document. The types for the parts in this workbook are:

  • /xl/workbook.xml: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml
  • /xl/styles.xml: application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml
  • /xl/sharedStrings.xml: application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml
<!-- Fixed: add inside <Types> -->
<Override PartName="/xl/sharedStrings.xml"
          ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>
<Override PartName="/xl/styles.xml"
          ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
<Override PartName="/xl/workbook.xml"
          ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
📄
CORRUPT-contenttypes-missing-entry.xlsx Corrupt Example
The Override for /xl/sharedStrings.xml has been deleted. The shared strings part is still in the package.
Download
📄
CORRUPT-contenttypes-missing-styles.xlsx Corrupt Example
The Override for /xl/styles.xml has been deleted. The style sheet is still in the package.
Download
📄
CORRUPT-contenttypes-missing-workbook.xlsx Corrupt Example
The Override for /xl/workbook.xml has been deleted, so the main workbook part is no longer identified.
Download
Type 2

Wrong Content Type on a Part

The overrides exist, but they name a format that does not exist or does not match the part. Each part type has its own content type, and worksheet, styles, shared strings, and theme types are not interchangeable.

<Override PartName="/xl/worksheets/sheet1.xml"
          ContentType="application/vnd.WRONG-TYPE+xml"/>
          <!-- ← CORRUPT: not a real content type -->
<Override PartName="/xl/worksheets/sheet2.xml"
          ContentType="application/vnd.WRONG-TYPE+xml"/>
          <!-- ← CORRUPT -->

Fix: Open each part named in PartName and look at its root element. A <worksheet> root means the worksheet type is correct. Replace only the ContentType value on each affected line and leave the rest of the file alone.

<!-- Fixed -->
<Override PartName="/xl/worksheets/sheet1.xml"
          ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
<Override PartName="/xl/worksheets/sheet2.xml"
          ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
📄
CORRUPT-contenttypes-wrong-type.xlsx Corrupt Example
Both worksheet overrides declare the content type application/vnd.WRONG-TYPE+xml.
Download
Type 3

Orphaned Override: Part Does Not Exist

An orphaned entry declares a part that is not in the ZIP. It is often left behind when a tool deletes a sheet or an add-in part but leaves the manifest untouched. Some readers ignore it, but strict validators and some libraries do not, so it is worth cleaning up.

<Override PartName="/xl/worksheets/sheet1.xml" ContentType="...spreadsheetml.worksheet+xml"/>
<Override PartName="/xl/worksheets/sheet2.xml" ContentType="...spreadsheetml.worksheet+xml"/>
...
<Override PartName="/xl/worksheets/sheet99.xml" ContentType="...spreadsheetml.worksheet+xml"/>
<!-- ↑ CORRUPT: there is no xl/worksheets/sheet99.xml in the archive -->

Fix: Before deleting anything, check three things: the part is truly absent from the ZIP (watch for different capitalisation or a different folder), no relationship in workbook.xml.rels points to it, and no sheet in workbook.xml uses it. If all three are clear, remove the override. If a relationship or sheet entry does point to it, the real problem is a lost part; see Fix Missing XLSX Parts.

<!-- Fixed: the sheet99.xml Override is deleted; every other entry is untouched -->
📄
CORRUPT-contenttypes-orphaned-entry.xlsx Corrupt Example
Contains an extra Override for /xl/worksheets/sheet99.xml, a part that does not exist in the package.
Download
Type 4

Duplicate PartName Entries

Each exact PartName must be declared once. Two overrides for the same path make the manifest ambiguous. When both lines are identical it is only untidy, but when they disagree Excel cannot know which one is right.

<Override PartName="/xl/workbook.xml"
          ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
...
<Override PartName="/xl/workbook.xml"
          ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
<!-- ↑ CORRUPT: /xl/workbook.xml is declared twice -->

Fix: Search the file for each PartName and keep exactly one declaration per path. If the duplicates disagree, keep the one that matches what the part actually is and delete the other.

<!-- Fixed: one declaration per part -->
<Override PartName="/xl/workbook.xml"
          ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
📄
CORRUPT-contenttypes-duplicate-entry.xlsx Corrupt Example
The Override for /xl/workbook.xml appears twice in [Content_Types].xml.
Download
Type 5

Malformed Manifest XML

A damaged tag stops the whole manifest from parsing, so Excel cannot read any declaration, even the correct ones. In both of these examples an Override element that should end in /> has lost part or all of its closing.

<!-- Variant A: the "/" is missing, so the tag is never closed -->
<Override PartName="/xl/workbook.xml"
          ContentType="...spreadsheetml.sheet.main+xml">
<!-- ← CORRUPT: should end in "/>" -->

<!-- Variant B: the whole "/>" is missing, so the next tag starts inside this one -->
<Override PartName="/xl/workbook.xml"
          ContentType="...spreadsheetml.sheet.main+xml"
<Override PartName="/xl/worksheets/sheet1.xml" ...

Fix: Open the file in an XML-aware editor such as VS Code with the Red Hat XML extension. It will underline the first broken tag. Restore the closing /> and check for further errors, since an editor may stop at the first one it finds.

<!-- Fixed -->
<Override PartName="/xl/workbook.xml"
          ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
📄
CORRUPT-contenttypes-malformed-xml.xlsx Corrupt Example
The /> that closes the /xl/workbook.xml Override is reduced to a bare >, so the element is never closed.
Download
📄
CORRUPT-contenttypes-missing-closing-tag.xlsx Corrupt Example
The closing /> after the /xl/workbook.xml Override is missing entirely, so the following tag begins inside it. The damage is in [Content_Types].xml.
Download
Type 6

[Content_Types].xml Missing Entirely

If the manifest is not in the ZIP, Excel has no way to interpret any part. Check first that it has not simply been moved: it must be at the archive root, not inside a wrapper folder created when the package was re-zipped.

Corrupted.xlsx
  _rels/.rels
  docProps/
  xl/
                   <- CORRUPT: [Content_Types].xml is not in the archive

Fix: Restore the file from a backup if you can. Otherwise it can be rebuilt, because every part in the package has a predictable type: add the two Default entries, then one Override for each part using the types in the healthy file at the top of this guide. A workbook with extra parts (drawings, tables, images, macros) needs a declaration for each of those too, so compare with a clean workbook that has the same features before re-zipping.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
  <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
  <Default Extension="xml" ContentType="application/xml"/>
  <!-- one <Override> per part: workbook, each worksheet, styles, sharedStrings,
       theme, calcChain, docProps/core, docProps/app -->
</Types>
📄
CORRUPT-missing-content-types.xlsx Corrupt Example
[Content_Types].xml has been removed from the package. Every other part is intact.
Download
Repair scope A manifest edit corrects package metadata only. It cannot restore worksheet contents or other missing data. If the part itself is missing, a manifest entry cannot recreate it; see Fix Missing XLSX Parts. Compare with a backup whenever possible.

Checklist: How to Check [Content_Types].xml in Your File

  • Rename your XLSX to .zip and open it
  • Confirm [Content_Types].xml is at the root of the archive, beside _rels and xl, not inside another folder
  • Open it in VS Code (with the Red Hat XML extension) and press Shift+Alt+F to format it so each entry is on its own line
  • Check that the file parses: a red underline means a tag is not closed
  • Check that every Override points to a part that exists, using the exact path with the leading slash
  • Check that the workbook, every worksheet, styles, shared strings, and theme each have a matching declaration
  • Check that no PartName appears more than once
  • Check each ContentType against the root element of the part it describes
  • Re-zip with [Content_Types].xml at the archive root, then open the copy in Excel