java - Apache POI : Open Template, 写入,另存为。崩溃并创建损坏的文件

标签 java excel apache apache-poi

我一直在编写一个在名册上写名字的程序,并编写了大部分查找和排序的方法。 此方法的目标是打开现有文件,在单元格中写入,然后另存为不同的文件。 我认为问题可能出在模板文件上,因为它由 2 张纸组成。一张纸用于收集所有姓名,第二张纸有一张图像,其中的文本框链接到第一页以打印到文本框上

public static void FindTemplate(String Session) throws FileNotFoundException, IOException
{
    if(Session.toLowerCase().contains("Level 1".toLowerCase())) 
         // generic roster as an else
    {

        FileInputStream In = new FileInputStream("Directory\\Templates\\A Template.xls");
        HSSFWorkbook wb = new HSSFWorkbook(In);
        HSSFSheet sheet = wb.getSheetAt(0);
        Cell cell = null; 
        cell = sheet.getRow(0).getCell(0);


        cell.setCellValue("Found it");//just as a test for now
        In.close();


        wb.write(new FileOutputStream("WA1.xls"));
        wb.close();


    }
}

当我运行它时,我收到一个我不明白的大错误。错误位于 wb.write(new FileOutputStream("WA1.xls"));我以前用其他方法保存过这样的文件。还创建了一个新文件,但它已损坏。

Error:
 WAException in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections4/bidimap/TreeBidiMap
at org.apache.poi.hpsf.Section.<init>(Section.java:178)
at org.apache.poi.hpsf.MutableSection.<init>(MutableSection.java:41)
at org.apache.poi.hpsf.PropertySet.init(PropertySet.java:494)
at org.apache.poi.hpsf.PropertySet.<init>(PropertySet.java:196)
at org.apache.poi.hpsf.MutablePropertySet.<init>(MutablePropertySet.java:44)
at org.apache.poi.hpsf.SpecialPropertySet.<init>(SpecialPropertySet.java:47)
at org.apache.poi.hpsf.DocumentSummaryInformation.<init>(DocumentSummaryInformation.java:99)
at org.apache.poi.hpsf.PropertySetFactory.create(PropertySetFactory.java:116)
at org.apache.poi.POIDocument.getPropertySet(POIDocument.java:236)
at org.apache.poi.POIDocument.getPropertySet(POIDocument.java:197)
at org.apache.poi.POIDocument.readPropertySet(POIDocument.java:175)
at org.apache.poi.POIDocument.readProperties(POIDocument.java:158)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.updateEncryptionInfo(HSSFWorkbook.java:2295)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.getBytes(HSSFWorkbook.java:1506)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1428)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1414)
at rosterWrite.FindTemplate(rosterWrite.java:79)
at rosterWrite.main(rosterWrite.java:24)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections4.bidimap.TreeBidiMap
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 18 more

最佳答案

错误消息是Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections4.bidimap.TreeBidiMap,这意味着您的项目缺少TreeBidiMap > Apache commons-collections 库的类。如果您使用 Maven,只需将 commons-collection 库添加到您的 pom.xml 中,如 this page显示。如果没有,您需要从official site下载该库并将其放入您的项目中。

关于java - Apache POI : Open Template, 写入,另存为。崩溃并创建损坏的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47686549/

相关文章:

java - 使用先前由 maven 构建的依赖项在 IntelliJ 中构建单个类

java - 以编程方式水平滚动 SWT 表

vba - 另存为按钮,无需确认

php - 基于 Debian 的系统 session 在特殊 cron 中的 30 分钟被杀死,如何覆盖?

java - 使用 apache 命令行运行带有空格参数值的命令

apache - 从 301 重定向中删除查询字符串

java - 已经在 netbeans 中导入了 jar 文件,但我的源找不到该库

java - 从数据库创建 Spring Bean

excel - 如何使用 VBA Vlookup 填充单元格

excel - 如何将 VBScript 宏导入 Excel 工作簿?