Как добавить пароль к файлу Excel в Laravel

Я изучаю Laravel Framework. Мне нравится знать, есть ли пакет или инструмент, который автоматически добавляет или вставляет пароль в файл Excel в приложении Laravel, чтобы зарегистрированный пользователь мог открыть файл с паролем, известным пользователю, только после его загрузки.


person Bless Joe    schedule 16.01.2020    source источник
comment
попробовать phpoffice / phpspreadsheet?   -  person JoSSte    schedule 16.01.2020
comment
Пожалуйста нет. Завтра попробую.   -  person Bless Joe    schedule 16.01.2020


Ответы (1)


Вы можете добавить пакет maatwebsite/excel для Laravel, который является оболочкой вокруг _ 2_ пакет.

Вот документы о том, как установить безопасность для электронной таблицы на PhpSpreadsheet: https://phpspreadsheet.readthedocs.io/en/latest/topics/recipes/#setting-security-on-a-spreadsheet

См. раздел расширения laravel-excel документацию, чтобы узнать, как вызывать методы PhpSpreadsheet для события или с помощью макроса.

Окончательный код будет примерно таким:

namespace App\Exports;

use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\BeforeExport;

class InvoicesExport implements WithEvents
{
    /**
     * @return array
     */
    public function registerEvents(): array
    {
        return [
            BeforeExport::class  => function(BeforeExport $event) {
                $event->writer->getDelegate()->getSecurity()->setLockWindows(true);
                $event->writer->getDelegate()->getSecurity()->setLockStructure(true);
                $event->writer->getDelegate()->getSecurity()->setWorkbookPassword("Your password");
        ];
    }
}
person Hafez Divandari    schedule 16.01.2020
comment
Хорошо, большое спасибо. Постараюсь реализовать этот пакет завтра. - person Bless Joe; 17.01.2020
comment
В моем случае не работает. Файл не защищен, и я все еще могу открыть экспортированный файл и отредактировать все, что мне нравится. - person Pengyou; 07.08.2020
comment
В моем случае не сработало, но в приведенном выше решении я добавил событие AfterSheet, чтобы оно работало так: return [... AfterSheet :: class = ›function (AfterSheet $ event) {... $ event-› sheet- ›getProtection () - ›setSheet (true); }, BeforeExport :: class = ›function (BeforeExport $ event) {...}] - person Simion; 04.02.2021