Excel シートの行を読み取り、その行の各セルの内容を配列リストに入力し、それをテキスト ファイルに書き込むスクリプトがあります。ファイルに画像を含めることができるように、(iText を使用して) PDF ファイルに書き込めるようにしたいと考えています。問題は、ドキュメントが閉じられており、ドキュメントに「要素を追加できません」というエラーが表示され続けることです。関連するコードは次のとおりです。
public File processFile(File excelWorkbook) throws FileNotFoundException, IOException, DocumentException{
System.out.println("Processing file...");
FileInputStream fileInputStream = new FileInputStream(excelWorkbook);
HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
HSSFSheet firstSheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = firstSheet.iterator();
System.out.println("Please choose output file name.");
String fName = this.chooseFileName();
try{
for(int cntr=1; cntr<=firstSheet.getPhysicalNumberOfRows(); cntr++){
ArrayList<String> values = new ArrayList<String>();
Row currentRow = firstSheet.getRow(cntr);
for(int cntr2 = 0; cntr2<currentRow.getLastCellNum(); cntr2++){
Cell currentCell = currentRow.getCell(cntr2, Row.RETURN_NULL_AND_BLANK);
if(currentCell==null){
//cell doesn't have anything in there
values.add("-not in excel file-");
continue;
}else{
switch(currentCell.getCellType()){
case Cell.CELL_TYPE_STRING:
values.add(currentCell.getStringCellValue());
break;
case Cell.CELL_TYPE_NUMERIC:
double num = currentCell.getNumericCellValue();
String numString = String.valueOf(num);
values.add(numString);
break;
}
}
}
//libF = writeArrayListToFile(values, fName);
writePDF(values, fName);//the method that writes to pdf
}
}catch (NullPointerException e){
System.out.println("Cell is null.");
//e.printStackTrace();
}
fileInputStream.close();
return libF;
}
writePDF(ArrayList al, String fName) メソッドは次のとおりです。
public void writePDF(ArrayList<String> al, String filepath) throws FileNotFoundException, DocumentException{
PdfWriter.getInstance(document, new FileOutputStream(filepath));
document.open();
document.add(new Paragraph("Library"));
for(String i: al){
document.add(new Phrase(i+"\n"));
}
document.close();
}
このファイルに連続して書き込めないのはなぜですか? テキスト ファイルに書き込むと、簡単に閉じて再度開くことができるので、Excel スプレッドシートからすべての情報をテキスト ファイルに取得できます。同じことがpdfファイルには当てはまらないようです。簡単に開閉できません。コードを変更する方法を教えてもらえますか? 私が望むのは、スクリプトが Excel シートの行を読み取り、セルの内容を配列リストに追加し、その直後に配列リストを pdf ドキュメントに追加することだけです。すべての行に対してこれを行う必要があります。これはテキストファイルでは機能しますが、pdf では機能しません。