最初に write() を呼び出さずに close() を呼び出すと、完全に空のファイルが生成されます。
ワークブックへのシートとセルの追加が完了したら、ワークブックで write() を呼び出し、ファイルを閉じます。この最後の手順により、Excel で読み取ることができる出力ファイル (この場合は output.xls) が生成されます。追加する必要があるこの優れたチュートリアルの功績は次のとおりです。
copy.write();
copy.close();
cellFeatures はループ内で再インスタンス化する必要があります
私のテストによると、このコードは正常に動作します:
WritableCellFeatures cellFeatures = null;
Label checkLabel = null;
for (int x = 0; x < xlData.size(); x++) {
for (int i = 0; i <= 14; i++) {
System.out.println("X:" + x + "I:" + i);
if (i > 9) {
checkLabel = new Label(i, x + xlHeader.size(), (String) arrList.get(0));
cellFeatures = new WritableCellFeatures();
cellFeatures.setDataValidationList(arrList);
checkLabel.setCellFeatures(cellFeatures);
writableSheet.addCell(checkLabel);
}
}
}
// All cells modified/added. Now write out the workbook
workbook.write();
workbook.close();
空白のバージョンでも機能しますが、この場合、セルには初期値がありません
私のテストによると、このコードも正常に動作します:
WritableCellFeatures cellFeatures = null;
Blank b = null;
for (int x = 0; x < xlData.size(); x++) {
for (int i = 0; i <= 14; i++) {
System.out.println("X:" + x + "I:" + i);
if (i > 9) {
b = new Blank(i, x + xlHeader.size());
cellFeatures = new WritableCellFeatures();
cellFeatures.setDataValidationList(arrList);
b.setCellFeatures(cellFeatures);
writableSheet.addCell(b);
}
}
}
// All cells modified/added. Now write out the workbook
workbook.write();
workbook.close();
生成されたファイルを Excel 2010 または Excel 2013 で開いた場合、コンボを表示するには名前を.xls
付けて保存する必要がある場合があります。.xlsx
Excel2010/2013 で .xls を開くと、実際にはセルにデータ検証リストが含まれていて、検証制約が機能していても、データ検証の矢印が表示されないことがありました。矢印とコンボボックスを表示したい場合は、新しい形式で保存する必要があります。
さらに、この欠点は、JXL ではなく、最新の Excel バージョンが原因であると思われます。これは、OpenOffice.org Cal 3.4.1 で .xls を開いても問題がなく、コンボが正しく機能するという事実によって実証されています。これは、テストに使用する 現在のバージョンjxl 2.6.12 2009-10-26 Excel 2000 形式でスプレッドシートを生成するという事実に関連している可能性があります。
この回答用に開発された Java コードは、それを改善したり、フォークして遊んだりしたい人なら誰でも利用できます。