styles.xml破坏受密码保护的XSSFWorkbook(Apache POI v3.16)保存过程[已解决]

约书亚记

当前在Java版本1.7.0-251(Unix)上使用Apache POI 3.16

从@Aniruddh Chandegra解释的示例中摘录(如何使用Apache POI 3.14创建和编辑密码保护Excel工作表?

[编辑-添加以下代码来显示我在做什么:创建XSSFWorkbook并提取数据,然后加密]

注意:我正在使用Mozilla Rhino v1.7R3在服务器端Javascript上运行代码,它几乎支持所有ECMAScript Edition 5以及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,但不得不删除Date列的样式。

下面是将单元格格式化为Date单元格类型的代码:

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;
}

但是,在运行该程序时,我一直收到此错误,是否存在一种解决方法来保持Date列类型?错误信息:

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 
约书亚记

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

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);

函数createDateCell只需添加cellStyle即可:

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;
}

这样,/ xl / styles.xml不会像以前那样肿。这允许对工作簿进行加密。对待工作,归功于Axel Richter

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

保存Excel文档Apache POI

来自分类Dev

Python v3(随机密码生成器)

来自分类Dev

Apache POI插入图像

来自分类Dev

Apache POI宽度计算

来自分类Dev

Apache POI和颜色

来自分类Dev

Apache POI的ProGuard设置

来自分类Dev

Java Apache POI(第3部分)

来自分类Dev

apache poi indexoutbound异常

来自分类Dev

如何使用IdentityServer v3保护IdentityManager

来自分类Dev

Apache POI异常空白(已解决:\ u00A0不间断空格)

来自分类Dev

Apache Olingo Java库是否支持OData V3?

来自分类Dev

Apache POI样式已应用于所有单元

来自分类Dev

styles.xml(res \ values \ styles.xml)和styles.xml(res \ values-v21 \ styles.xml)之间的区别?

来自分类Dev

通过VBA在受密码保护的网络共享计算机上打开并保存文件

来自分类Dev

使用Apache POI的PatternSyntaxException

来自分类Dev

如何永久保存受密码保护的SSH密钥?

来自分类Dev

使用PHP检查Zip文件是否已加密或受密码保护

来自分类Dev

如何永久保存受密码保护的SSH密钥?

来自分类Dev

apache poi错误zip文件已关闭

来自分类Dev

如何在Python 3中打开受密码保护的zip文件

来自分类Dev

OpenShift V3:了解Docker的过程

来自分类Dev

Apache Olingo Java库是否支持OData V3?

来自分类Dev

styles.xml(res \ values \ styles.xml)和styles.xml(res \ values-v21 \ styles.xml)之间的区别?

来自分类Dev

宏以保存受密码保护的文件

来自分类Dev

如何在特定半径内使用Google Maps API v3查找和显示所有POI?

来自分类Dev

Amazon Web Service(AWS)S3,如何上传受密码保护的文件夹?

来自分类Dev

使用 Apache POI 打开 .docx 并使用密码保存

来自分类Dev

如何解决java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook

来自分类Dev

Apache POI Zip 文件已关闭

Related 相关文章

  1. 1

    保存Excel文档Apache POI

  2. 2

    Python v3(随机密码生成器)

  3. 3

    Apache POI插入图像

  4. 4

    Apache POI宽度计算

  5. 5

    Apache POI和颜色

  6. 6

    Apache POI的ProGuard设置

  7. 7

    Java Apache POI(第3部分)

  8. 8

    apache poi indexoutbound异常

  9. 9

    如何使用IdentityServer v3保护IdentityManager

  10. 10

    Apache POI异常空白(已解决:\ u00A0不间断空格)

  11. 11

    Apache Olingo Java库是否支持OData V3?

  12. 12

    Apache POI样式已应用于所有单元

  13. 13

    styles.xml(res \ values \ styles.xml)和styles.xml(res \ values-v21 \ styles.xml)之间的区别?

  14. 14

    通过VBA在受密码保护的网络共享计算机上打开并保存文件

  15. 15

    使用Apache POI的PatternSyntaxException

  16. 16

    如何永久保存受密码保护的SSH密钥?

  17. 17

    使用PHP检查Zip文件是否已加密或受密码保护

  18. 18

    如何永久保存受密码保护的SSH密钥?

  19. 19

    apache poi错误zip文件已关闭

  20. 20

    如何在Python 3中打开受密码保护的zip文件

  21. 21

    OpenShift V3:了解Docker的过程

  22. 22

    Apache Olingo Java库是否支持OData V3?

  23. 23

    styles.xml(res \ values \ styles.xml)和styles.xml(res \ values-v21 \ styles.xml)之间的区别?

  24. 24

    宏以保存受密码保护的文件

  25. 25

    如何在特定半径内使用Google Maps API v3查找和显示所有POI?

  26. 26

    Amazon Web Service(AWS)S3,如何上传受密码保护的文件夹?

  27. 27

    使用 Apache POI 打开 .docx 并使用密码保存

  28. 28

    如何解决java.lang.NoClassDefFoundError: org/apache/poi/xssf/usermodel/XSSFWorkbook

  29. 29

    Apache POI Zip 文件已关闭

热门标签

归档