1. 程式人生 > >java使用freemarker作為模板匯出Excel表格

java使用freemarker作為模板匯出Excel表格

1:首先新建一個excel表格自己弄好格式如下圖

2:把excel 表格另存為xml格式檔案如下圖

3:這個時候的檔案就是xml 格式的檔案了,在eclipse裡面專案工程裡面新建一個檔案字尾為.ftl 然後把弄好的xml檔案內容直接複製貼上到.ftl檔案裡面

4.看一下js程式碼

//匯出備份日誌報表
    export_backup_log_report:function(url)
    {
        var startime=$("#time1").val();
        var endtime=$("#time2").val();
        if(confirm("確定要匯出?")){
            $.ajax({
                type : "post",// 指定是post還是get encodeURI()
                url : ""+url+"?startime="+startime
                +"&endtime="+endtime,// 傳送請求的地址
                async : true, // 預設為true為非同步,false為同步
                dataType : "json",
                contentType:'application/x-www-form-urlencoded; charset=UTF-8',
                beforeSend: function (XMLHttpRequest) {
                    XMLHttpRequest.setRequestHeader("Accept", "application/json");
                },
                error : function(err) {// 如果確定能正確執行,可不寫
                    alert("伺服器正忙,請稍後再試!");
                    top.location ="logout";
                },
                success : function(result){
                    var status=result.status;
                    var msg=result.msg;
                    if(status==0){
                        var report_export_url=result.data.report_export_url;
                        var url=report_export_url+"備份日誌報表.xls";
                        window.open(url);
                    }else
                    {
                        alert(msg);
                    }
                }
            });
        }
    },

 

5.看一下java程式碼

//匯出備份日誌報表
    @RequestMapping(value="/admin/backupLogReport",method={RequestMethod.GET,RequestMethod.POST})
    @ResponseBody
    public WebResult backupLogReport(HttpServletRequest request,HttpServletResponse response,
            @RequestParam(value="page",defaultValue="0") int page,
            @RequestParam(value="searchvalue" ,defaultValue="") String searchvalue,
            @RequestParam(value = "startime", defaultValue = "") String startime,
            @RequestParam(value = "endtime", defaultValue = "") String endtime) throws Exception{
        
        response.setContentType("text/html;charset=UTF-8");   
        request.setCharacterEncoding("UTF-8");  
        String fileName ="備份日誌報表.xls";  
        
        List<TblLogsBk> list=null;
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        
        String templateDir = request.getSession().getServletContext().getRealPath("/")+"template";//模板路徑 
        String excelPath = request.getSession().getServletContext().getRealPath("/")+"tempfile";//匯出地址
        try{
            //初始化時間  
            if(StringUtils.isEmpty(startime) || StringUtils.isEmpty(endtime))
            {
                startime=WebUtil.formatBeginDate();
                endtime=sdf.format(WebUtil.getDateAfter(new Date(), 1));
            }
            list=baseDao.getListByLike(TblLogsBk.class, "bktime",sdf.parse(startime), sdf.parse(endtime), "id", "desc", 0,10000);
            for(TblLogsBk log:list)
            {
                // 1.手動 2.自動
                if(log.getBktype().equals("1")) log.setBktype("手動");
                if(log.getBktype().equals("2")) log.setBktype("自動");
            }
            if(list!=null && list.size()>0)
            {
                if(list.size()>10000) return WebResult.error("最多匯出10000條記錄!", null); Map<String, Object> dataMap = new HashMap<String, Object>();
                dataMap.put("backupLoglist",list);
                dataMap.put("totalrecord",list.size()+"條");
                TemplateParseUtil.parse(templateDir, "backuplog.ftl",excelPath+"/"+fileName,dataMap);
                
                String report_export_url = ReadResource.report_export_url;//下載地址
                HashMap<String,Object> valuemap=WebUtil.getHashMap();
                valuemap.put("report_export_url",report_export_url);
                return WebResult.success("匯出成功",valuemap);  
            }else
            {
                return WebResult.error("沒有可導資料!", null);  
            }
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        
        return WebResult.error("匯出失敗", null); 
    }

6.自己去設定下載地址

7.以下是ftl檔案配置

<?xml version="1.0"?>
<?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>Administrator</LastAuthor>
  <Created>2008-09-11T17:22:52Z</Created>
  <LastSaved>2018-11-19T06:57:23Z</LastSaved>
  <Version>12.00</Version>
 </DocumentProperties>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>5715</WindowHeight>
  <WindowWidth>12765</WindowWidth>
  <WindowTopX>0</WindowTopX>
  <WindowTopY>105</WindowTopY>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Tahoma" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s56" ss:Name="常規 2">
   <Alignment ss:Vertical="Center"/>
   <Borders/>
   <Font ss:FontName="宋體" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="m43397792">
   <Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
   </Borders>
   <Font ss:FontName="宋體" x:CharSet="134" ss:Size="18" ss:Color="#000000"
    ss:Bold="1"/>
   <Interior ss:Color="#C5D9F1" ss:Pattern="Solid"/>
  </Style>
  <Style ss:ID="s58">
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
   </Borders>
  </Style>
  <Style ss:ID="s59" ss:Parent="s56">
   <Borders>
    <Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
    <Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
   </Borders>
   <Font ss:FontName="宋體" x:CharSet="134" ss:Size="11" ss:Color="#000000"
    ss:Bold="1"/>
   <Interior ss:Color="#00B050" ss:Pattern="Solid"/>
  </Style>
 </Styles>
 <Worksheet ss:Name="Sheet1">
  <Table ss:ExpandedColumnCount="8" ss:ExpandedRowCount="${backupLoglist?size+3}" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
   <Column ss:AutoFitWidth="0" ss:Width="93.75" ss:Span="3"/>
   <Column ss:Index="5" ss:AutoFitWidth="0" ss:Width="142.5"/>
   <Column ss:AutoFitWidth="0" ss:Width="159.75"/>
   <Column ss:AutoFitWidth="0" ss:Width="110.25"/>
   <Column ss:AutoFitWidth="0" ss:Width="159"/>
   <Row ss:AutoFitHeight="0" ss:Height="30">
    <Cell ss:MergeAcross="7" ss:StyleID="m43397792"><Data ss:Type="String">備份日誌報表</Data></Cell>
   </Row>
   <Row ss:AutoFitHeight="0" ss:Height="20.0625">
    <Cell ss:StyleID="s59"><Data ss:Type="String">IP</Data></Cell>
    <Cell ss:StyleID="s59"><Data ss:Type="String">備份型別</Data></Cell>
    <Cell ss:StyleID="s59"><Data ss:Type="String">埠號</Data></Cell>
    <Cell ss:StyleID="s59"><Data ss:Type="String">使用者名稱</Data></Cell>
    <Cell ss:StyleID="s59"><Data ss:Type="String">儲存路徑</Data></Cell>
    <Cell ss:StyleID="s59"><Data ss:Type="String">檔名</Data></Cell>
    <Cell ss:StyleID="s59"><Data ss:Type="String">資料庫名</Data></Cell>
    <Cell ss:StyleID="s59"><Data ss:Type="String">備份時間</Data></Cell>
   </Row>
  <#list backupLoglist as backupqust>
   <Row ss:AutoFitHeight="0" ss:Height="20.0625">
    <Cell ss:StyleID="s58"><Data ss:Type="String">${backupqust.serverip!}</Data></Cell>
    <Cell ss:StyleID="s58"><Data ss:Type="String">${backupqust.bktype!}</Data></Cell>
    <Cell ss:StyleID="s58"><Data ss:Type="String">${backupqust.portnum!}</Data></Cell>
    <Cell ss:StyleID="s58"><Data ss:Type="String">${backupqust.username!}</Data></Cell>
    <Cell ss:StyleID="s58"><Data ss:Type="String">${backupqust.savepath!}</Data></Cell>
    <Cell ss:StyleID="s58"><Data ss:Type="String">${backupqust.filename!}</Data></Cell>
    <Cell ss:StyleID="s58"><Data ss:Type="String">${backupqust.databasename!}</Data></Cell>
    <Cell ss:StyleID="s58"><Data ss:Type="String">${backupqust.bktime!}</Data></Cell>
   </Row>
   </#list>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.3"/>
    <Footer x:Margin="0.3"/>
    <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
   </PageSetup>
   <Print>
    <ValidPrinterInfo/>
    <PaperSizeIndex>9</PaperSizeIndex>
    <HorizontalResolution>600</HorizontalResolution>
    <VerticalResolution>600</VerticalResolution>
   </Print>
   <Selected/>
   <Panes>
    <Pane>
     <Number>3</Number>
     <ActiveRow>3</ActiveRow>
     <ActiveCol>4</ActiveCol>
    </Pane>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Sheet2">
  <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.3"/>
    <Footer x:Margin="0.3"/>
    <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
   </PageSetup>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Sheet3">
  <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
   x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="14.25">
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <PageSetup>
    <Header x:Margin="0.3"/>
    <Footer x:Margin="0.3"/>
    <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
   </PageSetup>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>