JAVA: Exportando dados (do banco de dados) para o Excel e enviando-os para o lado do cliente
omo o título sugere, preciso colocar alguns dados (que obtive do banco de dados) em uma planilha do Excel e enviá-los ao lado do cliente para que o usuário possa salvar, abrir ou cancelar a açã
Vi alguns artigos sobre isso, sendo o mais próximo:Como posso fazer o usuário baixar meu arquivo? (Java, MVC, Excel, POI). Referindo-me aos links fornecidos por Stevens, experimentei o seguinte código:
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;
}
Aqui em primeiro lugarWorkbookFactory
não está definido. Em segundo lugar, não consegui entender corretamente como o código está funcionand
Eu também encontrei este 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. Mas aqui o arquivo do Excel é salvo no servidor. Quero que o arquivo não seja salvo no lado do servidor, ele deve ir diretamente para o lado do cliente
(Se ajudar) estou usando: estrutura struts 2, hibernar
Estou aberto a usar outras coisas, como POI API, jQuery ou qualquer outra coisa boa.
Não consigo usardisplayTag
por algum motivo
Javascript seria meu último recurso (embora eu tenha implementado com ele), pois requer a alteração de algumas configurações de segurança padrão do navegador (se isso puder ser evitado, também estou aberto a javascript
Por favor, informe como devo fazer isso agor
Obrigado!
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>
O erro ao executar a ação:
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