前段时间客户要求添加一个导出为Excel文件的功能,在网上找了一下,采用JS实现的方法大多都是需要启用ActiveX的,这需要降低浏览器的安全级别,很多时候都不可用,然后开始考虑使用服务器端文件流输出的形式,大多数的类似方法的原理只是将HTML的文件存成xls的格式,不是标准的Excel文件格式,没有表格线,导出的Excel文件都比较难看。
这里的这种方法在文件的前后加上了Excel文件的头尾信息,个人感觉效果不错,贴出来分享一下,直接上代码: <%
response.setCharacterEncoding("gb2312");
String type = request.getParameter("type");
//如果传来的type值为123,那么就导出到excel表中,如果不是就将表格显示到JSP页面
if(type.equals("123")){
response.setContentType("application/vnd.ms-excel");
}else{
response.setContentType("text/html");
}
response.setHeader("Content-disposition","inline; filename=test.xls");
out.clear();
%>
<%=AddExcelHead()%>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>序号</td>
<td>标题1</td>
<td>标题2</td>
<td>标题3</td>
<td>标题4</td>
<td>标题5</td>
<td>标题6</td>
<td>标题7</td>
</tr>
<%
for(int i=0; i<10; i++){
%>
<tr>
<td><%=i%>.</td>
<td><%=i+100%></td>
<td><%=i+101%></td>
<td><%=i+102%></td>
<td><%=i+103%></td>
<td><%=i+104%></td>
<td> <%=i+105%></td>
<td><%=i+106%></td>
</tr>
<%}//end For
%>
</table>
<%=AddExcelbottom()%>
<%!
private static String AddExcelHead(){
StringBuffer sb = new StringBuffer();
sb.append("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");
sb.append(" <head>");
sb.append(" <!--[if gte mso 9]><xml>");
sb.append("<x:ExcelWorkbook>");
sb.append("<x:ExcelWorksheets>");
sb.append("<x:ExcelWorksheet>");
sb.append("<x:Name></x:Name>");
sb.append("<x:WorksheetOptions>");
sb.append("<x:Print>");
sb.append("<x:ValidPrinterInfo />");
sb.append(" </x:Print>");
sb.append("</x:WorksheetOptions>");
sb.append("</x:ExcelWorksheet>");
sb.append("</x:ExcelWorksheets>");
sb.append("</x:ExcelWorkbook>");
sb.append("</xml>");
sb.append("<![endif]-->");
sb.append(" </head>");
sb.append("<body>");
return sb.toString();
}
private static String AddExcelbottom(){
StringBuffer sb = new StringBuffer();
sb.append("</body>");
sb.append("</html>");
return sb.toString();
}
%>