我想把jsp文件的输出保存到excel中。我已经尝试了以下代码:
<html>
<head>
<meta http-equiv="pragma" content="no-cache; charset=ISO-8859-1">
<title>Save File</title>
</head>
<body>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFSheet"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFCell"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFRow"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFCellStyle"%>
<%@ page import="org.apache.poi.hssf.util.HSSFColor"%>
<%@ page import="java.io.* " %>
<%@page import="java.sql.* "%>
<%
// String EX_DT=null;
String filenm=request.getParameter("filenm");
File file=new File("c:\\"+filenm+".xls");
boolean exists = file.exists();
if (exists)
{
out.println("File or Directory exist.PLZ enter another filename");
}
else
{
String s1=null;
try
{
// EX_DT=(String)session.getAttribute( "dte" );
// out.println("Ex_Dt in try"+EX_DT);
HSSFWorkbook hwb=new HSSFWorkbook();
HSSFSheet sheet = hwb.createSheet("new sheet");
HSSFSheet sheet1 = hwb.createSheet("new sheet1");
HSSFRow rowhead= sheet.createRow((short)0);
//rowhead.createCell((short) 0).setCellValue("MKT");
rowhead.createCell((short) 0).setCellValue("SECURITY");
rowhead.createCell((short) 1).setCellValue("PREV_CL_PR");
rowhead.createCell((short) 2).setCellValue("CLOSE_PRIC");
rowhead.createCell((short) 3).setCellValue("NET_TRDQTY");
rowhead.createCell((short) 4).setCellValue("NET_TRDVAL");
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String url = "jdbc:sqlserver://";
Connection con = DriverManager.getConnection(url,"sa","SQL1423#3");
Statement st=con.createStatement();
ResultSet rs=st.executeQuery("Select * from TtOne ");
int i=1;
while(rs.next())
{
HSSFRow row= sheet.createRow((short)i);
//s1=rs.getString("EX_DT");
// out.println("s1"+s1);
// if(s1.equals((String)session.getAttribute( "dte" )))
//{
// out.println("EX_DT in if of while");
row.createCell((short) 0).setCellValue(rs.getString("SECURITY"));
row.createCell((short) 1).setCellValue(rs.getString("PREV_CL_PR"));
row.createCell((short) 2).setCellValue(rs.getString("CLOSE_PRIC"));
row.createCell((short) 3).setCellValue(rs.getString("NET_TRDQTY"));
row.createCell((short) 4).setCellValue(rs.getString("NET_TRDVAL"));
i++;
// }
}
FileOutputStream fileOut = new FileOutputStream(file);//file
hwb.write(fileOut);
fileOut.close();
%><h1><b><i><% out.println("Your excel file has been generated!");%>
</i></b></h1>
<%
}
catch ( Exception ex )
{
System.out.println(ex);
}
}
%>
</body>
</html>但我希望用户指定路径,而不是硬编码的路径。文件应保存在该位置。所以我想要一个对话框,在那里浏览选项是可用的,在选择路径并单击保存后,输出应该存储在excel文件中。
发布于 2012-04-26 22:16:58
假设您打算让用户下载此文件,则不应将该文件存储在let服务器的本地磁盘文件系统中。相反,您应该将此文件发送到HTTP响应。
首先需要将JSP转换为servlet,否则excel文件将被JSP自己的HTML和模板内容损坏,因为JSP本身就是HTTP响应的一部分。
把所有的Java (没有HTML!没有out.println()语句!)servlet的doGet()或doPost()方法中的代码,具体取决于请求类型。然后,您需要做的就是替换原始Java代码中的以下单行代码
hwb.write(fileOut);通过以下几行
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename=\"" + filenm + "\"");
hwb.write(response.getOutputStream());第一个文件告诉浏览器它是什么类型的文件,以便在必要时可以将默认应用程序(MS Excel)与其关联。第二个命令告诉浏览器应该弹出一个“另存为”对话框。第三个通知POI应该将Excel文件写入HTTP响应。
别忘了删除new File()的废话。它只会将文件保存在运行the服务器的机器上。您需要认识到,在实际生产环境中,You服务器运行在与You浏览器不同的物理计算机上。
不相干的是,JDBC代码正在泄漏资源。您忘记了在try块的finally中close() Connection、Statement和ResultSet。这将导致数据库在长期内耗尽它们。也要相应地修复它。
https://stackoverflow.com/questions/10332942
复制相似问题