As the title suggest, I need to put some data (which I have got from database) into an excel sheet, and then send it to client side so that user can save , open or cancel the action.
I have seen some articles regarding this, the closest one being : How can I get the user to download my file? (Java, MVC, Excel, POI). Referring to links provided by Stevens I tried out the following code :
public String execute(){
setContentDisposition("attachment; filename=\"" + ename + "\"");
try{
ServletContext servletContext = ServletActionContext.getServletContext();
String filePath = servletContext.getRealPath("/WEB-INF/template/excel/mytemplate.xls");
File file = new File(filePath);
Workbook wb = WorkbookFactory.create(new FileInputStream(file));
Sheet sheet = wb.getSheetAt(0);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
wb.write(baos);
InputStream excelStream;
excelStream = new ByteArrayInputStream(baos.toByteArray());
}catch(Exception e){
System.out.println(e.getMessage());
}
return SUCCESS;
}
Here firstly WorkbookFactory
is not defined. Secondly, I could not understand properly how the code is working.
I also found this link : http://www.roseindia.net/answers/viewqa/Java-Beginners/14930-How-to-export-data-from-database-to-excel-sheet-by-using-java--in-standalone-project.html. But here the excel file gets saved on the server. I want that the file should not be saved on the server side, it should directly go to client side
(If it helps) I am using : struts 2 framework, hibernate
I am open to using other things like POI API, jQuery or any other good stuff.
I can not use displayTag
for some reason.
Javascript would be my last resort (although I have implemented with it) because it requires changing some default security settings of the browser (If this can be avoided I am open to javascript as well).
Please advise how should I go about this now.
Thanks!!
EDIT :
<result-types>
<result-type name="jsp" class="org.apache.struts2.views.jsp"/>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
</result-types>
<action name="myActionName" class="package.myActionClass">
<result type="stream">
<param name="contentType">"application/vnd.ms-excel"</param>
<param name="inputName">excelStream</param>
<param name="contentDisposition">contentDisposition</param>
<param name="bufferSize">1024</param>
</result>
</action>
The error while executing action:
java.lang.reflect.InvocationTargetException
java.lang.IncompatibleClassChangeError: Class org.apache.poi.hssf.usermodel.HSSFWorkbook does not implement the requested interface org.apache.poi.ss.usermodel.Workbook