导出到word文档--带有表格

 有位网友说导出到word文档时原来的表格样式没有了,我认为是你在导出到word时没有设置word样式,之前我没有导出到word的太多经验,Excel导入导出是做了些,呵呵^_^

下面给个导出到word的例子,能设置表格,我也是刚看的,希望对需要的朋友有帮助.

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.spsoft.basic.etfproj.service.EtfprojService;
import com.spsoft.basic.etmproj.service.EtmprojService;
import com.spsoft.construct.projmomerabili.domain.Projmemorabilia;
import com.spsoft.construct.projmomerabili.service.ProjmemorabiliaService;
import com.spsoft.framework.struts.BasePerformAction;
import com.spsoft.global.service.Services;


public class ExportToWordAction extends BasePerformAction {

 public ActionForward perform(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {


  String projId = request.getParameter("projId");
  String projType = request.getParameter("projType");
  String projName = "";
  
  if (projType.equals("1")) {
   EtfprojService service = (EtfprojService)Services.GetService(EtfprojService.SERVICE_NAME);
   projName = service.getEtfproj(Long.valueOf(projId)).getEtfprojname();
  }
  else if (projType.equals("2")) {
   EtmprojService service = (EtmprojService)Services.GetService(EtmprojService.SERVICE_NAME);
   projName = service.getEtmproj(Long.valueOf(projId)).getEtmprojname();
  }
  
  try {
   String fileName = projName + "-工程大事记";
   response.setHeader("content-disposition","attachment; filename="
     + new String(fileName.getBytes("GBK"),"ISO-8859-1")+".doc");
      response.setContentType("application/vnd.ms-word;charset=UTF-8");

   ProjmemorabiliaService service=(ProjmemorabiliaService)
    Services.GetService(ProjmemorabiliaService.NAME);
    //获得需要显示的信息列表
  Collection _list = service.listProjmemorabiliaByProjidAndProjtype(projId, projType);    
   StringBuffer sb = new StringBuffer();
   sb.append("<html>").append("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'/>")
   .append("<body>")
   .append("<table width='100%' border='0' cellpadding='0' cellspacing='1' bgcolor='#cccccc'>")
   .append("<tr>")
   .append("<td align='center' colspan='2'>")
   .append("<B>" + fileName + "</B>")
   .append("</td>")
   .append("</tr>");
   sb.append("<tr>")
   .append("<td>")
   .append("时间")
   .append("</td>")
   .append("<td>")
   .append("内容")
   .append("</td>")
   .append("</tr>");

   for (Iterator it = _list.iterator(); it.hasNext();) {

    Projmemorabilia pm = (Projmemorabilia) it.next();

    sb.append("<tr bgcolor='#ffffff'>")
    .append("<td>")
    .append(new SimpleDateFormat("yyyy年MM月dd日").format(pm.getFilldate()))
    .append("</td>")
    .append("<td>")
    .append(pm.getMemorabiliacontent())
    .append("</td>")
    .append("</tr>");
   }
   
   sb.append("</table></body></html>");
   response.getWriter().write(sb.toString());

  }
  catch (IOException e) {
   e.printStackTrace();
  }
  catch (Exception e) {
   e.printStackTrace();
  }
  
  return null;
 }

}
出来效果,有表格,希望对需要的朋友有帮助:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Freemarker通过FTL模板导出带有表格Word文档。在模板中,可以使用Freemarker的语法来定义表格的结构和内容。然后,使用Java代码将模板和数据合并,生成Word文档。在生成Word文档时,可以使用Apache POI或其他类库来操作Word文档的格式和内容。 ### 回答2: 在搭建Web应用程序时,我们通常会使用一些模板引擎来设计和生成页面。其中一个非常常见的模板引擎就是Freemarker,它的最大特点就是支持导出Word带有表格的操作。 首先,我们需要了解Freemarker是如何工作的。简单来说,Freemarker是一种基于模板的代码生成器,它将模板和数据结构组合起来,并生成具有特定文本格式的结果。在生成过程中,我们可以通过使用模板中的标签来定义输出的格式和样式,从而达到实现特定需求的目的。因此,如果我们想导出Word带有表格文档,就需要在Freemarker模板中设置表格的格式和内容。 下面是一个示例代码片段,展示了如何使用Freemarker生成带有表格Word文档: ``` <#import "jodconverter.ftl" as jodconverter> <#import "office.ftl" as office> <#assign tableData = [ ["Name", "Age", "Gender"], ["Tom", 25, "Male"], ["Lucy", 23, "Female"], ["Jack", 29, "Male"] ]> <#assign tableStyle = office.createTableStyle("tableStyle", { "border-width" : "1", "border-color" : "#000000", "background-color" : "#f0f0f0" })> <#assign tableModel = office.createTableModel("tableModel", { "data" : tableData, "columns" : [{ "width" : "100px" }, { "width" : "50px" }, { "width" : "50px" }] })> <#assign document = jodconverter.convert(inputStream, outputStream)> <#assign table = office.createTable("table", tableModel, tableStyle)> ${table} <#assign outputStream = document.getOutputStream()> ``` 在上述代码中,我们首先定义了一个表格数据和一个表格样式。然后,我们使用`office.createTableModel()`方法创建一个表格模型,并将表格数据和样式传入。接着,我们使用`office.createTable()`方法根据表格模型和样式创建实际的表格。最后,我们将表格输出到Word文档中。 需要注意的是,在上述代码中,我们使用了JODConverter来实现将Freemarker生成的文档换为Word格式的操作。这是因为Freemarker本身并不能直接生成Word文档,而是需要将生成的内容通过其他工具换为Word格式。JODConverter正是其中一种常用的工具,它可以将生成的文档换为多种格式,包括Word、Excel、PDF等。 综上所述,通过使用Freemarker模板引擎和JODConverter工具,我们可以实现将带有表格文档导出Word格式的操作。这一过程需要仔细设置表格的格式和内容,以确保生成的文档符合预期的要求。 ### 回答3: FreeMarker是一种Java模板引擎,它通过模板文件生成输出文件。其中,ftl是FreeMarker模板文件的扩展名。通过使用FreeMarker,我们可以在模板中定义标记和变量来生成各种格式的文本文件,如HTML、XML、JSON、CSV,甚至Word文档。而在这篇文章中,我将着重讲述如何使用FreeMarker生成带有表格Word文档。 首先,我们需要引入FreeMarker的依赖。由于FreeMarker是一种Java模板引擎,因此我们需要在Java项目中添加FreeMarker的依赖。具体方法可以查看FreeMarker官方文档:http://freemarker.apache.org/docs/api/。 接下来,我们需要准备一个FTL模板文件。模板中可以包含Word文档中的各种元素,例如标题、段落、文本、图片等,并且可以用表达式调用Java程序定义的方法和变量。我们需要在模板中定义一个表格,并设置好表格的列数和行数,以及表格内容的格式和位置。 下面是一个简单的示例,用于生成一个带有两行两列的表格: ``` <#list tableData as tr> <#if tr_index == 0> <table> <tr> <th>ID</th> <th>Name</th> </tr> </#if> <tr> <td>${tr.id}</td> <td>${tr.name}</td> </tr> <#if tr_index == tableData?size-1> </table> </#if> </#list> ``` 在这个示例中,我们使用了`<#list>`标签来遍历数据集合(在本例中为`tableData`),并使用`<#if>`标签来判断是否需要添加表头和表尾。在表格中,我们用`${}`表达式来输出数据,其中`${tr.id}`和`${tr.name}`是Java数据模型中的属性或者方法。 最后,我们需要编写Java程序来将数据插入到FTL模板中,并导出Word文档。首先,我们需要创建一个Configuration对象,并指定模板文件的路径: ``` Configuration configuration = new Configuration(Configuration.VERSION_2_3_31); configuration.setDefaultEncoding("UTF-8"); configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); // 模板文件的路径 configuration.setDirectoryForTemplateLoading(new File("template")); // 加载模板文件 Template template = configuration.getTemplate("table.ftl"); ``` 然后,我们需要创建一个Map来存储需要导出Word文档的数据,并将Map传递给模板: ``` Map<String, Object> data = new HashMap<>(); data.put("tableData", tableData); // 将Map传递给模板 Writer writer = new FileWriter(new File("table.doc")); template.process(data, writer); ``` 在这个示例中,我们将数据存储在一个Map中,并以`tableData`为键名,将数据传递给模板。模板将使用`${tr.id}`和`${tr.name}`来获取数据,并将数据填充到相应的位置。最后,我们使用`template.process()`方法将Map传递给模板,并将要导出的文件写入到文件中。 总之,通过FreeMarker模板引擎的强大功能,我们可以轻松地生成各种格式的文本文件,包括带有表格Word文档。在实际应用中,我们可以根据需求编写不同样式的模板,并使用Java程序将数据填充到模板中,生成符合要求的文本文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值