Apache POI - Excel - 文件->密码->"Read-only recommended"(如何禁用)

Apache POI - Excel - File->Passwords->"Read-only recommended" (How to disable)

我有几个设置了“推荐只读”标志的 xlsx 文件。

我浏览了 POI XML Properties 没有运气。

Office Open XML-Excel 文件中,“只读推荐”设置作为 fileSharing XML-element 中的一个属性存储在 /xl/workbook.xml 中。 =20=]

...
<fileSharing readOnlyRecommended="1"/>
...

仅使用低级别 org.openxmlformats.schemas.spreadsheetml.x2006.main.*-类.

可以使用 apache poi 设置或取消设置

完整示例:

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;

import java.io.*;

class ExcelRemoveReadOnlyRecommended  {

 static void removeReadOnlyRecommended(XSSFWorkbook workbook) {    
  CTWorkbook ctWorkbook = workbook.getCTWorkbook();
  CTFileSharing ctfilesharing = ctWorkbook.getFileSharing();
  if (ctfilesharing != null) {
   ctfilesharing.setReadOnlyRecommended(false);
  }
 }
 
 public static void main(String[] args) throws Exception {
     
  String sourceFilePath = "./sourceFile.xlsx";
  String resultFilePath = "./resultFile.xlsx";
    
  Workbook workbook = WorkbookFactory.create(new FileInputStream(sourceFilePath));
  
  if (workbook instanceof XSSFWorkbook) {
   removeReadOnlyRecommended((XSSFWorkbook)workbook);
  }

  OutputStream out = new FileOutputStream(resultFilePath);
  workbook.write(out);
  out.close();
  workbook.close();
 }
}

如果 sourceFile.xlsx 已设置该选项,但没有密码,则在 运行 代码之后 resultFile.xlsx 不再设置该选项。

如果也设置了密码,则需要先解密,然后fileSharing中的密码也需要取消。当然,至少 decryption-password 需要知道。