Java 为什么Excel会将细胞视为受保护的,即使它们不受保护?
我提供了保护,还隐藏了表格“主数据”,从中我创建了一些命名范围,我在第二张表格“customerAssets”中使用了这些命名范围。下面是代码片段:Java 为什么Excel会将细胞视为受保护的,即使它们不受保护?,java,apache-poi,Java,Apache Poi,我提供了保护,还隐藏了表格“主数据”,从中我创建了一些命名范围,我在第二张表格“customerAssets”中使用了这些命名范围。下面是代码片段: workbook.setSheetHidden(0, true); //to hides masterData workbook.setActiveSheet(1); // sets active sheet as Customer Assets Sheet masterDataSheet.protec
workbook.setSheetHidden(0, true); //to hides masterData
workbook.setActiveSheet(1); // sets active sheet as Customer Assets Sheet
masterDataSheet.protectSheet("12345"); // protect MasterData sheet
但在打开excel之后:
它可能有什么问题?Excel或Calc中的工作表既可以是活动的(视图中您面前的工作表),也可以是选中的(可以选择多个工作表作为一个组) 第一个创建的图纸将始终处于活动状态和选中状态。因此,如果主数据表是第一个创建的表,则它处于活动状态并处于选中状态。
workbook.setActiveSheet
更改活动状态,但不更改选定状态。因此,您的主数据表保持选中状态。活动单元格中的更改将始终应用于所有选定的图纸。因此,您确实尝试更改受保护的单元格,因为受保护的主数据表也被选中
如果用鼠标单击选择单个图纸,则选择将被更改,选定的图纸组将不再被选择
我们至少需要取消选择主数据表。但我们也应该选择另一张
import java.io.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
public class CreateSheets {
public static void main(String[] args) throws Exception {
Workbook workbook = new XSSFWorkbook();
Sheet masterDataSheet = workbook.createSheet("MasterData"); //first sheeet will be both active and selected
Sheet customerAssetsSheet = workbook.createSheet("Customer Assets");
Sheet sheet1 = workbook.createSheet("Sheet1");
workbook.setSheetHidden(0, true); //hide masterDataSheet
masterDataSheet.setSelected(false); //unselect masterDataSheet
workbook.setActiveSheet(1); //sets active sheet as Customer Assets Sheet
//customerAssetsSheet.setSelected(true); //not necessary but recommended: set Customer Assets Sheet selected
masterDataSheet.protectSheet("12345"); // protect MasterData sheet
FileOutputStream fileOut = new FileOutputStream("CreateSheets.xlsx");
workbook.write(fileOut);
fileOut.close();
workbook.close();
}
}