Better spreadsheet protection

Created on 2 September 2025, about 1 month ago

Problem/Motivation

There are some issues with the spreadsheet export:

  • The hash is displayed and can be edited by mistake
  • The source string, context, notes, can be edited by mistake
  • The table header can be edited by mistake.
  • The URL column should be wider.

Proposed resolution

  • Protect table header
  • Protect columns A (source string), C (context), D (notes), F (hash)
  • Increase the width of column E (URL)
  • Hide column F (hash)

Remaining tasks

None.

User interface changes

None.

API changes

None.

Data model changes

None.

📌 Task
Status

Active

Version

1.0

Component

Code

Created by

🇷🇴Romania claudiu.cristea Arad 🇷🇴

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Merge Requests

Comments & Activities

  • Issue created by @claudiu.cristea
  • Merge request !49Improve exported spreadsheet → (Merged) created by claudiu.cristea
  • 🇵🇱Poland alorenc Wolsztyn, 🇵🇱
  • 🇵🇱Poland alorenc Wolsztyn, 🇵🇱
  • 🇵🇱Poland alorenc Wolsztyn, 🇵🇱

    Users can export data in four formats. For example, in the case of CSV, it is not possible to protect or hide columns.
    I opened an XLSX file with LibreOffice (v24.2), and it did not work either.

    I do not think it is a good idea to change that because:

    • It will not work for all formats.
    • It probably works only with Microsoft Office.
    • A user can still modify even the hidden columns.

    Instead of that, my suggestion is to:

    • improve import validation and add a warning in case an ID is not found.
    • Update "ID" to something clearer, such as "Reference ID."
    • Add a clear description on the /admin/config/regional/babel/export and /admin/config/regional/babel/import pages.
  • 🇵🇱Poland alorenc Wolsztyn, 🇵🇱
  • 🇵🇱Poland alorenc Wolsztyn, 🇵🇱

    Update
    It did not work in case I tried to download the language that was exported before applying the changes.

  • 🇷🇴Romania claudiu.cristea Arad 🇷🇴

    Users can export data in four formats. For example, in the case of CSV, it is not possible to protect or hide columns

    Of course. But that's expected, right? At least works for apps that are supporting protection

    I opened an XLSX file with LibreOffice (v24.2), and it did not work either.

    Works for me with LibreOffice 25.2.4.2. Please try to update LibreOffice and retest

    It will not work for all formats.

    That's OK and expected. This is just an improvement for the formats that support protection

    It probably works only with Microsoft Office.

    This is a good reason to have it. In EC almost all are using MS Excel so we have a good coverage. As it works also with LibreOffice, we'll cover 99% of the cases.

    A user can still modify even the hidden columns.

    That's true. But this is not intended to be a shield agains users acting in a bad faith. This to prevent accidental actions.

    improve import validation and add a warning in case an ID is not found.

    That's already in place

    Given all above, please take a second look.

  • 🇵🇱Poland alorenc Wolsztyn, 🇵🇱
  • 🇵🇱Poland alorenc Wolsztyn, 🇵🇱

    Another argument against this approach is
    If I copy a string from "Source string" to "Translated string" in Excel, the protection is copied as well. I am no longer able to update the value in "Translated string." I think the copy functionality is crucial for speeding up translation.

  • 🇷🇴Romania claudiu.cristea Arad 🇷🇴

    Since last review:

    • Removed the protection of column A to allow copy/paste of the string.
    • Changed the table header to make clear which headers should not be edited
    • Refactored Spreadsheet::createExportedFileContent() to improve code readability
    • Adapted the tests.

    Note that has validation has been previously fixed in 🐛 Import doesn't show collected warnings Active but violations are rendered as warnings.

  • First commit to issue fork.
  • 🇬🇷Greece dimilias

    We have talked with @claudiu.cristea and decided in two changes:
    1. Add some guidelines per plugin where they can set explanations and other information when the plugin is selected.
    2. Add text wrap to the second column in order to allow text to be shown fine even when long text is inserted since there is no resizing in protected documents.

    I have tested the above with LibreOffice, OpenOffice, MS Office.
    The protection is only applied in XLS and XLSX file format and applies across all of the above software.
    ODS protection is not applied. Not even for native software of the extension. Probably the library we are using does not support it. We discussed and agreed that it is fine and it is not a security measurement, rather than an optional convenience.
    We have agreed that we should not remove the extensions though, because in many cases, the site owner might want to work with the Open Document format rather than some proprietary extension.

    CSV of course does not carry any of these as it is mainly a plain text file.
    The guidelines added for the Spreadsheet plugin is that we offer minor protection for the XLS and XLSX formats.

  • Now that this issue is closed, please review the contribution record.

    As a contributor, attribute any organization helped you, or if you volunteered your own time.

    Maintainers, please credit people who helped resolve this issue.

Production build 0.71.5 2024