[]
        
(Showing Draft Content)

使用工作表

在管理工作表时,您可以执行以下操作来完成基本的电子表格任务。

访问默认工作表

默认情况下,创建新工作簿时,会自动在工作簿中添加一个名为Sheet1的空工作表。对于每个工作簿,仅添加一个默认工作表。

请参考以下示例代码,以访问工作簿中的默认工作表。

// Fetch the default worksheet
IWorksheet worksheet = workbook.getWorksheets().get(0);

添加多个工作表

您可以在工作簿中的特定工作表之前或之后添加一个工作表。

请参考以下示例代码,以在一个工作簿中插入多个工作表。

// Add a worksheet to the workbook. 
IWorksheet worksheet1 = workbook.getWorksheets().add();
        
// Add a new worksheet before worksheet1 and reset its name
IWorksheet worksheet2 = workbook.getWorksheets().addBefore(worksheet1);
worksheet2.setName("MySheet2");
        
// Add a sheet after worksheet2
workbook.getWorksheets().addAfter(workbook.getWorksheets().get(1));

激活工作表

在具有多个工作表的工作簿中,您可能希望将当前工作表或任何特定的工作表设置为工作簿的活动工作表。可以使用IWorksheet接口的activate方法完成此操作。

请参考以下示例代码,以激活工作簿中的工作表。

IWorksheet worksheet4 = workbook.getWorksheets().add();
        
// Activate the newly created sheet
worksheet4.activate();

访问工作表

工作簿将所有工作表存储在工作表集合中

为了访问工作簿中的特定工作表,请参考以下示例代码。

// Accessing a worksheet using sheet index.
IWorksheet worksheet = workbook.getWorksheets().get(0);
        
// Accessing a worksheet using sheet name as "Sheet1".
IWorksheet worksheet1 = workbook.getWorksheets().get("Sheet1");

保护工作表

为了确保工作簿中数据的安全性和完整性,GcExcel Java 使用户可以通过将工作表转换为只读表来保护工作表。可以通过使用密码或不使用密码来防止修改工作表。

对工作表启用保护设置

IProtectionSettings 接口提供方法来在工作表中明确配置保护设置。如果要删除保护,可以通过将保护字段设置为 false 来取消保护工作表。

开启或移除 GcExcel Java 中工作表的保护设置,请参考以下示例代码。

// Protect Worksheet
worksheet.setProtection(true);
worksheet.getProtectionSettings().setAllowInsertingColumns(true);
        
// Unprotect worksheet
IWorksheet worksheet1 = workbook.getWorksheets().add();
worksheet1.setProtection(false);

通过密码保护工作表

通过使用IWorksheet接口的Protect方法,可以为工作表设置密码保护以限制修改。密码是区分大小写的字符串,可以作为参数传递给 Protect 方法。

请参考以下示例代码,以使用密码保护工作表。

// 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.
  worksheet.protect("Ygs_87@ytr");
// Save workbook to xlsx
  workbook.save("ProtectWorksheet.xlsx", SaveFileFormat.Xlsx);

可以使用IWorksheet界面的Unprotect方法 来取消密码保护的工作表的保护。需要将正确的密码(在Protect方法中设置的密码)作为参数传递给Unprotect方法。如果省略了密码或输入了错误的密码,则会抛出异常消息“ Invalid Password”。

请参考以下示例代码,以保护工作表免受使用密码的修改。

// 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);
  worksheet.protect("Ygs_87@ytr");
  //Removes the above protection from the workbook.
  worksheet.unprotect("Ygs_87@ytr");
  // Save workbook to xlsx
  workbook.save("UnProtectWorksheet.xlsx", SaveFileFormat.Xlsx);

删除工作表

用户可以从工作簿中删除一个或多个工作表。删除工作表后,它会自动从工作表集合中删除。

要从工作簿中删除特定的工作表,请参考以下示例代码。

IWorksheet worksheet5 = workbook.getWorksheets().add();
        
// Workbook must contain at least one visible worksheet, if delete the one visible worksheet, it will throw exception.
worksheet5.delete();

复制或移动工作表

您可以复制正在使用的当前电子表格,也可以在工作簿之间复制工作表,然后根据自定义要求和首选项将它们移动到特定位置。这可以通过使用IWorksheet接口的copy()copyAfter()方法,copyBefore()方法,move()方法,moveBefore()方法和moveAfter()方法来 完成。使用这些方法,可以根据需要将工作表放置在同一工作簿或另一工作簿中,从而轻松地复制和重新放置工作表。

请参考以下示例代码,以复制工作表。

// Initialize workbook
Workbook workbook = new Workbook();
        
// Fetch default worksheet
IWorksheet worksheet = workbook.getWorksheets().get(0);
Object data = new Object[][] { 
{ "Name", "City", "Birthday", "Sex", "Weight", "Height", "Age" },
{ "Bob", "newyork", new GregorianCalendar(1968, 6, 8), "male", 80, 180, 56 },
{ "Betty", "newyork", new GregorianCalendar(1972, 7, 3), "female", 72, 168, 45 },
{ "Gary", "NewYork", new GregorianCalendar(1964, 3, 2), "male", 71, 179, 50 },
{ "Hunk", "Washington", new GregorianCalendar(1972, 8, 8), "male", 80, 171, 59 },
{ "Cherry", "Washington", new GregorianCalendar(1986, 2, 2), "female", 58, 161, 34 },
{ "Coco", "Virginia", new GregorianCalendar(1982, 12, 12), "female", 58, 181, 45 },
{ "Lance", "Chicago", new GregorianCalendar(1962, 3, 12), "female", 49, 160, 57 },
{ "Eva", "Washington", new GregorianCalendar(1993, 2, 5), "female", 71, 180, 81 } };
        
// Set data
worksheet.getRange("A1:G9").setValue(data);

// Copy the active sheet to the end of current workbook
IWorksheet copy_worksheet = worksheet.copy();
copy_worksheet.setName("Copy of " + worksheet.getName());

// Saving workbook to xlsx
workbook.save("CopyWorkSheet.xlsx", SaveFileFormat.Xlsx);

请参考以下示例代码,以便在工作簿之间复制工作表。

// Create a new workbook
Workbook workbook = new Workbook();
        
// Create another source_workbook
Workbook source_workbook = new Workbook();
        
// Fetch the active worksheet
IWorksheet worksheet = source_workbook.getActiveSheet();
Object data = new Object[][] { 
{ "Name", "City", "Birthday", "Sex", "Weight", "Height", "Age" },
{ "Bob", "newyork", new GregorianCalendar(1968, 6, 8), "male", 80, 180, 56 },
{ "Betty", "newyork", new GregorianCalendar(1972, 7, 3), "female", 72, 168, 45 },
{ "Gary", "NewYork", new GregorianCalendar(1964, 3, 2), "male", 71, 179, 50 },
{ "Hunk", "Washington", new GregorianCalendar(1972, 8, 8), "male", 80, 171, 59 },
{ "Cherry", "Washington", new GregorianCalendar(1986, 2, 2), "female", 58, 161, 34 },
{ "Coco", "Virginia", new GregorianCalendar(1982, 12, 12), "female", 58, 181, 45 },
{ "Lance", "Chicago", new GregorianCalendar(1962, 3, 12), "female", 49, 160, 57 },
{ "Eva", "Washington", new GregorianCalendar(1993, 2, 5), "female", 71, 180, 81 } };
        
// Set data
worksheet.getRange("A1:G9").setValue(data);

/* Copy content of active sheet from source_workbook to the current workbook
   before the first sheet */
IWorksheet copy_worksheet = worksheet.copyBefore(workbook.getWorksheets().get(0));
copy_worksheet.setName("Copy of Sheet1");
copy_worksheet.activate();

// Saving workbook to xlsx
workbook.save("CopyWorkSheetBetweenWorkBooks.xlsx", SaveFileFormat.Xlsx);

选择多个工作表

GcExcel允许您使用IWorksheets界面的select方法一次选择多个工作表 。该方法采用可选参数replace,该参数包括:

  • 设置为True(默认值)时,将当前选择内容替换为指定的对象。

  • 设置为False时,将当前选择范围扩展到包括任何先前选择的对象和指定的对象。

还可以使用IWorkbook界面的getSelectedSheets方法来检索所选的工作表 。此外,具有多个选定工作表的Excel文件可以被加载,修改并保存回Excel。选择多个工作表时,GcExcel显示以下行为:

  • 如果激活了未选择的表单,则取消选择所选择的表单。.

  • 如果删除了所选工作表,则会将其从所选工作表中删除。

  • 如果选择了所有工作表并激活了工作表,则将其设置为活动工作表,并取消选择所有选择的工作表。

  • 如果添加,复制或移动工作表,则取消选择所选的工作表。

请参考下面的示例代码,以在一个工作簿中选择多个工作表。

//create a new workbook
Workbook workbook = new Workbook();
IWorksheet sheet1 = workbook.getActiveSheet();
IWorksheet sheet2 = workbook.getWorksheets().add();
IWorksheet sheet3 = workbook.getWorksheets().add();

// Select sheet2 and sheet3.
workbook.getWorksheets().get(new String[] { sheet2.getName(), sheet3.getName() }).select();

// Write names of selected sheets to console
for (IWorksheet sheet : workbook.getSelectedSheets()) {
System.out.println(sheet.getName());
}

// Add sheet1 to selected sheets
sheet1.select(false);

// Write count of selected sheets to console
System.out.println(workbook.getSelectedSheets().getCount());

//save to an excel file
workbook.save("SelectWorksheets.xlsx");

复制或移动多个工作表

GcExcel提供了IWorksheets接口的 copycopyBeforecopyAftermovemoveBeforemoveAfter 方法,可以同时复制或移动多个工作表。您可以将工作表复制或移动到同一工作簿或不同工作簿中的末尾或特定位置。具体操作如下:

方法名

描述

copy

该方法将工作表集合复制到目标工作簿的末尾。如果目标工作簿为空,则工作表集合将被复制到当前工作簿中。

copyBefore

该方法将工作表集合复制到指定工作表的前面。目标工作表可以属于任何工作簿。

copyAfter

该方法将工作表集合复制到指定工作表的后面。目标工作表可以属于任何工作簿。

move

该方法将工作表集合移动到目标工作簿的末尾。如果目标工作簿为空,则工作表集合将被复制到当前工作簿中。

moveBefore

该方法将工作表集合移动到指定工作表的前面。目标工作表可以属于任何工作簿。

moveAfter

该方法将工作表集合移动到指定工作表的后面。目标工作表可以属于任何工作簿。

请参考以下示例代码来复制同一工作簿中的多个工作表:

// Initialize Workbook.
Workbook workbook = new Workbook();

// Open the Excel file.
workbook.open("FlowChartsFile.xlsx");

// Copy the selected sheets to the end of the current workbook.
workbook.getWorksheets().get(new String[] {"FlowChart1", "FlowChart2"}).copy();

// Save the Excel file.
workbook.save("CopyMultipleWorksheets.xlsx");

请参考以下示例代码来将多个工作表复制到另一个工作簿中:

// Initialize Workbook.
Workbook workbook = new Workbook();

// Open the Excel file.
workbook.open("FlowChartsFile.xlsx");
    
// Create another Excel file.
Workbook copyWorkbook = new Workbook();

// Copy the selected sheets to the end of the target workbook.
workbook.getWorksheets().get(new String[] {"FlowChart1", "FlowChart2"}).copy(copyWorkbook);

// Save the Excel file.
workbook.save("CopyMultipleWorksheets.xlsx");

请参考以下示例代码来在同一工作簿中移动多个工作表:

// Initialize Workbook.
Workbook workbook = new Workbook();

// Open the Excel file.
workbook.open("FlowChartsFile.xlsx");

// Copy the selected sheets to the end of the current workbook.
workbook.getWorksheets().get(new String[] {"FlowChart1", "FlowChart2"}).move();

// Save the Excel file.
workbook.save("MoveMultipleWorksheets.xlsx");

请参考以下示例代码来将多个工作表移动到另一个工作簿中:

// Initialize Workbook.
Workbook workbook = new Workbook();

// Open the Excel file.
workbook.open("FlowChartsFile.xlsx");
    
// Create another Excel file.
Workbook moveWorkbook = new Workbook();

// Copy the selected sheets to the end of the target workbook.
workbook.getWorksheets().get(new String[] {"FlowChart1", "FlowChart2"}).move(moveWorkbook);

// Save the Excel file.
workbook.save("MoveMultipleWorksheets.xlsx");

请注意以下事项:

  • 当前工作簿中的工作表不能全部移动到另一个工作簿;因为工作簿必须至少有一个工作表,否则将引发异常。

  • 当在当前工作簿中移动所有工作表时,不会发生任何事情,因为移动前后的结果是一致的。

  • 当复制的工作表名字与目标工作簿中已存在的工作表名字相同时,将通过添加后缀(x)来重命名工作表。其中,x表示具有相同名称的工作表的索引。

局限性

要在工作簿中选择多个工作表,需要有效的许可证。否则,评估警告表将覆盖表选择和活动表。