[]
        
(Showing Draft Content)

保护工作簿

概述

GcExcel允许您对工作簿添加或者移除保护功能,通过密码,您可以防泄露关键和机密的信息。同时,您还可以通过保护功能禁止工作簿修改,这样其他用户就不能对工作簿执行某些操作。

使用密码保护工作表

通过使用 XlsxSaveOptions 类的 setPassword 方法来保护工作簿。

请参考下面的示例代码来使用密码保护您的工作簿。

// Saving an excel file while setting password
XlsxSaveOptions options = new XlsxSaveOptions();
options.setPassword("123456");
workbook.save("SaveExcelWithPassword.xlsx", options);

当使用 Excel 打开时,会要求输入密码:

image

禁止修改工作簿

工作簿的修改包含两方面:

  • 更改数据

  • 更改结构和窗口

因此,GcExcel 保护允许您从上述的两方面保护工作簿不受修改。

禁止修改数据

在许多情况下,您可能仅希望以只读的方式分享数据,不希望数据被篡改。例如,存储办公室设立期间产生的费用清单的工作簿需要与利益相关者共享,同时保护其数据不受任何形式的篡改。

GcExcel Java 提供了 IWorkbook 接口的 getWriteProtection 方法,可以在保存工作簿时设置保护选项。该类允许您使用 setReadOnlyRecommended 方法建议用户仅在阅读模式下打开,也可以通过 setWritePassword 方法设置“修改密码”。当用户提供正确的修改密码时,GcExcel会自动打开文档。您也可以使用 validatePassword 方法的结果定制行为。WriteProtection 类还提供 getWriteReservedgetWriteReservedBy 方法来获取工作簿是否受保护以及由谁保护。

请参阅以下示例代码,以保护工作簿数据。

// Create a new workbook
Workbook workbook = new Workbook();
// Open an excel file.
InputStream fileStream = getResourceStream("Medical office start-up expenses 1.xlsx");
workbook.open(fileStream);

// Specify the name of the user who reserves write permission on this workbook.
workbook.getWriteProtection().setWriteReservedBy("Eric");

// Specify this workbook is saved as read-only recommended.  
// Microsoft Excel displays a message recommending that you open the workbook as read-only.
workbook.getWriteProtection().setReadOnlyRecommended(true);

// Protects the workbook with a password so that other users cannot accidentally or intentionally edit the data.
// The write-protection only happens when you open it with an Excel application.
workbook.getWriteProtection().setWritePassword("Y6dh!et5");
    
// Save to an excel file
workbook.save("CreateWriteProtectedWorkbook.xlsx");

禁止修改结构和窗口

Workbook 类提供了两个重载的 protect 方法,其中一个以 password 作为参数。两种方法都有 structure windows 两个可选参数,设置时提供不同类型的修改保护。

  • 如果 structure 为 true,则无法添加、移动、删除、隐藏或重命名工作表,也无法查看隐藏的工作表。默认值为 true。

  • 如果 windows 为 true,则无法移动、调整工作簿窗口的大小、关闭或隐藏或取消隐藏工作簿窗口。此选项仅在 Excel 2007、Excel 2010、Excel for Mac 2011 和 Excel 2016 for Mac 中支持,默认值为 false。

请参考下面的示例代码,使用密码保护工作簿。

 // Initialize workbook
 Workbook workbook = new Workbook();
// Fetch default worksheet
 IWorksheet worksheet = workbook.getWorksheets().get(0);
// Data
 Object data = new Object[][] { { "Name", "City", "Sex", "Weight", "Height", "Age" },
        { "Bob", "NewYork", "male", 80, 180, 56 }, { "Betty", "NewYork", "female", 72, 168, 45 },
        { "Gary", "NewYork", "male", 71, 179, 50 }, { "Hunk", "Washington", "male", 80, 171, 59 },
        { "Cherry", "Washington", "female", 58, 161, 34 }, { "Coco", "Virginia", "female", 58, 181, 45 },
        { "Lance", "Chicago", "female", 49, 160, 57 }, { "Eva", "Washington", "female", 71, 180, 81 } };

// Set data
worksheet.getRange("A1:G9").setValue(data);
//Protects the workbook with password so that other users cannot view hidden worksheets, add, move, delete, hide, or rename worksheets.
workbook.protect("Ygs_87@ytr");
// Save workbook to xlsx
workbook.save("ProtectWorkbook.xlsx", SaveFileFormat.Xlsx);

请参阅以下示例代码,在不使用密码的情况下保护工作簿。

// Initialize workbook
Workbook workbook = new Workbook();
// Fetch default worksheet
IWorksheet worksheet = workbook.getWorksheets().get(0);
// Protects the workbook so that other users cannot view hidden worksheets, add,
// move, delete, hide, or rename worksheets.
workbook.protect();
// Saving workbook to xlsx
workbook.save("1-ProtectWorkbook.xlsx", SaveFileFormat.Xlsx);

移除修改限制

受保护的工作簿,可以禁止修改窗口及工作表。当希望移除保护时,您可以通过 workbook 类上 unprotect 方法移除保护。

取消保护时,unprotect 方法需要将正确的密码作为参数。如果省略了密码或者传递了错误的密码,就会抛出一个异常消息“无效密码”。

请参考以下示例代码取消密码保护工作簿的保护。

// Initialize workbook
 Workbook workbook = new Workbook();
// Fetch default worksheet 
 IWorksheet worksheet = workbook.getWorksheets().get(0);
 // Data
 Object data = new Object[][] { { "Name", "City", "Sex", "Weight", "Height", "Age" },
        { "Bob", "NewYork", "male", 80, 180, 56 }, { "Betty", "NewYork", "female", 72, 168, 45 },
        { "Gary", "NewYork", "male", 71, 179, 50 }, { "Hunk", "Washington", "male", 80, 171, 59 },
        { "Cherry", "Washington", "female", 58, 161, 34 }, { "Coco", "Virginia", "female", 58, 181, 45 },
        { "Lance", "Chicago", "female", 49, 160, 57 }, { "Eva", "Washington", "female", 71, 180, 81 } };
  // Set data    
  worksheet.getRange("A1:G9").setValue(data);
  workbook.protect("Ygs_87@ytr");
//Removes the above protection from the workbook
  workbook.unprotect("Ygs_87@ytr");
// Save workbook to xlsx
  workbook.save("UnProtectWorkbook.xlsx", SaveFileFormat.Xlsx);

如果没有使用密码保护工作簿,则 unprotect 方法将忽略 password 参数。

请参考以下示例代码取消对受保护工作簿的保护。

// Initialize workbook
Workbook workbook = new Workbook();
// Fetch default worksheet
IWorksheet worksheet = workbook.getWorksheets().get(0);
workbook.protect();
// Removes the above protection from the workbook.
workbook.unprotect();
// Saving workbook to xlsx
workbook.save("2-UnprotectWorkbook.xlsx", SaveFileFormat.Xlsx);