java使用freemarker作为模板导出Excel表格

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

2:把excel 表格另存为xml格式文件如下图

3:这个时候的文件就是xml 格式的文件了,在myeclipse里面项目工程里面新建一个文件后缀为.ftl 然后把弄好的xml文件内容直接复制粘贴到.fl文件里面

如图

4:好了,现在我们直接java 后台action 类代码如下

/**
     * 导出订单表
     * @throws Exception
     */
    public void exportOrder() throws Exception{
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        Map<String, Object> map = new HashMap<String, Object>();
        BookOrder bookOrder = new BookOrder();
        bookOrder.setOrderNo(params.getOrderNo());
        bookOrder.setName(params.getName());
        bookOrder.setPhone(params.getPhone());
        if(params.getCompany() !=null && params.getCompany().getId() !=null){
            bookOrder.setCompany(companyService.load(params.getCompany().getId()));
        }
        bookOrder.setOrderStatus(params.getOrderStatus());
        bookOrder.setDistType(params.getDistType());
        bookOrder.setFoodType(params.getFoodType());
        bookOrder.setStartTime(params.getStartTime());
        bookOrder.setEndTime(params.getEndTime());
        bookOrder.setRefundStatus(params.getRefundStatus());
        bookOrder.setReminder(params.getReminder());
        if(params.getStall() !=null && params.getStall().getId() !=null){
            bookOrder.setStall(stallService.load(params.getStall().getId()));
        }
        List<BookOrder> bookOrderList = (List<BookOrder>)targetService.loadList(bookOrder);
        map.put("bookOrderList", bookOrderList);
        File file = null;
        InputStream inputStream = null;
        ServletOutputStream out = null;
        try {
            request.setCharacterEncoding("UTF-8");
            file = ExcelUtils.createExcel(map, "myExcel","order.ftl");//调用创建excel帮助类
            inputStream = new FileInputStream(file);
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/msexcel");
            response.setHeader("content-disposition", "attachment;filename="+ URLEncoder.encode("订单统计" + ".xls", "UTF-8"));
            out = response.getOutputStream();
            byte[] buffer = new byte[512]; // 缓冲区
            int bytesToRead = -1;
            // 通过循环将读入的Excel文件的内容输出到浏览器中
            while ((bytesToRead = inputStream.read(buffer)) != -1) {
                out.write(buffer, 0, bytesToRead);
            }
            out.flush();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null)
                inputStream.close();
            if (out != null)
                out.close();
            if (file != null)
                file.delete(); // 删除临时文件
        }
    }

5:下面这个是Utils 公共方法如下

package com.funcanteen.business.action.pay.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;

import org.apache.struts2.ServletActionContext;

import freemarker.template.Configuration;
import freemarker.template.Template;

/**
 * 导出excel Utils
 * @author Administrator
 *
 */
public class ExcelUtils {
    private static Configuration configuration =null;
    private static Map<String, Template> allTemplates =null;
    private static String realPath = ServletActionContext.getServletContext().getRealPath("/");
    /*static{
        configuration = new Configuration();
        configuration.setDefaultEncoding("UTF-8");
        try {
            configuration.setDirectoryForTemplateLoading(new File(realPath+"WEB-INF/mailtemplate"));
            allTemplates = new HashMap<String, Template>();
            allTemplates.put("myExcel", configuration.getTemplate("order.ftl"));
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }*/
    public ExcelUtils(){
        throw new AssertionError();
    }
    /**
     * 创建excel
     * @param dataMap
     * @param type
     * @return
     */
    public static File createExcel(Map<?, ?> dataMap, String type,String valueName){
        try {
            configuration = new Configuration();
            configuration.setDefaultEncoding("UTF-8");
            configuration.setDirectoryForTemplateLoading(new File(realPath+"WEB-INF/mailtemplate"));
            allTemplates = new HashMap<String, Template>();
            allTemplates.put(type, configuration.getTemplate(valueName));
        } catch (IOException ex) {
            ex.printStackTrace();
            throw new RuntimeException(ex);
        }
        String name = "temp" + (int) (Math.random() * 100000) + ".xls";
         File file = new File(name);
         Template template = allTemplates.get(type);
         try {
             Writer w = new OutputStreamWriter(new FileOutputStream(file), "utf-8");
             template.process(dataMap, w);
             w.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
         return file;
    }
}

6下面是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>2016-12-22T05:40:25Z</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="s64">
   <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
   <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"/>
  </Style>
  <Style ss:ID="s65">
   <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
   <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="s66">
   <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
   <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"/>
   <Interior ss:Color="#00B050" ss:Pattern="Solid"/>
  </Style>
  <Style ss:ID="s68">
   <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
   <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"/>
   <Interior ss:Color="#00B050" ss:Pattern="Solid"/>
   <NumberFormat ss:Format="@"/>
  </Style>
  <Style ss:ID="s76">
   <Alignment ss:Horizontal="Center" ss:Vertical="Bottom"/>
   <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>
   <NumberFormat ss:Format="General Date"/>
  </Style>
 </Styles>
 <Worksheet ss:Name="Sheet1">
  <Table ss:ExpandedColumnCount="14" ss:ExpandedRowCount="${bookOrderList?size+2}" x:FullColumns="1"
   x:FullRows="1" ss:StyleID="s65" ss:DefaultColumnWidth="54"
   ss:DefaultRowHeight="14.25">
   <Column ss:Index="5" ss:StyleID="s65" ss:Width="76.5"/>
   <Column ss:StyleID="s65" ss:Width="101.25"/>
   <Row>
    <Cell ss:StyleID="s66"><Data ss:Type="String">所属饭堂</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">所属档口</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">订单号</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">下单人</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">联系电话</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">地址</Data></Cell>
    <Cell ss:StyleID="s68"><Data ss:Type="String">下单时间</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">订单原价</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">订单价格</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">优惠价格</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">快递费</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">打包费</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">快递方式</Data></Cell>
    <Cell ss:StyleID="s66"><Data ss:Type="String">用餐类型</Data></Cell>
   </Row>
   <#if bookOrderList?? >
   <#list bookOrderList as bookOrder>
   <Row>
    <#if bookOrder.company ??>
    <Cell ss:StyleID="s64"><Data ss:Type="String">${bookOrder.company.simpleName?if_exists}</Data></Cell>
    <#else>
    <Cell ss:StyleID="s64"><Data ss:Type="String"></Data></Cell>
    </#if>
    <#if bookOrder.stall ??>
    <Cell ss:StyleID="s64"><Data ss:Type="String">${bookOrder.stall.simpleName?if_exists}</Data></Cell>
    <#else>
    <Cell ss:StyleID="s64"><Data ss:Type="String"></Data></Cell>
    </#if>
    <Cell><Data ss:Type="String">${bookOrder.orderNo?if_exists}</Data></Cell>
    <Cell ss:StyleID="s64"><Data ss:Type="String">${bookOrder.name?if_exists}</Data></Cell>
    <Cell><Data ss:Type="String">${bookOrder.phone?if_exists}</Data></Cell>
    <Cell><Data ss:Type="String">${bookOrder.address?if_exists}</Data></Cell>
    <Cell ss:StyleID="s76"><Data ss:Type="String">${bookOrder.createTime?string("yyyy-MM-dd HH:mm:ss")}</Data></Cell>
    <Cell><Data ss:Type="Number">${bookOrder.orderPrice?default(0)?double + bookOrder.benefitPrice?default(0)?double - bookOrder.expressCharge?default(0)?double - bookOrder.packCharge?default(0)?double}</Data></Cell>
    <Cell><Data ss:Type="Number">${bookOrder.orderPrice?if_exists}</Data></Cell>
    <Cell><Data ss:Type="Number">${bookOrder.benefitPrice?if_exists}</Data></Cell>
    <Cell><Data ss:Type="Number">${bookOrder.expressCharge?if_exists}</Data></Cell>
    <Cell><Data ss:Type="Number">${bookOrder.packCharge?if_exists}</Data></Cell>

    <#if bookOrder.distType ?? && bookOrder.distType==0>
    <Cell ss:StyleID="s64"><Data ss:Type="String">自提</Data></Cell>
    </#if>
    <#if bookOrder.distType ?? && bookOrder.distType==1>
    <Cell ss:StyleID="s64"><Data ss:Type="String">快递</Data></Cell>
    </#if>

    <#if bookOrder.foodType ?? && bookOrder.foodType==1>
    <Cell ss:StyleID="s64"><Data ss:Type="String">早餐</Data></Cell>
    </#if>
    <#if bookOrder.foodType ?? && bookOrder.foodType==2>
    <Cell ss:StyleID="s64"><Data ss:Type="String">午餐</Data></Cell>
    </#if>
    <#if bookOrder.foodType ?? && bookOrder.foodType==3>
    <Cell ss:StyleID="s64"><Data ss:Type="String">晚餐</Data></Cell>
    </#if>
    <#if bookOrder.foodType ?? && bookOrder.foodType==4>
    <Cell ss:StyleID="s64"><Data ss:Type="String">宵夜</Data></Cell>
    </#if>
    <#if bookOrder.foodType ?? && bookOrder.foodType==5>
    <Cell ss:StyleID="s64"><Data ss:Type="String">下午茶</Data></Cell>
    </#if>
    <#if bookOrder.foodType ?? && bookOrder.foodType==6>
    <Cell ss:StyleID="s64"><Data ss:Type="String">零食</Data></Cell>
    </#if>
   </Row>
   </#list>
   </#if>
  </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>4</ActiveRow>
     <ActiveCol>10</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>

原文地址:https://www.cnblogs.com/toSeeMyDream/p/12381242.html

时间: 2024-07-29 23:09:43

java使用freemarker作为模板导出Excel表格的相关文章

java后台poi根据模板导出excel

public class ExcelUtils { private static final String INSPECTIONRECORD_SURFACE_TEMPLET_PATH = "download\\template\\materialList.xlsx"; private static XSSFCellStyle cellstyle = null; public static void exportBom(HttpServletRequest request, HttpSe

java代码实现导出Excel表格、工具ssm框架、maven、idea

第一步.导入依赖 <!--生成excel文件--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId&g

java中使用jxl导出Excel表格详细通用步骤

该方法一般接收两个参数,response和要导出的表格内容的list. 一般我们将数据库的数据查询出来在页面进行展示,根据用户需求,可能需要对页面数据进行导出. 此时只要将展示之前查询所得的数据放入session中备份一份,在调用导出方法时,从session中获取即可, 如果为后台直接导出,直接查询数据库后将结果传入即可,当然也可以在导出Excel方法中查询. 查询方法: // 获取查询结果存入session中        Object resultList = request.getAttr

PHP导入导出excel表格图片(转)

写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用过,csv的就更不用谈了.呵呵.(COM方式不讲了,这种可读的太多了,我也写过利用wps等进行word等的生成之类的文章 )但是在读的时候,只用过一种,具体是什么忘了,要回去翻代码了.基本上导出的文件分为两种:1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件.优

POI通过模板导出EXCEL文件

一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中的内容.样式.2.自己需要新增的内容.样式.),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下. 分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容. 1 File fi = new File("F:/usr/use

apache poi根据模板导出excel

需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.user

C#使用模板导出Excel

前言:此随笔仅供自己学习,如有不足请指出 在某些情况导出的时候,会有很复杂的表头或者样式,如果靠代码去调整的话回很麻烦,需要写很多代码,这个时候可以预先设置好表格,这样就方便灵活很多. /// <summary> /// 使用模板导出Excel /// </summary> /// <param name="listEntity">数据集</param> /// <param name="path">路径&

原生JavaScript 导出excel表格(兼容ie和其他主流浏览器)

因同事的需求是想前端导出excel表格,网上找了一些demo,自己修改了一下,可能以后会用到,记录下来吧,兼容ie和一些主流浏览器,ie可能会报错,原因参考 这里,edge 浏览器还没有办法导出,正在尝试... <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>table 导出excel表格</title>

aspose.cells根据模板导出excel

又隔十多天没写博客了,最近都在忙项目的事情,公司人事变动也比较大,手头上就又多了一个项目.最近做用aspose.cells根据模板导出excel报价单的功能,顺便把相关的核心记下来,先上模板和导出的效果图吧,如下: 导出效果图(看到产品图,打不死的程(diao)序(si)员(猿)骚动吧,有没有不禁看了看自己粗大的右手): (其中红色框框起来的是动态填充的内容,工作薄名(产品信息)也是动态输出的) 模板如下: 大概流程是这样,先把需要输出到excel的内容存到一个model里面,然后把该model