qax-os/excelize · warning

ErrUnprotectWorkbook

ErrUnprotectWorkbook

Error message

workbook has set no protect

What it means

ErrUnprotectWorkbook indicates that UnprotectWorkbook was called with a password argument on a workbook that has no workbook-level protection (or no password set). The library throws it because there is no workbook protection to remove.

Solutions

  1. Call UnprotectWorkbook() with no arguments when the workbook was protected without a password
  2. Check WorkbookProtection state before calling
  3. Ignore this sentinel error if the goal is idempotent unprotection

Example fix

// before
err := f.UnprotectWorkbook("password") // workbook not password-protected
// after
err := f.UnprotectWorkbook() // no password needed
Defensive patterns

Strategy: try-catch

Validate before calling

// only pass a password if workbook protection has a password hash
// wb.WorkbookProtection != nil && wb.WorkbookProtection.WorkbookHashValue != ""

Try / catch

if err := f.UnprotectWorkbook("pw"); err != nil && !errors.Is(err, excelize.ErrUnprotectWorkbook) {
	return err
}

Prevention

When it happens

Trigger: Calling f.UnprotectWorkbook("password") on a workbook whose WorkbookProtection is nil or has no password hash; test path: unprotect then call again with a password.

Common situations: Calling UnprotectWorkbook with a password on an unprotected workbook; calling it twice without checking state.

Related errors


AI-assisted analysis of qax-os/excelize@f2483381fb (2026-09-02). Data as JSON: /api/errors/e0a96213335a6c74. Report an issue: GitHub.

Appendix: source

Thrown at errors.go:188

	ErrSparklineType = errors.New("parameter 'Type' value must be one of 'line', 'column' or 'win_loss'")
	// ErrTotalSheetHyperlinks defined the error message on hyperlinks count
	// overflow.
	ErrTotalSheetHyperlinks = errors.New("over maximum limit hyperlinks in a worksheet")
	// ErrTransparency defined the error message for receiving a transparency
	// value exceeds limit.
	ErrTransparency = errors.New("transparency value must be an integer from 0 to 100")
	// ErrUnknownEncryptMechanism defined the error message on unsupported
	// encryption mechanism.
	ErrUnknownEncryptMechanism = errors.New("unknown encryption mechanism")
	// ErrUnprotectSheet defined the error message on worksheet has set no
	// protection.
	ErrUnprotectSheet = errors.New("worksheet has set no protect")
	// ErrUnprotectSheetPassword defined the error message on remove sheet
	// protection with password verification failed.
	ErrUnprotectSheetPassword = errors.New("worksheet protect password not match")
	// ErrUnprotectWorkbook defined the error message on workbook has set no
	// protection.
	ErrUnprotectWorkbook = errors.New("workbook has set no protect")
	// ErrUnprotectWorkbookPassword defined the error message on remove workbook
	// protection with password verification failed.
	ErrUnprotectWorkbookPassword = errors.New("workbook protect password not match")
	// ErrUnsupportedEncryptMechanism defined the error message on unsupported
	// encryption mechanism.
	ErrUnsupportedEncryptMechanism = errors.New("unsupported encryption mechanism")
	// ErrUnsupportedHashAlgorithm defined the error message on unsupported
	// hash algorithm.
	ErrUnsupportedHashAlgorithm = errors.New("unsupported hash algorithm")
	// ErrUnsupportedNumberFormat defined the error message on unsupported
	// number format expression.
	ErrUnsupportedNumberFormat = errors.New("unsupported number format token")
	// ErrUnsupportedPivotTableShowValuesAsType defined the error message on
	// receiving the unsupported pivot table "show values as" type.
	ErrUnsupportedPivotTableShowValuesAsType = errors.New("unsupported pivot table show values as type")
	// ErrWorkbookFileFormat defined the error message on receive an
	// unsupported workbook file format.
	ErrWorkbookFileFormat = errors.New("unsupported workbook file format")

View on GitHub (pinned to f2483381fb)