Как следует из названия, мне нужно поместить некоторые данные (которые я получил из базы данных) в таблицу Excel, а затем отправить их на сторону клиента, чтобы пользователь мог сохранить, открыть или отменить действие.
Я видел несколько статей по этому поводу, самая близкая из них: Как я могу заставить пользователя загрузить мой файл? (Java, MVC, Excel, POI) . Ссылаясь на ссылки, предоставленные Стивенсом, я опробовал следующий код:
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;
}
Здесь, во-первых, WorkbookFactory
не определено. Во-вторых, я не мог правильно понять, как работает код.
Я также нашел эту ссылку: 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. Но здесь файл Excel сохраняется на сервере. Я хочу, чтобы файл не сохранялся на стороне сервера, он должен идти непосредственно на стороне клиента
(если это помогает) Я использую: Struts 2 Framework, Hibernate
Я открыт для использования других вещей, таких как POI API, jQuery или любых других полезных вещей.
Почему-то не могу использовать displayTag
.
Javascript будет моим последним средством (хотя я и реализовал его), потому что он требует изменения некоторых настроек безопасности браузера по умолчанию (если этого можно избежать, я также открыт для javascript).
Посоветуйте, пожалуйста, как мне поступить сейчас.
Спасибо !!
РЕДАКТИРОВАТЬ:
<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>
Ошибка при выполнении действия:
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