[]
        
(Showing Draft Content)

表单保护

GcExcel允许您保护工作簿,以防它包含任何不能与他人共享的关键和机密信息。此外,您还可以保护它不受修改,这样其他用户就不能对工作簿执行某些操作。


要保护或取消保护工作簿,您可以执行以下操作:

使用密码保护工作表

GcExcel允许用户通过密码加密工作簿来保护它。当您的业务关键型工作簿中包含不能与所有人共享的敏感数据时,这一点非常重要。可以使用XlsxSaveOptions类的setPassword方法来保护工作簿。

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

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

保护工作簿免受修改

工作簿可以通过更改其数据或更改其结构和窗口进行修改。因此,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作为参数。两种方法都有structurewindows两个可选参数,设置时提供不同类型的修改保护。

  • 如果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);

取消保护工作簿不受修改

受保护的工作簿可以不受保护,以便使用工作簿类的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);