PhpSpreadsheet冻结窗格和保护工作表(设置密码锁表)的使用方法

PhpSpreadsheet 版本 1.29.0

使用以下功能要注意文件格式是否支持该功能 查询文件格式支持的功能

冻结窗格 (Frozen Panes)

要使用冻结窗口,需要先理解在Excel中是如何冻结行和列的。

在这里插入图片描述

如上图,选择了D7单元格,然后选择冻结窗体,可以看到冻结了1-6行和ABC列,即冻结窗体会冻结选中单元格上方所有行和左侧所有列。

此时可以得出以下冻结方法:

// 冻结第一行
$spreadsheet->getActiveSheet()->freezePane('A2');

// 冻结第一列
$spreadsheet->getActiveSheet()->freezePane('B1');

保护工作表 (Protection)

向Excel文件设置密码,可以防止文件内容被修改。

保护工作簿

不能新增、修改、删除工作表,但不会影响工作表中的内容。

$security = $spreadsheet->getSecurity();
$security->setLockWindows(true);
$security->setLockStructure(true);
// 设置工作簿密码
$security->setWorkbookPassword("PhpSpreadsheet");

保护工作表

已存在的工作表内容无法新增、编辑、删除。但不影响操作工作表(可以新增、修改、删除),新增的工作表可以编辑里面的内容,可以删除内容已被锁定的工作表。

// 获取当前激活的工作表的安全信息
$protection = $spreadsheet->getActiveSheet()->getProtection();
$protection->setPassword('PhpSpreadsheet');
// 锁定内容
$protection->setSheet(true);
// 不能排序
$protection->setSort(false);
// 不能新增行
$protection->setInsertRows(false);
// 不能设置格式
$protection->setFormatCells(false);

如何只锁定部分单元格

现在新建的xlsx表格(其他格式没有测试过)都是默认锁定所有单元格。若直接设置保护工作表,将会锁定所有的单元格。
要实现只锁定部分单元格,则需要先全选所有单元格,然后单击“锁定单元格”取消锁定,然后再选择需要锁定的单元格,并锁定,最后再“保护工作表”,此时就能实现这个功能了。

默认锁定了所有单元格

在Excel表格里面是可以这样子实现的,但是在程序中,如果取消所有单元格的锁定,需要先框选所有单元格(A1:XFD1048576),这样会占用较大的内存,最后可能会报内存不足的错误。

曲线救国的方法:先选择一个大的范围,取消里面的单元格锁定,然后再选择需要锁定的单元格,并锁定。此时需要考虑生成的表格文件是否可以编辑,并且可编辑的范围需要在已解锁的单元格里面。

// 锁定A1到A10单元格
$spreadsheet->getActiveSheet()->getStyle('A1:A10')
    ->getProtection()
    ->setLocked(\PhpOffice\PhpSpreadsheet\Style\Protection::PROTECTION_UNPROTECTED);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值