代码之家  ›  专栏  ›  技术社区  ›  Janne

在JXL生成的Excel文档中锁定单元格

  •  2
  • Janne  · 技术社区  · 14 年前

    有没有办法锁定用户编辑的某些单元格?我尝试了以下方法:

    WritableCellFormat cf = new WritableCellFormat();
    cf.setLocked(true);
    sheet.addCell(new Number(col, row, value, cf));
    

    但是,这似乎对生成的电子表格没有任何影响,即在Excel中打开文件时,单元格内容仍然可以更改。

    3 回复  |  直到 14 年前
        1
  •  5
  •   fonadius    13 年前

    你必须为每张纸“激活”保护。我不知道该怎么做。我找到的方法是

    sheet.setProtected(true);
    

    但显然,这种方法不再被推荐。所以你应该找个新的。

    编辑: 对不起,我错了。这把表上的每个单元格都锁上了。

    编辑2: 如果您锁定实体表,然后解锁可编辑单元格,它对我有效。

    sheet.getSettings().setProtected(true);
    WritableCellFormat unlocked = new WritableCellFormat();
    unlocked.setLocked(false);
    Label l = new Label(0, 0, "", unlocked);
    sheet.addCell(l);
    
        2
  •  2
  •   Community TheSoundDefense    7 年前

    下面是在不使用中不推荐使用的方法的情况下保护单元格的一般步骤 accepted answer
    1创建WritableCellFormat对象并将locked设置为false

    WritableCellFormat cellFormat = new WritableCellFormat();
    cellFormat.setLocked(false)
    
    WritableSheet sheet = Worksheet.createSheet();
    
    //Create a cell that is protected and a cell that is not protected
    sheet.addCell(new Label(col1, row, "My Locked Cell");
    sheet.addCell(new Label(col2, row, "My Unlocked Cell", cellFormat);
    
    //Protect the sheet so that locked cells are locked and unlocked cells are unlocked
    sheet.getSettings().setProtected(true);
    
        3
  •  0
  •   Edd    6 年前

    在较新的版本中,您应该这样做

    sheet.protectSheet("password");
    

    注意模板文件也应该在首选项中受到保护。否则我在LibreOffice中的保护工作不正常,工作表看起来像“挂起的”,你甚至不能点击单元格。显式地使protected解决了这个问题,但您应该切换“使用受保护的单元格”或类似smth的复选框。 另外,我用密码进行了保护,但它并没有在最终文件中使用(密码来自代码)