public static void main(String[] args) {
try {
FileInputStream file = new FileInputStream(new File("D://New Microsoft Excel Worksheet.xlsx"));
XSSFWorkbook wb = new XSSFWorkbook(file);
XSSFSheet sheet = wb.createSheet("newsheet5");
CTWorksheet ctSheet = sheet.getCTWorksheet();
CTCustomProperties props = ctSheet.addNewCustomProperties();
props.addNewCustomPr().setId("APACHE POI");
props.addNewCustomPr().setName("Tender no = 48");
props.addNewCustomPr().setId("APACHE POI 2");
props.addNewCustomPr().setName("tender no = 58");
ctSheet.setCustomProperties(props);
FileOutputStream out = new FileOutputStream("D://New Microsoft Excel Worksheet.xlsx");
wb.write(out);
out.close();
wb.close();
} catch (Exception e) {
e.printStackTrace();
}
}
在工作表级别写入自定义属性后,xlsx文件已损坏。
我收到一条错误消息:“excel无法打开文件,因为文件格式或文件扩展名无效。”。请验证文件是否已损坏,并且在尝试打开excel文件时,文件扩展名是否与文件的格式匹配。
2条答案
按热度按时间polhcujo1#
图纸自定义特性只能使用
VBA
. 它们存储在Excel
但值在二进制文档部分中customProperty1.bin
,customProperty2.bin
, ... 这没什么什么什么apache poi
提供到目前为止的访问权限。使用
XSSF
需要创建二进制文档部分,然后获取该二进制文档部分的关系id。然后设置CTCustomProperties
-CTCustomProperty
. 在那里,id指向包含值的二进制文档部分,而名称是属性名。下面的完整示例显示了这一点。它是测试和工作使用电流
apache poi 4.1.2
. 它需要ooxml-schemas-1.4.jar
在类路径中,因为默认poi-ooxml-schemas-4.1.2.jar
不包含所有需要的低电平CT*
-班级。y1aodyip2#
我一直在努力解决同一个问题,并找到了一种方法,使它工作,但它远远不是最佳的。不管怎么说,这就是它,希望你或其他人能想出一个更好的方法。
注意,ctworksheet来自poi-ooxml-schemas-xx.jar,customproperties来自ooxml-schemas-yy.jar,因此两者都必须位于类路径上。如果您使用的是模块(就像我一样),这会带来很大的问题!祝你好运