- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想为使用 poi 3.14 创建的 xlsx 文件添加密码保护。文档声称,这是可能的:
http://poi.apache.org/encryption.html
使用我这样尝试的示例:
public static void main(String[] args)
{
try(Workbook wb = new XSSFWorkbook())
{
//<...>
try(ByteArrayOutputStream baos = new ByteArrayOutputStream())
{
wb.write(baos);
byte[] res = baos.toByteArray();
try(ByteArrayInputStream bais = new ByteArrayInputStream(res))
{
try(POIFSFileSystem fileSystem = new POIFSFileSystem(bais);) // Exception happens here
{
EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile);
Encryptor enc = info.getEncryptor();
enc.confirmPassword("pass");
OutputStream encryptedDS = enc.getDataStream(fileSystem);
OPCPackage opc = OPCPackage.open(new File("example.xlsx"), PackageAccess.READ_WRITE);
opc.save(encryptedDS);
opc.close();
}
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
不幸的是,示例中的代码与 XLSX 文件不兼容,因此我收到以下异常:
The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)
有人可以帮忙吗?我找不到 XLSX 的正确替代品...
谢谢大家的帮助。这是我的工作结果:
public static void main(String[] args)
{
try(Workbook wb = new XSSFWorkbook())
{
Sheet sheet = wb.createSheet();
Row r = sheet.createRow(0);
Cell cell = r.createCell(0);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("Test");
try(POIFSFileSystem fileSystem = new POIFSFileSystem();)
{
EncryptionInfo info = new EncryptionInfo(EncryptionMode.standard);
Encryptor enc = info.getEncryptor();
enc.confirmPassword("pass");
OutputStream encryptedDS = enc.getDataStream(fileSystem);
wb.write(encryptedDS);
FileOutputStream fos = new FileOutputStream("C:/example.xlsx");
fileSystem.writeFilesystem(fos);
fos.close();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
最佳答案
您误读了 documentation on encrypting in OOXML file .因此,当您只需要保存文件时,您会错误地尝试使用错误的代码加载文件
没有任何错误处理,你的代码基本上就是
// Prepare
POIFSFileSystem fs = new POIFSFileSystem();
EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile, CipherAlgorithm.aes192, HashAlgorithm.sha384, -1, -1, null);
Encryptor enc = info.getEncryptor();
enc.confirmPassword("foobaa");
// Create the normal workbook
Workbook wb = new XSSFWorkbook();
Sheet s = wb.createSheet();
// TODO Populate
// Encrypt
OutputStream os = enc.getDataStream(fs);
wb.save(os);
opc.close();
// Save
FileOutputStream fos = new FileOutputStream("protected.xlsx");
fs.writeFilesystem(fos);
fos.close();
关于java - 在 XSSF 工作簿上设置密码保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40511701/
private void cleaner(Integer columnsCount, Integer rowsCount, Object object){ int firstColumn=0;
我收到以下代码的NullPointerException。有人可以帮忙解决这个问题吗?我正在尝试将数据库值获取到现有的 Excel 工作表。 Statement statement = connect
我正在尝试编写一个函数,该函数读取 Excel 模板并开始在某个行索引处写入。但是,我发现编号会跳过模板中的空白行。有没有办法在迭代期间计算空白行? 我试图找到相当于 missing cell pol
我尝试使用 apache poi xssf 将 excel 文件解析为 XML。现在有了一个单元格,但不知道里面有什么,我只想从中获取一个字符串。但是当我使用 cell.getStringCellVa
我正在尝试读取由网络应用程序生成的 Excel 文件。但我无法访问任何列或行,因为 XSSF 工具一直告诉我没有工作表。单个工作表称为“MySheet”,但当我按名称搜索它时,得到 -1。当我搜索工作
这是我到目前为止的代码,它从查询中获取数据,然后将其导出到 Excel 文档中: oArray = CreateObject("java", "java.util.Arrays"); wor
我现在已经尝试从 XSSFSheet 中删除图像太久了。我找不到关于此的任何信息,但我认为这是可能的.. 有什么方法可以从我的 XSSFSheet 中删除图像吗?甚至官方(?)apache poi 网
我在保存新的 Excel 文件时遇到问题。我希望它在保存时公式会自行计算,但目前它只是在 excel 文件中返回一个字符串。公式是正确的。我不知道如何让 FormulaEvaluator 工作。 这里
我有一个 HSSF 工作簿,其中包含我的自定义颜色,但现在我需要使用 XSSF 来创建 xslx 文件。 我已经相应地改变了一切,但唯一让我难过的是如何在这样的事情中使用定制的 XSSFColor :
我想为使用 poi 3.14 创建的 xlsx 文件添加密码保护。文档声称,这是可能的: http://poi.apache.org/encryption.html 使用我这样尝试的示例: p
我正在使用 Apache POI 3.12: org.apache.poi poi 3.12 org.apache.poi poi-ooxml 3
我目前正在使用 Apache POI 库在 Java 中生成 excel 文件。 这就是我想知道的:在 Excel 中,可以创建新的单元格样式并将其添加到工作簿中。这些样式是可重复使用的,并且可以从样
几年前,我遇到了使用 jXLS 和 POI XSSF 创建大型 excel 文件的问题。如果我没记错的话,我认为 XSSF 会在磁盘上创建类似 1GB+ 的临时文件来创建 10mb 的 excel 文
有没有办法确定单元格是否为日期?我知道 style.get DataFormatString() 但这对我没有帮助,因为我无法确定格式是否适用于日期。 最佳答案 如果您使用的是 XSSF 用户模型,那
我使用下面的代码在 XSSF 工作表中设置默认列样式?但这不起作用任何人都可以建议错误修复。 format = workbook.createDataFormat(); style = workboo
如何将现有列数据和格式复制到 Apache POI 中的下一列并将下一列向右移动。 我试过了。假设我的代码是这样的...... XSSFCell oldCell = worksheet.getRow(
无法将“STYLE”从 .xlsx 文件复制到另一个文件。 这是我正在使用的代码。 public static void copyCell(XSSFCell oldCell, XSSFCell ne
单元格 A1 具有 公式“=A2”并被格式化为显示 1 个小数点 单元格 A2 具有 值 4.23 单元格 A1 显示 4.2(格式化显示值) 单元格 A2 显示 4.23(格式化显示值) 我的 XS
有没有办法不读取整个 Excel 文档行,我正在读取文档中定义的单元格,但是,它拉入了整个工作表的列??? 我正在将 Excel 文档转换为 CSV 文档。我得到了这个结果。 Aircraft ID
我已经使用 XLS,但今天我正在尝试新的 - xlsx。对于 XLS,我只需要一个库,而 XLSX(四个库)则相反。我还得到整个包错误。为什么会发生这种情况? 主要: public class
我是一名优秀的程序员,十分优秀!