Skip to main content

File Properties

File Format Support (click to show)

Excel supports a number of standard properties. Most modern versions of Excel also support custom properties.

FormatsStandardCustomSeparate
XLSX/XLSM
XLSB
XLML
BIFF8 XLS
BIFF5 XLSRR

The letter R (R) marks features parsed but not written in the format.

The "Separate" column marks formats that store standard and custom properties in different locations. Legacy XLS files commingle properties.

Modern spreadsheet software support special file properties including titles and keywords. Third-party tools can understand the file properties without having to process or understand the spreadsheet structure.

In the SheetJS Data Model, the workbook object Props property holds standard properties and the Custprops property holds custom properties.

Live Demo

The following demo generates SheetJSProperties.xlsx with two file properties:

  • The standard Title property will be set to SheetJS Properties Test. This will be displayed in the "Summary" tab of the Excel file properties dialog:

"Standard" tab showing "Title" property

  • The custom Custom Quip property will be set to Get Sheet Done. This will be displayed in the "Properties" table in the "Custom" tab of the dialog:

"Custom" tab with "Custom Quip" property

Result
Loading...
Live Editor
function SheetJSPropertiesExport() { return (<button onClick={() => {
  /* create workbook */
  var ws = XLSX.utils.aoa_to_sheet([ ["Check Props"] ]);
  var wb = XLSX.utils.book_new(ws);

  /* add Title */
  if(!wb.Props) wb.Props = {};
  wb.Props.Title = "SheetJS Properties Test";

  /* add Custom Quip */
  if(!wb.Custprops) wb.Custprops = {};
  wb.Custprops["Custom Quip"] = "Get Sheet Done";

  /* export to XLSX */
  XLSX.writeFile(wb, "SheetJSProperties.xlsx");
}}><b>Click here to Export</b></button>); }

Spreadsheet Applications

Spreadsheet applications commonly display file properties in separate windows:

  • Excel for Windows: select "File" above the ribbon bar, select "Info" in the left sidebar, and click Properties > Advanced Properties

  • Excel for Mac: select "File" in the menu bar and select "Properties"

  • WPS Office: select "Menu" > "Document Encryption" > "Properties"

When this demo was last tested, Apple Numbers 14.2 did not support file properties in the XLSX import and export codecs.

Standard Properties

Some properties cannot be changed in spreadsheet applications. The underlying SheetJS output codecs can write arbitrary values.

The Props object understands the "standard" properties listed in the following table. "SheetJS Name" refers to the name of the property in the Props object. "Excel Property Setting" refers to the name in the Excel file properties dialog.

SheetJS NameExcel Property Setting
TitleSummary tab "Title"
SubjectSummary tab "Subject"
AuthorSummary tab "Author"
ManagerSummary tab "Manager"
CompanySummary tab "Company"
CategorySummary tab "Category"
KeywordsSummary tab "Keywords"
CommentsSummary tab "Comments"
LastAuthorStatistics tab "Last saved by"
CreatedDateStatistics tab "Created"

It is strongly recommended to test if the Props property exists:

Set the 'Title' file property
/* ensure `Props` exists */
if(!wb.Props) wb.Props = {};

/* set `Title` property */
wb.Props.Title = "SheetJS Properties Test";

Custom Properties

Custom properties are added in the workbook Custprops object. As with Props, scripts should test for the existence of the Custprops property:

Set the 'Custom Quip' custom file property
/* ensure `Custprops` exists */
if(!wb.Custprops) wb.Custprops = {};

/* set `Custom Quip` property */
wb.Custprops["Custom Quip"] = "Get Sheet Done";

Export Override

The SheetJS write and writeFile methods1 accept options. The Props option instructs the writer to override properties from the workbook object.

In the following example, the workbook object sets the "Title" and "Keywords" standard properties. writeFile will override the "Keywords" property and add the "Category" property. The generated file will have the following properties:

  • "Title" will be set to "SheetJS Properties Test" (from the workbook object)
  • "Keywords" will be blank (overridden by writeFile option)
  • "Category" will be "Sheetpost" (assigned through writeFile option)
Result
Loading...
Live Editor
function SheetJSPropertiesOverride() { return (<button onClick={() => {
  /* create workbook */
  var ws = XLSX.utils.aoa_to_sheet([ ["Check Props"] ]);
  var wb = XLSX.utils.book_new(ws);

  /* add Title and Keywords */
  if(!wb.Props) wb.Props = {};
  wb.Props.Title = "SheetJS Properties Test";
  wb.Props.Keywords = "Properties";

  /* export to XLSX with property overrides */
  XLSX.writeFile(wb, "SheetJSPropertiesOverride.xlsx", { Props: {
    Keywords: "",            /* Ensure `Keywords` is blank */
    Category: "Sheetpost",   /* Add `Category` property */
  }});
}}><b>Click here to Export</b></button>); }

Footnotes

  1. See write and writeFile in "Writing Files"