`
accpxudajian
  • 浏览: 459816 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jsp导出word,java导入access,freemarker

阅读更多

1使用jsp+struts导出带有表格的word
要点包括:1中文乱码;2以word形式保存文件;3struts标签的基本使用;4


<%@ page language="java" pageEncoding="utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
	<%
		String name =request.getAttribute("name").toString();
		name = new String(name.getBytes("GBK"),"ISO8859-1")+"";
		response.setHeader("Content-disposition","attachment; filename="+name+".doc");
	%>
</head>
<body>
<s:if test="${baseType}==0">
<h2 >1.A基本信息</h2>
<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0  style='width:400pt;font-size:10.0pt;border-collapse:collapse;mso-padding-alt:0cm 0cm 0cm 0cm'>
    	<tr height=30 style='height:22.5pt'>
    		<td style="width:60pt;">姓名</td>
    		<td><s:property value="personInfo.XM"/></td>
    		<td style="width:60pt;">性别</td>
    		<td><s:property value="personInfo.NL"/></td>
    	</tr>
    </table>
	<h3 >1.2 A扩展信息</h3>
    <table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0  style='width:400pt;font-size:10.0pt;border-collapse:collapse;mso-padding-alt:0cm 0cm 0cm 0cm'>
    	<s:iterator value="personInfo.kzxxList" status="stat">
			 <tr height=19 style='height:14.25pt'>
				  <td style="width:70pt;"><s:property value="typeName" escape="false"/></td>
				  <td><s:property value="beanValue" escape="false"/></td>
			 </tr>
		</s:iterator>
    </table>
   </s:if>
   <s:elseif test="${baseType}==1">
   	<h2 >1.B基本信息</h2>
   </s:elseif>
  
   
   
   
   <h2 >2.关联信息</h2>
   <s:if test="docList.size()>0">
    <h3>文档</h3>
</s:if>
		
</body>
</html>


2 Java将数据导入到Access数据库要点


/**
	 * 【业务共享】将指定了Id(由ids决定)的业务数据(由beanType决定)的某些字段(由props决定)导出到access
	 * @param ids 即将导出的数据的id集合。 
	 * @param props 导出数据的那些属性
	 * @param beanName 业务表的bean名称
	 * @return
	 */
	private synchronized final int exportData(List<String> ids,String props,String beanType){
		if(T.isNullList(ids)){return 0;}else{T.print("一共有"+ids.size()+"条数据即将导出");}
		if(T.isNull(props)){return 0;}
		//TODO 基础变量
		String filePath = T.getRealyPath()+"template/bussShare.mdb";
		String tableName = Constant.BASEINFO_ZZ.equals(beanType)?"表B":Constant.BASEINFO_MZ.equals(beanType)?"表C":"表A";
		
		try {
			//创建jdbc连接。
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			Properties prop = new Properties();
			Connection conn = DriverManager.getConnection("jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+filePath+";", prop);
			Statement st = conn.createStatement();
			
			//TODO 删除旧表
			try{st.execute("drop table 表A");}catch(Exception e){ }
			try{st.execute("drop table 表B");}catch(Exception e){ }
			try{st.execute("drop table 表C");}catch(Exception e){ }
			
			//TODO 创建新表。
			StringBuffer buffer=new StringBuffer(500);
			buffer.append("create table ").append(tableName).append("(id integer");//主键ID
			String[] colNames = T.getJSON(props, "before").split(",");
			for (int i = 0; i < colNames.length; i++) {
				buffer.append(",").append(colNames[i]).append(" memo ");
			}
			buffer.append(" ) ");//TODO carate table最后一个括号。
			st.execute(buffer.toString());
			//TODO 创建新表。END
			
			
			//TODO 从gx读取数据,同时写入access数据表中。
			String[] colArr= T.getJSON(props, "after").split(",");
			int propSize = colArr.length;//有这么些字段。
			
			//TODO 拼凑插入数据的sql模板。
			StringBuffer insertBaseBuffer=new StringBuffer(500);
			insertBaseBuffer.append("insert into "+tableName+" values( {id}");
			for (int i = 0; i < propSize; i++) {
				insertBaseBuffer.append(",").append("{"+colArr[i].toLowerCase().trim()+"}");
			}
			insertBaseBuffer.append(")");
			String insertBase = insertBaseBuffer.toString();
			//TODO 拼凑插入数据的sql模板END
			
			//根据模板,生成带有真实数据的sql插入数据
			String insertsql ;
			int len = ids.size();
			PersonInfoLogic personLogic =  (PersonInfoLogic) ApplicationContextHolder.getBean("personInfoLogic");
			Object obj = "";
			ElecaddressInfo e;
			OrgInfo o;
			PersonInfo p;
			Method[] ms;
			Method m;
			String _name;
			String oValue ;
			for ( int i=0; i < len; i++) {
				insertsql =  insertBase.replace("{id}", (i+1)+"");
				p = personLogic.get(ids.get(i)); 
				personLogic.convertDic(p, "view");
				obj  = p;
				ms = obj.getClass().getMethods();//TODO 所有get方法和set方法的集合。
				for(int j=0;j<ms.length;j++){
					if(ms[j].getName().indexOf("get")>=0){//只要get方法。
						m = ms[j];
						_name = m.getName().replace("get", "").toLowerCase();
						oValue =T.isNull((m.invoke(obj, null)+""),"").toString();
						insertsql = insertsql.replace("{"+_name+"}", addChar(oValue));
					}
				}
				st.execute(insertsql);
				if(i%50==0){
					T.print(i);
				}
			}
			st.clearBatch();
			st.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return 0;
	}


3 使用freemarker导出数据

/**
 * 使用freemark导出数据
 * @param id 数据ID
 * @param dataType 数据类型
 * @return 生成的物理文件的物理路径
 */

public static String exportByFreeMark(String baseId,String dataType){
PersonInfoLogic personInfoLogic =  (PersonInfoLogic) ApplicationContextHolder.getBean("personInfoLogic");
try {
Configuration cfg=new Configuration();
String filePath = WebUtil.getBasePath()+"template";
cfg.setDirectoryForTemplateLoading(new File(filePath));
cfg.setObjectWrapper(new DefaultObjectWrapper());
Template temp=cfg.getTemplate("toword.xml","GBK");

Map root=new HashMap();//根
List<Map> personlist = new ArrayList<Map>();//关联数据对象

root.put("dataType", "person");//数据类型使用dataType做标识
PersonInfo instance = personInfoLogic.getViewObj(baseId, null);
Map map_person = FreeMarkTool.converPerson(instance);
root.put("person",map_person);//对象主题数据

String imgPath = WebUtil.getBasePath()+"images/no_image.jpg";
root.put("image", T.getFileEncode(imgPath));//图片信息

Date currDate=new Date();
String name=DateUtil.formatDateTime(currDate, "yyyy-MM-dd")+"_"+currDate.getTime();//文件名
String fileUrl = "upload/file/"+name+".doc";
File file = new File(T.getRealyPath()+fileUrl);
if(file.exists()){file.delete();}
FileOutputStream fos = new FileOutputStream(file);
Writer out=new OutputStreamWriter(fos,"GBK");
temp.process(root, out);
out.flush();
fos.close();//TODO 必须关闭文件输出流 否则不能删除临时文件。
return fileUrl;
} catch (Exception e) {
	e.printStackTrace();
}finally{
	//清空缓存。
	personInfoLogic.getPersonInfoDAO().getHibSession().clear();
}
return null;
}

/**
 * 将一个数据对象转变成map对象
 * @param instance 数据对象
 * @return 使用map模拟的数据对象
 */
public static Map converPerson(PersonInfo instance){
	String json = "name:{0},age:{1}";
	Object[] params = new Object[50];
	params[0] = T.isNullHTML(instance.getName(),"--");
	params[1] = T.isNullHTML(instance.getAge(),"--");
	json = MessageFormat.format(json, params);
	Map map = T.getMapFromJSON(json);
	return map;
}


3 freemarker标签
备注:首先使用word另存为生成xml模板,然后替换内容。

<#if dataType=="person">
	${obj.Name}
	<#list kzxxList as kzxx_item>
		${kzxx_item.typeName}
	</#list>
<#elseif dataType=="orginfo">

<#else>
	<w:p><w:r><w:t>无</w:t></w:r></w:p>
</#if>
	
	
<#if personlist?size gt 0 >

</#if>
 
分享到:
评论

相关推荐

    java使用freemarker模板技术导出word

    Java 使用 FreeMarker 模板技术导出 Word 是一种常见的数据动态生成文档的方法,它结合了 Java 的编程能力和 FreeMarker 模板引擎的强大功能,能够帮助开发者高效地生成结构化的 Word 文档。FreeMarker 是一个开源的...

    java freemarker导出word -包含多张图片导出

    在Java应用中,使用FreeMarker导出Word文档可以提供灵活的文本和数据结合的方式,尤其适用于生成报告、合同等复杂格式的文档。本篇将详细介绍如何使用FreeMarker与Java结合来导出包含多张图片的Word文档。 1. **...

    Java 用Freemarker导出word文档总结

    在Java中利用FreeMarker导出Word文档,可以极大地提高代码的可维护性和灵活性。 首先,我们需要了解FreeMarker的基础知识。FreeMarker是一个基于模板的视图技术,它将数据模型和视图模板分离,使得开发者可以专注于...

    freemarker模板导出word循环图片表格源码和详细教程

    在本教程中,我们将探讨如何利用Freemarker模板来导出Word文档,并实现循环插入图片和表格的功能。这对于需要批量生成定制化报告或者文档的应用场景非常有用。 首先,我们需要了解Freemarker的基本语法。在...

    java web+freemarker导出word

    java web+freemarker 导出word 单个字符串${name}, 列表&lt;#list tail as item&gt; ${item.id} ,附有源码,导出word的word模板 以及另存为的xml文件和 ftl模板,只需要改下里面的查询数据库即可

    Freemarker导出word示例,包括jfreechart图表

    Freemarker是一个强大的Java模板引擎,它允许开发者使用模板语言来分离应用的逻辑与呈现层。在本示例中,Freemarker被用于生成Word文档,实现数据与模板的结合,使得动态生成Word文档变得更加简单。 首先,让我们...

    java导出word使用freemarker模板map数据导出word带图片

    java导出word使用freemarker模板map数据导出word带图片 可以循环map 中list。 调用的2种方法在博客 https://blog.csdn.net/yjflinchong/article/details/122614203

    导出Word:POI or Freemarker

    本文将详细介绍两种使用Java技术导出Word文档的方法:Apache POI库和Freemarker模板引擎。 首先,Apache POI是Apache软件基金会的一个开源项目,主要为Microsoft Office格式提供读写功能,包括Word(.doc/.docx)、...

    java利用FreeMarker导出word

    Java利用FreeMarker导出Word是一项常见的技术需求,尤其在企业级应用中,常常需要将动态数据生成为Word文档,例如报告、合同等。FreeMarker是一个模板引擎,它能将Java对象的数据绑定到模板上,生成HTML、XML或者如...

    Java项目中利用Freemarker模板引擎导出--生成Word文档

    基于Java语言来导出Word文档的方式也有很多种,如Jacob,Apache POI,Freemarker,PageOffice,java2word 等等。。。。 在这里将通过Freemarker这个模板引擎来实现导出 Word,项目不限于Swing,SSH,SSM,Spring ...

    Java用freemarker导出word例子

    总之,`Freemarker`提供了便捷的方式将Java数据导出为Word文档,这对于报告生成、数据导出等场景非常有用。通过熟练掌握`Freemarker`的使用,你可以轻松地定制化Word文档的结构和内容,提高开发效率。

    freemarker 导出word表格

    在本场景中,我们讨论的是如何利用FreeMarker来导出Word表格。这个过程通常涉及到以下步骤: 1. **创建Word模板**: 首先,你需要使用Microsoft Word创建所需的表格和格式。Word允许用户设计丰富的布局,包括...

    java freemarker 导出 word

    以上就是使用Java FreeMarker导出Word文档的基本流程。实际应用中,你可能需要处理更复杂的模板,包括表格、列表、图片等,以及更丰富的数据模型。FreeMarker的强大之处在于它的灵活性,可以根据具体需求定制模板,...

    java 使用 freemarker 导出word 包含 图片和动态的数据表,动态行和动态列

    在Java开发中,导出Word文档是一项常见的任务,特别是在企业级应用中,如报表生成、数据导出等。本篇文章将深入探讨如何使用FreeMarker模板引擎来生成包含图片和动态数据表的Word文档,尤其注重动态行和动态列的处理...

    FreeMarker+poi 模板生成word+导入图片

    **FreeMarker + POI:模板生成Word并导入图片** 结合FreeMarker和Apache POI,我们可以创建一个模板Word文档,其中包含占位符,然后使用POI读取和填充这个模板,同时插入图片,生成最终的动态Word文档。以下是这个...

    Java实现用Freemarker完美导出word文档(带图片)

    Java实现用Freemarker完美导出word文档(带图片) 以下是Java实现用Freemarker完美导出word文档(带图片)的知识点: 1. Freemarker模板引擎:Freemarker是一个基于Java的模板引擎,能够将数据填充到模板中,从而...

    使用FreeMarker实现导出word实例

    在本实例中,可能的场景是,`wordTest`项目包含了处理Word导出的Java代码,`myFreeMarker.doc`和`test.doc`可能是已经生成的示例Word文档,而`test.ftl`则是用于生成Word文档的FreeMarker模板。 通过这种方式,你...

    Java用freemarker导出word文档

    `Java用freemarker导出word文档`这个主题涉及到的技术点主要包括Java的Freemarker模板引擎和处理Word文档的相关库。Freemarker是一个强大的、基于模板的生成器,广泛用于Web应用中的动态HTML生成。在这里,它被用来...

    java通过freemarker模板导出word含图片

    在Java开发中,有时我们需要将数据以Word文档的形式导出,尤其在报表生成、文档自动化等领域。本示例关注的是如何使用FreeMarker模板引擎来实现这个功能,并且包含在Word文档中插入图片的能力。FreeMarker是一个强大...

Global site tag (gtag.js) - Google Analytics