如何使用 Java 和 Apache POI 在 Excel 中禁用 "Remove Personal Information from file properties on save"

How to disable "Remove Personal Information from file properties on save" in Excel using Java and Apache POI

我正在努力简化 Excel 文件跟踪流程。基本上,当 excel 文件上传到我们的服务器时,我们需要保留原始版本的副本,以及经过更改的新版本(通过使用 excel 中的“跟踪更改”选项)。除了以下步骤外,我已经弄清楚了所有步骤。

我可以使用 Apache POI 禁用 sheet 上的任何保护并制作副本。但是,如果我想在 spreadsheet 上启用“跟踪更改”,我必须进入 excel -> 选项 -> 信任中心设置 -> 隐私选项然后取消选中显示的框“保存时从文件属性中删除个人信息” 完成后,“跟踪更改”选项可用。

我的问题是,是否可以在用户打开之前通过 apache poi 禁用此设置,这样用户就不需要每次都打开文件并导航到信任中心设置?我一直在谷歌搜索,但无法得到明确的答案。任何帮助将不胜感激!

关于我希望它如何工作的概述 ->
用户将 xlsx 文件放入文件夹
我的应用程序在禁用锁定和隐私的情况下制作了该文件的副本
然后用户可以打开该文件并启用跟踪更改以进行更改。

现在如何运作
用户将一个 xlsx 文件放入文件夹
我的应用程序在禁用锁定的情况下制作了该文件的副本。
然后用户需要打开文件,深入几层选项以禁用“删除个人信息”
然后用户可以启用“跟踪更改”

我知道这似乎是一个小改动,但我的想法是尽可能简化它。

感谢阅读!

设置过滤器隐私在 /xl/workbook.xml 的工作簿属性中设置。

XML 看起来像:

<workbookPr filterPrivacy="1" ...>

可以这样去掉:

XSSFWorkbook workbook ...
workbook.getCTWorkbook().getWorkbookPr().unsetFilterPrivacy();

之后,信任中心 - 隐私选项中的“保存时从文件属性中删除个人信息”选项应显示为未选中。

完整示例:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;

import java.io.FileInputStream;
import java.io.FileOutputStream;

class ExcelRemoveFilterPrivacy {

 public static void main(String[] args) throws Exception {
  String fileIn = "./TestIn.xlsx";
  String fileOut = "./TestOut.xlsx";

  try (XSSFWorkbook workbook = (XSSFWorkbook)WorkbookFactory.create(new FileInputStream(fileIn));
       FileOutputStream out = new FileOutputStream(fileOut)) {

   if (workbook.getCTWorkbook().getWorkbookPr().isSetFilterPrivacy())
    workbook.getCTWorkbook().getWorkbookPr().unsetFilterPrivacy();

   workbook.write(out);
  } 
 }
}