【问题标题】:Is there a way to lock individual cells (not the entire Excel worksheet) to prevent formatting?有没有办法锁定单个单元格(不是整个 Excel 工作表)以防止格式化?
【发布时间】:2020-08-08 00:39:17
【问题描述】:

我正在阻止用户通过执行以下代码来格式化生成的 Excel 文件中的工作表中的单元格:

XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet =  workbook.createSheet("sheet1");
CTSheetProtection prot = sheet.getCTWorksheet().getSheetProtection();
prot.setFormatCells(true);

有没有办法锁定工作表中单个单元格的格式,而不是锁定整个工作表的格式?

同样,有没有办法将其他保护应用于单个单元格?

例如,过滤和排序 - 如果有人试图对一组单元格应用这些操作,其中包括一个为该操作锁定的单元格,则将被禁止。

【问题讨论】:

    标签: excel apache-poi


    【解决方案1】:

    在“设置单元格格式”对话框中,您可以切换锁定或隐藏单元格。当您从“审阅”选项卡中使用“保护工作表”时,您可以选择保护工作表和锁定单元格的内容,并选择您希望允许用户对锁定/解锁单元格执行的操作。密码保护工作表,未经您的许可,用户将无法解除锁定。

    我假设您的大部分单元格都将被解锁,因此选择所有单元格并设置为解锁,然后锁定您想要锁定的单元格。

    我不确定通过 VBA 执行此操作的代码,但它应该很容易找到。 从逻辑上讲,您会希望选择所有单元格,然后将 cells.format.protection.locked 设置为 false,然后选择要锁定的范围并将其设置为 true。您可以轻松录制宏来查找此代码。

    【讨论】:

    • 如果我或多或少地尝试您所说的,请在我的桌面上运行 Excel 并仅保护一些单元格然后保护工作表,所有单元格的格式都被禁用,锁定或解锁。这让我相信没有办法只锁定锁定单元格的格式。看来您只能禁用整个工作表的格式设置。希望有人用代码示例证明我错了。
    • 我明白你的意思了。没有意识到该设置表示所有单元格的格式,而不仅仅是受保护的。无论用户试图对它做什么,你能否以编程方式强制单元格成为某种格式?与有条件地格式化单元格的填充颜色类似,您无法手动更改它。
    • 不确定,我会尝试一下,似乎是一种可能的解决方法。我更喜欢最干净、最直接的方式来完成它,但显然有一些可行的方法总比没有好。
    【解决方案2】:

    你应该检查这个链接,我已经编写了一个自定义方法来锁定单个或多个单元格在单张或多张 Excel 文件中的范围。

    https://stackoverflow.com/a/63299413/6835092

    对于单个单元格锁定,只需提及相同的范围值。即a1:a1。这将只锁定一个单元格。

    【讨论】:

      猜你喜欢
      • 2017-07-18
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      相关资源
      最近更新 更多