Skip to main content
iVentureTeam

binary_spreadsheet

The binary field widget with the download deliberately removed, twice over: once in the template and once in the handler. The value it holds is not a file anyone can usefully open.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 27, 2026Updated September 8, 20265 min read
Technical namebinary_spreadsheet
Field typesbinary
Viewsform
Modulespreadsheet, installed with Documents, Dashboards and other spreadsheet features
Used in core1 occurrence, the data field on the spreadsheet dashboard form in spreadsheet_dashboard
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0
No-code setupNo. It is a developer-facing field set in view XML
Alternativesbinary, many2many_binary, image

What the spreadsheet binary field does

An Odoo spreadsheet is stored as structured data, not as a file. The cells, formulas, charts, pivots and the links back to Odoo records are all held in Odoo's own spreadsheet format, which the spreadsheet application reads and writes. Exporting to a real spreadsheet file is a separate, deliberate action.

Some forms nevertheless show that stored data as a field, mainly so a developer can see and replace it. Rendered with the ordinary binary widget, it would offer a download button, and downloading it would produce a file that opens in nothing.

This widget removes that. It keeps the binary field's upload and clear behavior, replaces the download arrow with a neutral file icon, and takes the download block out of the template entirely. The result reads as data you can replace rather than a document you can take away.

What this means for your team

The point worth taking from this is about honest interfaces. A download button that produces an unusable file is worse than no button, because the user assumes the export failed rather than that it was never a file to begin with. Removing the affordance is the correct fix, and it costs nothing.

For anyone planning spreadsheet work in Odoo, the underlying fact matters more than the widget: spreadsheets live inside Odoo, connected to live data, and moving them out means an explicit export that breaks those links. That is the trade that makes Odoo spreadsheets useful, and it is also why the data field is developer-only.

Supported options in Odoo 19

The widget declares no options of its own. It spreads the binary widget's descriptor, so the options and attributes below are inherited and behave as they do on the base widget, except for anything to do with downloading. Read from the widget's source and the binary field, Odoo 19.0.

OptionTypeWhat it does
filenamestring (attribute)Inherited from the binary widget. Names the companion char field holding the uploaded file's name. Still used on upload, even though downloading is disabled.
accepted_file_extensionsstringInherited from the binary widget. Restricts what the upload control accepts.

Downloading is disabled in two places. The template inherits the binary field's template and removes the download block, and the component overrides the download handler with an empty method. There is no option to re-enable it; a genuine export goes through the spreadsheet application's own export action.

Working examples

The core usage

<field name="spreadsheet_binary_data"
       widget="binary_spreadsheet"
       filename="spreadsheet_file_name"
       string="Data"
       groups="base.group_no_one"/>

The developer group restriction is part of the usage: this is a maintenance field, not something a dashboard editor should meet.

What the filename attribute still does

<field name="spreadsheet_file_name" invisible="1"/>

Inherited from the binary widget. It still names the file on upload, even though there is nothing to download.

The base widget, for comparison

<field name="spreadsheet_binary_data" widget="binary"/>

Same field, with a download link that produces a file no application can open.

Removed twice, on purpose

There is almost nothing to the JavaScript: a subclass pointing at a different template, a setup that only calls its parent, and a download handler overridden to do nothing. The overridden handler is belt and braces, since the template already removed the element that would trigger it, but it means a custom template inheriting from this one cannot accidentally restore the behavior.

The template is where the change is made. It inherits the binary field's template in primary mode and does two edits: it replaces the named download block with nothing, and it replaces the download arrow icon with a file icon. Everything else, the upload control, the clear button and the file name display, is untouched.

The pointless-looking setup override, which calls its parent and does nothing else, is a small piece of leftover scaffolding rather than a behavior. It survives unchanged on the development branch.

The field this widget renders is restricted to the developer group in the only core view that uses it, which is worth noting when you are trying to find it: on a normal user account the field is not on the form at all.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. Byte-identical to Odoo 19 on the development branch.
Odoo 19.0VerifiedVerified against the shipped source. Byte-identical to Odoo 18.
Odoo 18.0VerifiedFirst version.
Odoo 17.0Not availableWidget does not exist.
Odoo 16.0Not availableWidget does not exist.

Upgrade note. The widget arrived in Odoo 18 and the Odoo 18 and Odoo 19 files are byte-identical, so nothing needs attention. On Odoo 17 and earlier the field, where shown at all, used the plain binary widget with its download link.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. The development branch is unstable and this may still change; we re-verify the page after release.

Byte-identical. The file on the development branch matches Odoo 19 exactly, including the empty download handler and the redundant setup override. Nothing about the widget changes in Odoo 20.

Common problems and fixes

SymptomCause and fix
There is no download linkIntended. The template removes it and the handler is overridden to do nothing. Export from the spreadsheet application instead; the stored value is not a usable file.
The field is not on the formThe core view restricts it to the developer group. Enable developer mode, or add the user to that group if they genuinely need it.
Uploading a file breaks the spreadsheetThe field expects Odoo's internal spreadsheet data, not an arbitrary file. Replace the data only with a value produced by Odoo itself.
The file name is empty after uploadThe companion field named by the filename attribute is not in the view. Add it, invisible is enough.
Missing widget errorThe spreadsheet module is not installed in that database. Install a module that brings spreadsheets in, or use the plain binary widget.

Spreadsheet binary field vs the alternatives

WidgetBest forKey difference
binary_spreadsheetBinary fields whose contents are not a file the user could openThe binary widget with downloading removed from both the template and the handler
binaryReal files users should be able to downloadKeeps the download link and its handler
many2many_binaryA list of attached filesSeveral attachments rather than one binary value
imagePictures stored on the recordRenders the image instead of a file row

Use the plain binary widget for anything that is a real file a user should be able to take away. This variant exists for the opposite case: stored data that is only meaningful inside Odoo. If you need users to get a spreadsheet out, point them at the spreadsheet application's export action rather than at a field.

Frequently asked questions

Why can I not download the spreadsheet data?+
Because the stored value is Odoo's internal spreadsheet format, not a file another application could open. The widget removes the download from the template and overrides the handler so nothing can trigger it.
How do I export an Odoo spreadsheet then?+
From the spreadsheet application itself, which has its own export action. That produces a real file, at the cost of the live links back to Odoo data.
Why is the field hidden for most users?+
The only core usage restricts it to the developer group. It is a maintenance field rather than something a dashboard editor should see.
Does it support the binary widget's options?+
Yes, everything except downloading. The filename attribute still names the companion field on upload, and the accepted extensions option still restricts the upload control.
Which versions have it?+
Odoo 18 onwards. The file is byte-identical in Odoo 18, Odoo 19 and on the Odoo 20 development branch.

Spreadsheets that stay connected to your live data

Odoo spreadsheets pull from the database and update themselves, which is exactly what an exported file cannot do. We build reporting spreadsheets and dashboards inside Odoo on versions 16 through 19, so the numbers stop being a monthly copy job.

Book a free consultation

How this page was produced

The empty download handler and the template edits removing the download block and swapping the icon were read from spreadsheet_binary_field.js and its template on the Odoo 19.0 branch, with the inherited behavior read from the binary field in web. The usage and its group restriction come from spreadsheet_dashboard/views/spreadsheet_dashboard_views.xml. Version coverage comes from the absence of the file on 16.0 and 17.0, and byte comparisons against 18.0 and the public development branch. Spotted an error? Tell us and we will correct the page.