我提供了保护,也隐藏了工作表'MasterData‘,我在其中创建了一些命名范围,我在第二个工作表中使用了'customerAssets’。下面是代码片段:
workbook.setSheetHidden(0, true); //to hides masterData
workbook.setActiveSheet(1); // sets active sheet as Customer Assets Sheet
masterDataSheet.protectSheet("12345"); // protect MasterData sheet但在打开excel之后:在这里输入图像描述
它会有什么问题?
发布于 2016-12-13 17:01:35
Excel或Calc中的工作表既可以是活动的,也可以是活动的(视图中位于您面前的工作表)和选定的工作表(可以作为一个组选择多个工作表)。
第一个创建的工作表将始终是活动的和选定的。因此,如果您的MasterData工作表是第一个创建的工作表,那么它是活动的和选中的。workbook.setActiveSheet更改活动状态,但不更改所选状态。因此您的MasterData工作表将保持选中状态。活动单元格中的更改将始终应用于所有选定的工作表。因此,您确实尝试更改受保护的单元格,因为也选择了受保护的MasterData表。
如果通过鼠标单击选择单个工作表,则所选内容将被更改,所选的工作表组将不再被选中。
我们至少需要取消选择MasterData表。但我们也应该选择另一张纸。
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();
}
}https://stackoverflow.com/questions/41121676
复制相似问题