私は2枚、ワークブックを作成するためのコードのExcel XLSファイルを生成するために、POI-3.17を使用し、1枚目は、次のようになります。奇妙な行動:org.apache.commons.collections4.bidimap.TreeBidiMap
Sheet sheet;
Workbook wb;
String excelFileName = "myExcelFile.xls";
String sheet1Name = "sheet1";
// read the excel workbook via input stream if it exists already
// otherwise create a new workbook
try {
if (new File(excelFileName).exists())
wb = new HSSFWorkbook(new FileInputStream(excelFileName));
else
wb = new HSSFWorkbook();
} catch (IOException e) {
wb = new HSSFWorkbook();
}
// try to remove the sheet1 if it existed already
try {
wb.removeSheetAt(wb.getSheetIndex(sheet1Name));
sheet = wb.createSheet(sheet1Name);
} catch (Exception e) {
sheet = wb.createSheet(sheet1Name);
}
// do something here to add contents to the sheets
// Write the output to a file
FileOutputStream fileOut;
try {
fileOut = new FileOutputStream(excelFileName);
wb.write(fileOut);
fileOut.close();
} catch (Exception e) {
e.printStackTrace();
}
私の意図は: "sheet1"は、 "sheet2"(コードはここには表示されていません)が削除されないうちに、プログラムが実行されるときに削除できます。
Excelファイルが存在しない場合、私のプログラムを実行することができます.2枚のExcelファイルが正しく生成されます。 Excelファイルがすでに生成されていても、問題なくプログラムを実行できます(この場合、 "sheet2"はExcelファイルの最初のシート、次に "sheet1"になります)。
問題は、私はExcelファイルを開いて、「シート1」にいくつかの変更を行うとき、にClassNotFoundExceptionsと全くエクセルの内部には、コンテンツが存在します次のとおりです。
Exception 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 excel.WriteToExcel.<init>(WriteToExcel.java:70)
at main.IndexGenerateFE.main(IndexGenerateFE.java:11)
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
だから私はコモンズ-collections4-」libが追加しましたビルドパスで4.1.jar "を指定すると、" sheet1 "の内容が変更されてもExcelファイルが正しく再生成されます。理由は何ですか?私は、 "sheet1"が変更されているかどうかにかかわらず、プログラムが実行されたときに既に削除しています。