新增行需要停留在可编辑的单元格才能新增行,否则会提示:此单元格或图表受到保护。要进行更改,您必须先取消保护工作表
@feng.qun.zhu.avaryholding.com
解决思路
出现 “此单元格或图表受到保护” 提示,是因为工作表已被 保护【1】。在 Aspose.Cells(Java)中,只有先 取消工作表保护,才能通过代码插入行、列或修改单元格内容【2】【4】。
1. 取消工作表保护
// 加载工作簿
Workbook wb = new Workbook("input.xlsx");
// 获取需要操作的工作表(假设是第1张)
Worksheet ws = wb.getWorksheets().get(0);
// 取消保护
// - 空密码情况:直接调用无参方法
// - 有密码情况:传入密码,否则会抛出异常
try {
ws.unprotect(); // 空密码
// ws.unprotect("yourPassword"); // 有密码时使用
} catch (Exception e) {
// 处理密码错误等异常
e.printStackTrace();
}
Worksheet.unprotect()用于解除工作表保护;无参版本适用于空密码的情况,带密码的重载需要提供正确的密码【2】【4】。
2. 插入新行
// 在第 5 行(索引从 0 开始)插入 1 行
int insertRowIndex = 4; // 第 5 行
int rowsToInsert = 1;
ws.getCells().insertRows(insertRowIndex, rowsToInsert);
3. (可选)重新保护工作表
ws.protect(ProtectionType.ALL); // 或 ws.protect("yourPassword");
4. 保存工作簿
wb.save("output.xlsx");
小结
- 根本原因:工作表被保护,导致只能在可编辑单元格上操作【1】。
- 解决办法:在代码中先调用
Worksheet.unprotect()(或unprotect(password))解除保护,然后使用Cells.insertRows(或insertColumns)等 API 添加行【2】【4】。 - 注意:如果工作表使用了密码保护,必须提供正确的密码;否则
unprotect会抛出异常【2】。 - 其他限制:如果使用 Aspose.Cells.GridDesktop,运行时不支持解除保护,需要在 Excel 中手动取消保护后重新保存文件【3】。
按照上述步骤即可在 Aspose.Cells for Java 中实现 不受 “必须停留在可编辑单元格” 限制的行插入。如有进一步问题,欢迎在本贴继续交流。
