Проблема XSSFWorkbook - при создании новых файлов - PullRequest
1 голос
/ 29 августа 2011

У меня проблема с XSSFWorkbook apis при создании новых файлов xlsx.

Сценарий: у меня есть пункт меню «Новый файл» в меню моего графического интерфейса, который создает новый файл xlsx из потока.В первый раз, когда я нажимаю на пункт меню «Новый файл», появляется диалоговое окно «Новый файл», и я даю имя нового файла xlsx, и создается новый файл.Но когда я нажимаю на этот пункт меню «Новый файл» во второй раз, то новый xlsx не создается.

//Code snippet

File newOpenXLSFile;
public XSSFWorkbook newPtrIrWorkBook;

newPtrIrStream = this.getClass().getResourceAsStream ("/org/ama/defect/prevention/templates/MainTemplate.xlsx");


private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    // TODO add your handling code here:
    logger.debug("You choose to create new PTR/IR file");
    int returnVal = jFileChooser4.showDialog(this, "New PTR/IR Data File");

    if (returnVal == JFileChooser.APPROVE_OPTION) {

        newOpenXLSFile = jFileChooser4.getSelectedFile();
        logger.debug("file path " + newOpenXLSFile);
        try {
             logger.debug("For second time, I am stopped here:");
             //newPtrIrWorkBook = new HSSFWorkbook(newPtrIrPFS, true); //copying extract into Excel file       
            newPtrIrWorkBook = new XSSFWorkbook(newPtrIrStream);
            logger.debug("New File..." + newOpenXLSFile.getPath());
            FileOutputStream out = new FileOutputStream(newOpenXLSFile);
            newPtrIrWorkBook.write(out);
            out.close();
        } catch (Exception e) {
            e.getMessage();
        }
    } else {
        logger.debug("New file dialogue cancelled by user.");
    }

}

Во второй раз, я думаю, он блокируется здесь в коде:*

Журналы отладки:

2011-08-18 13:04:37,602 [AWT-EventQueue-0] DEBUG org.ama.defect.prevention.tool.gui.GUI.class - You choose to create new PTR/IR file
2011-08-18 13:04:45,586 [AWT-EventQueue-0] DEBUG org.ama.defect.prevention.tool.gui.GUI.class - file path C:\Documents and Settings\rmehta\Desktop\Try\FirstFile.xlsx
2011-08-18 13:04:45,586 [AWT-EventQueue-0] DEBUG org.ama.defect.prevention.tool.gui.GUI.class - For second time, I am stopped here:
2011-08-18 13:04:46,351 [AWT-EventQueue-0] DEBUG org.ama.defect.prevention.tool.gui.GUI.class - New File...C:\Documents and Settings\rmehta\Desktop\Try\FirstFile.xlsx

2011-08-18 13:04:52,898 [AWT-EventQueue-0] DEBUG org.ama.defect.prevention.tool.gui.GUI.class - You choose to create new PTR/IR file
2011-08-18 13:04:57,116 [AWT-EventQueue-0] DEBUG org.ama.defect.prevention.tool.gui.GUI.class - file path C:\Documents and Settings\rmehta\Desktop\Try\SecondFile.xlsx
2011-08-18 13:04:57,116 [AWT-EventQueue-0] DEBUG org.ama.defect.prevention.tool.gui.GUI.class - For second time, I am stopped here:

Не могли бы вы помочь мне решить эту проблему?Однако с HSSFWorkbook (для файла xls) все было в порядке.

Большое спасибо,

rahul

1 Ответ

1 голос
/ 30 августа 2011

Проблема была обнаружена с помощью отладчика:

java.io.IOException: Stream closed

Кажется, проблема в том, что поток может быть прочитан только один раз, вторая попытка чтения приведет к этому IOException.

чтобы исправить эту проблему, я поставил

newPtrIrStream = this.getClass()
  .getResourceAsStream("/org/ama/defect/prevention/templates/MainTemplate.xlsx");

внутри jMenuItem1ActionPerformed и проблема устранена.

...