之前书写过一个通过jsp方式来导出excel的案例,但是后面有同事反映jsp形式导出在手机端查看可能会有问题,所以此处尝试做了一个通过xml形式来导出excel的功能。

具体是否真的有影响暂时未做测试,此处只提供方式,有需要的请自行测试对比。

jsp导出excel功能案例:http://itnoteshare.com/note/57/publicNoteDetail.htm


通过xml形式导出excel原理:其实就是将excel模板宁存为xml文档,然后将此excel文件作为jsp文件,并指定相关数据对象和请求头的方式来实现导出excel。


具体代码如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<%@page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"
%><%@page import="java.util.List"
%><%@page import="org.apache.commons.beanutils.DynaBean"
%><%@page import="com.szboanda.platform.util.taglib.PowerExportTag"
%><%@page import="java.util.Date"
%><%@page import="java.text.SimpleDateFormat"
%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
%><%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"
%><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"
%><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"
%><%@ taglib uri="/WEB-INF/tld/szboanda.tld" prefix="nbean"
%><%
    String title = new SimpleDateFormat("yyyy年MM月dd日").format(new Date());
    String fileName=new String(title.getBytes("GBK"),"ISO8859-1");
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName +".xls\"");
    
    String var = request.getParameter(PowerExportTag.DATAINFO_SESSION_FLAG);
    String exportCondition = request.getParameter("EXPORT_CONDITION");
    List<DynaBean> datainfo = (List<DynaBean>) session.getAttribute(var);
    session.removeAttribute(var);
    request.setAttribute("datainfo", datainfo);
    request.setAttribute("selectColumn", exportCondition);
%>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Author>Administrator</Author>
  <LastAuthor>AutoBVT</LastAuthor>
  <Created>2016-07-27T03:32:57Z</Created>
  <Version>12.00</Version>
 </DocumentProperties>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>4905</WindowHeight>
  <WindowWidth>16155</WindowWidth>
  <WindowTopX>360</WindowTopX>
  <WindowTopY>30</WindowTopY>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Center"/>
   <Borders/>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s64">
   <Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
   </Borders>
  </Style>
  <Style ss:ID="s65">
   <Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
   </Borders>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
  </Style>
  <Style ss:ID="s67">
   <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
   </Borders>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
  </Style>
  <Style ss:ID="s71">
   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
   </Borders>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000" ss:Bold="1"/>
   <Interior ss:Color="#EFEBDE" ss:Pattern="Solid"/>
  </Style>
  <Style ss:ID="s72">
   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
   </Borders>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000" ss:Bold="1"/>
   <Interior ss:Color="#EFEBDE" ss:Pattern="Solid"/>
  </Style>
  <Style ss:ID="s73">
   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
   </Borders>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000" ss:Bold="1"/>
   <Interior ss:Color="#EFEBDE" ss:Pattern="Solid"/>
  </Style>
  <Style ss:ID="s74">
   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
   </Borders>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000" ss:Bold="1"/>
   <Interior ss:Color="#EFEBDE" ss:Pattern="Solid"/>
  </Style>
  <Style ss:ID="s75">
   <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
   </Borders>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
   <NumberFormat ss:Format="Short Date"/>
  </Style>
  <Style ss:ID="s76">
   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#7E7D68"/>
   </Borders>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000" ss:Bold="1"/>
   <Interior ss:Color="#EFEBDE" ss:Pattern="Solid"/>
  </Style>
  <Style ss:ID="s77">
   <Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
   </Borders>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
  </Style>
  <Style ss:ID="s78">
   <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
   </Borders>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
  </Style>
  <Style ss:ID="s79">
   <Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#000000"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"
     ss:Color="#C0C0C0"/>
   </Borders>
   <Font ss:FontName="宋体" x:CharSet="134" ss:Color="#000000"/>
   <NumberFormat ss:Format="Short Date"/>
  </Style>
 </Styles>
 <Worksheet ss:Name="20160727113230506">
  <Table ss:ExpandedColumnCount="10" ss:ExpandedRowCount="18" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
   <Column ss:AutoFitWidth="0" ss:Width="30"/>
   <c:if test="${fn:contains(selectColumn,'@XM@') }">
       <Column ss:AutoFitWidth="0" ss:Width="75"/>
   </c:if>
   <c:if test="${fn:contains(selectColumn,'@XZQH@') }">
          <Column ss:AutoFitWidth="0" ss:Width="115"/>
   </c:if>
   <c:if test="${fn:contains(selectColumn,'@MOBILE@') }">
           <Column ss:AutoFitWidth="0" ss:Width="75"/>
   </c:if>
   <c:if test="${fn:contains(selectColumn,'@AGE@') }">
           <Column ss:AutoFitWidth="0" ss:Width="40"/>
   </c:if>
   <c:if test="${fn:contains(selectColumn,'@BGDH@') }">
           <Column ss:AutoFitWidth="0" ss:Width="75"/>
   </c:if>
   <c:if test="${fn:contains(selectColumn,'@ZY@') }">
           <Column ss:AutoFitWidth="0" ss:Width="112.5"/>
   </c:if>
   <c:if test="${fn:contains(selectColumn,'@EMAIL@') }">
           <Column ss:AutoFitWidth="0" ss:Width="135"/>
   </c:if>
   <c:if test="${fn:contains(selectColumn,'@FAX@') }">
           <Column ss:AutoFitWidth="0" ss:Width="75"/>
   </c:if>
   <c:if test="${fn:contains(selectColumn,'@BIRTHDAY@') }">
           <Column ss:AutoFitWidth="0" ss:Width="100"/>
   </c:if>
    <Row ss:AutoFitHeight="0" ss:Height="30">
    <Cell ss:StyleID="s71"><Data ss:Type="String">序号</Data></Cell>
       <c:if test="${fn:contains(selectColumn,'@XM@') }">
        <Cell ss:StyleID="s72"><Data ss:Type="String">姓名</Data></Cell>
    </c:if>
    <c:if test="${fn:contains(selectColumn,'@XZQH@') }">
        <Cell ss:StyleID="s72"><Data ss:Type="String">行政区划</Data></Cell>
    </c:if>
    <c:if test="${fn:contains(selectColumn,'@MOBILE@') }">
        <Cell ss:StyleID="s72"><Data ss:Type="String">手机</Data></Cell>
    </c:if>
    <c:if test="${fn:contains(selectColumn,'@AGE@') }">
        <Cell ss:StyleID="s72"><Data ss:Type="String">年龄</Data></Cell>
    </c:if>
    <c:if test="${fn:contains(selectColumn,'@BGDH@') }">
        <Cell ss:StyleID="s72"><Data ss:Type="String">办公电话</Data></Cell>
       </c:if>
       <c:if test="${fn:contains(selectColumn,'@ZY@') }">
        <Cell ss:StyleID="s72"><Data ss:Type="String">专业</Data></Cell>
    </c:if>
    <c:if test="${fn:contains(selectColumn,'@EMAIL@') }">
        <Cell ss:StyleID="s72"><Data ss:Type="String">邮箱</Data></Cell>
    </c:if>
    <c:if test="${fn:contains(selectColumn,'@FAX@') }">
        <Cell ss:StyleID="s72"><Data ss:Type="String">传真</Data></Cell>
    </c:if>
    <c:if test="${fn:contains(selectColumn,'@BIRTHDAY@') }">
        <Cell ss:StyleID="s73"><Data ss:Type="String">出生日期</Data></Cell>
    </c:if>
   </Row>
   <c:forEach items="${requestScope.datainfo}" var="item" varStatus="stat"> 
        <Row ss:AutoFitHeight="0">
            <Cell ss:StyleID="s74"><Data ss:Type="String">${stat.index + 1}</Data></Cell>
            <c:if test="${fn:contains(selectColumn,'@XM@') }">
                <Cell ss:StyleID="s65"><Data ss:Type="String">${item.map.XM}</Data></Cell>
            </c:if>
            <c:if test="${fn:contains(selectColumn,'@XZQH@') }">
                <Cell ss:StyleID="s65"><Data ss:Type="String"><c:if test="${not empty item.map.SHENG_NAME}">${item.map.SHENG_NAME}</c:if><c:if test="${not empty  item.map.SHI_NAME}">-${item.map.SHI_NAME}</c:if> <c:if test="${not empty item.map.QX_NAME}">-${item.map.QX_NAME}</c:if></Data></Cell>
            </c:if>
            <c:if test="${fn:contains(selectColumn,'@MOBILE@') }">
                <Cell ss:StyleID="s65"><Data ss:Type="String">${item.map.MOBILE}</Data></Cell>
            </c:if>
            <c:if test="${fn:contains(selectColumn,'@AGE@') }">
                <Cell ss:StyleID="s67"><Data ss:Type="String">${item.map.AGE}</Data></Cell>
            </c:if>
            <c:if test="${fn:contains(selectColumn,'@BGDH@') }">
                <Cell ss:StyleID="s65"><Data ss:Type="String">${item.map.BGDH}</Data></Cell>
            </c:if>
            <c:if test="${fn:contains(selectColumn,'@ZY@') }">
                <Cell ss:StyleID="s65"><Data ss:Type="String"><nbean:cache dmjbh="ZY" codeId="${item.map.ZY}"></nbean:cache></Data></Cell>
            </c:if>
            <c:if test="${fn:contains(selectColumn,'@EMAIL@') }">
                <Cell ss:StyleID="s65"><Data ss:Type="String">${item.map.EMAIL}</Data></Cell>
            </c:if>
            <c:if test="${fn:contains(selectColumn,'@FAX@') }">
                <Cell ss:StyleID="s65"><Data ss:Type="String">${item.map.FAX}</Data></Cell>
            </c:if>
            <c:if test="${fn:contains(selectColumn,'@BIRTHDAY@') }">
                <Cell ss:StyleID="s75"><Data ss:Type="String"><fmt:formatDate value="${item.map.BIRTHDAY}" pattern="yyyy-MM-dd"></fmt:formatDate></Data></Cell>
            </c:if>
         </Row>
    </c:forEach>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <Print>
    <ValidPrinterInfo/>
    <PaperSizeIndex>9</PaperSizeIndex>
    <HorizontalResolution>100</HorizontalResolution>
    <VerticalResolution>100</VerticalResolution>
   </Print>
   <Selected/>
   <DoNotDisplayGridlines/>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>






作者:星辰 时间:2016-07-27 浏览 695评论 0 赞 0砸 0 标签: demo servlet
评论
还可以再输入500个字

请您注意

·自觉遵守:爱国、守法、自律、真实、文明的原则
·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规
·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·您在NoteShare上发表的作品,NoteShare有权在网站内保留、转载、引用或者删除
·参与本评论即表明您已经阅读并接受上述条款