当前位置: 首页 > 知识库问答 >
问题:

xml打破密码保护的XSSFWorkbook(Apache POI V3.16)保存过程

桑鸿志
2023-03-14

[编辑-添加了下面的代码来显示我正在做的事情:创建XSSFWorkbook并提取数据,然后加密]

注意:我使用Mozilla Rhino V1.7R3在服务器端Javascript上运行代码,它提供了对几乎所有ECMAScript Edition5的支持,以及Mozilla Javascript 1.8的一些特性。

var wb = new XSSFWorkbook();
var createHelper = wb.getCreationHelper();

// Begin filling in rows/cells
addMostRecentSheet(wb);

var filepath = [hidden]
var fileOut = new java.io.FileOutputStream(filepath);
wb.write(fileOut);
fileOut.close();

var fs = new POIFSFileSystem();

var info = new EncryptionInfo(EncryptionMode.agile, CipherAlgorithm.aes192, HashAlgorithm.sha384, -1, -1, null);
var enc = info.getEncryptor();
enc.confirmPassword("password");

var os = enc.getDataStream(fs);
opc.saveImpl(os);  //<<-----Crash there - unable to save /x1/styles.xml
opc.close();

var fos = new java.io.FileOutputStream(filepath);
fs.writeFilesystem(fos);
fos.close();  

我最终设法保存了密码保护的xlsx,但我不得不删除日期列的样式。

function createDateCell(row, colNum, value)
{
    var cell;
    if (value)
    {
        cell = row.createCell(colNum);
        cell.setCellValue(value);
        var cellStyle = wb.createCellStyle();
        cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("dd/mm/yyyy"));
        cell.setCellStyle(cellStyle)
    }
    else
    {
        cell = row.createCell(colNum, Cell.CELL_TYPE_BLANK);
    }
    return cell;
}
org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: 
Fail to save: an error occurs while saving the package : 
The part /xl/styles.xml failed to be saved in the stream with marshaller
org.apache.poi.openxml4j.opc.internal.marshallers.DefaultMarshaller@216fb8e 

共有1个答案

郎弘业
2023-03-14

要创建日期样式单元格,需要执行以下操作:

var wb = new XSSFWorkbook();
var createHelper = wb.getCreationHelper();
var dateStyle = wb.createCellStyle();
dateStyle.setDataFormat(createHelper.createDataFormat().getFormat("dd/mm/yyyy"));

你只需要做一次。通过在顶部设置cellStyle,您只填充了/xl/styles.xml一次。

填充单元格时,只需将dateStyle添加到函数中:

createDateCell(row, colNum++, tables.SHE_SOUTH.DOB.value, dateStyle);
function createDateCell(row,colNum,value, cellStyle){
    var cell;
    if(value){
        cell = row.createCell(colNum, Cell.CELL_TYPE_NUMERIC);
        cell.setCellValue(value);
        cell.setCellStyle(cellStyle);
    }
    else
    {
        cell = row.createCell(colNum, Cell.CELL_TYPE_BLANK);
    }
    return cell;
}
 类似资料:
  • protection([string $password]); 示例一 $config = ['path' => './tests']; ​ $fileObject = new \Vtiful\Kernel\Excel($config); $fileObject = $fileObject->fileName('tutorial.xlsx'); ​ $filePath = $fileObject

  • 问题内容: 我最近一直在试验Docker,以构建一些可玩的服务,而一直困扰我的一件事是将密码放入Dockerfile。我是一名开发人员,因此将密码存储在源代码中感觉像是一拳。这是否值得关注?关于如何在Dockerfiles中处理密码是否有良好的约定? 问题答案: 绝对是一个问题。Dockerfile通常签入存储库并与其他人共享。一种替代方法是在运行时提供任何凭据(用户名,密码,令牌,任何敏感内容)

  • 本文向大家介绍svn 使用受密码保护的存储库,包括了svn 使用受密码保护的存储库的使用技巧和注意事项,需要的朋友参考一下 示例 可以配置Subversion存储库,以便某些用户只能访问某些内容或命令。为了访问此受限内容,您将需要指定用户名和密码。 您的用户名和密码可以直接在命令中指定: 不幸的是,这会使您的密码在控制台上以纯文本形式出现。为了避免这种可能的安全问题,请指定用户名而不是密码。这样做

  • 问题内容: 我有一个受密码保护的Excel电子表格。我需要打开此电子表格并从中读取数据。我一直在尝试使用POI API无济于事。首选Java解决方案,但任何想法都会有所帮助。 编辑:是的,我有密码。该文件在excel中受密码保护;必须输入密码才能查看电子表格。 Edit2:我无法使用带有密码的POI打开它,我在寻找替代解决方案。 问题答案: 您可以使用JExcelApi。 自从我这样做已经有一段时

  • 问题内容: 目前,据说MD5部分不安全。考虑到这一点,我想知道使用哪种机制进行密码保护。 这个问题,“双重哈希”密码是否比仅hash一次密码安全?建议多次散列可能是一个好主意,而如何对单个文件实施密码保护建议使用盐。 我正在使用PHP。我想要一个安全,快速的密码加密系统。将密码hash一百万次可能更安全,但也更慢。如何在速度和安全性之间取得良好的平衡?另外,我希望结果具有恒定数量的字符。 hash

  • OAuth 2.0 资源所有者密码授权 允许一个客户端发送用户名和密码到令牌服务并获得一个表示该用户访问令牌。 (OAuth 2.0) 规范 建议仅对“受信任”的应用程序使用资源所有者密码授权。一般来说,当你想要验证一个用户并请求访问令牌的时候,使用交互式 OpenID Connect 流通常会更好。 不过,这个授权类型允许我们在 IdentityServer 快速入门中引入 用户 的概念,这是我