2017-08-29 78 views
0

我需要在JAVA的同一个excel工作簿中编写3张不同的工作表。我需要把这个任务分成3个不同的类,每个类应该在同一个文件中写一个excel表。现在每次在课程结束时,我都需要将数据刷新到特定表格。类似的,创建FileInputStream的bean

inputStream =new FileInputStream("FileName.xls"); 
wb_template = new XSSFWorkbook(inputStream); 
inputStream.close(); 
wb = new SXSSFWorkbook(wb_template); 

//Logic here 

FileOutputStream out = new FileOutputStream("FileName.xls"); 
workbook.write(out); 
    wb.dispose(); 
    out.close(); 

并重复在另一个类的另一个类中打开和关闭的公用部分。

现在,因为我的课上注有@Component注释,所以我无法创建FileOutputStream,在我的课程中新建了FileOutputStream作为上面的示例代码。 所以我需要为他们创建bean。所以现在我的疑问是,我需要为每种类型创建多少个bean。即FileInputStreamSXSSFWorkbookFileOutputStream?因为我需要在每节课结束时处理工作簿,每节课结束时需要关闭FileOutputStream,单豆是否足够?

我是这个领域的新手。任何领导将不胜感激。

+1

什么让你觉得你不能在课堂上创造东西?你使用Spring(或者任何一个DI框架)的事实并不意味着你必须将它用于一切。它仍然只是java ... –

+0

你不需要一切都需要一个bean。当你只有一把锤子时,一切看起来都像钉子。只要打开并关闭任何方法使用它的'FileInputStream'即可。 – EJP

+0

@EJP,我做了同样的事情,但是bean创建失败,出现类似找不到的类的错误;嵌套的异常是java.lang.NoClassDefFoundError:org/apache/poi/xssf/streaming/SXSSFWorkbook – tv1902

回答

0

我不认为输入和输出流是Spring beans的良好候选者。
得更好,更直观的候选人是你的Excel工作表的作家:初始化后

interface ExcelSheetWriter { 
    void writeOneSheet(String excelFileName); 
} 

@Configuration 
class Config { 
    @Bean(name="sheet1Writer) ExcelWriter getSheet1Writer() { 
     return new Sheet1Writer(); //implements ExcelWriter 
    } 
} 

class ExcelDocumentWriter { 
    @Autowired @Qualifier("sheet1Writer") ExcelWriter sheet1Writer; 
    @Autowired @Qualifier("sheet2Writer") ExcelWriter sheet2Writer; 
    @Autowired @Qualifier("sheet3Writer") ExcelWriter sheet3Writer; 
    //... use them to write the entire document 
} 

好春豆不改变状态。

+0

感谢您提出不同的观点,但我的问题是在一个点上,我需要创建FileInputStream,FileOutputStream和SXSSFWorkbook的对象,这就是我失败的地方。 – tv1902

+0

在bean代码中执行,即在ExcelSheetWriter的实现中。不要尝试创建FileInputStream类型的bean,因为它们会造成糟糕的Spring bean – Alexander

+0

了解这些概念。谢谢:) – tv1902