最近做了一个资费查询模块,里面涉及将资费信息导出Word文档和Excel文档,
先说说导出Word文档:
其实就是把响应的类型设为application/msword,然后把内容输出到这个文件就行了
第一步:
先在桌面上新建一个word文档,双击打开,然后另存为.htm文件,会产生一个以.htm结尾的文件
第二步:
把.htm文件扩展名改为.jsp文件,此时它就是一个有word排版格式的jsp文件了,
然后在这个文件前加上:<%@ page contentType="application/msword;charset=gbk"%>
再引入其他相关的类
第三步:把jsp文件中,需要动态显示的东西改成为java代码就行了,通常就会对一个集合或直接就是结果集进行遍历
如:访问
http://localhost:8080/jxtelecom/exportWord.jsp
出现:
不支持,导出只读文件,如果谁解决了,请给我留言,谢谢。
补充:解决乱码问题。
在
mht文件中,可以看到汉字的编码变了,如“中国”变
为“中国”这种其实 是unicode码的10进制表示,我们在java中一般看到的unicode码都是16进制的。主要写个10进制unicode和16进制unicode转换程序,以后可以参考一下,这个对于这次项目中查询数据并根据
模板
导出到
word中,解决了几周来的乱码问题。 public class TestUnicode {
/**
* 二期导出word文档专用转码方法
* 方法说明:把中文 转为 mht专用的 uncode 10进制编码
* @author peijianwen
* @since 2009-12-01
* @return String
*/
public static String convertUncode10(String s) {
String conStr = "";
// 转码uncode 10进制
for(int i = 0;i<s.length();i++){
char a = s.charAt(i);
conStr += "&#"+ (int)a+";"; //将中文转成10进制的表示
}
return conStr;
}
/**
* 二期导出word文档专用转码方法
* 方法说明:把中文 转为 mht专用的 uncode 10进制编码
* @author peijianwen
* @since 2009-12-01
* @return String
*/
public static String convertUncode10(String s) {
String conStr = "";
// 转码uncode 10进制
for(int i = 0;i<s.length();i++){
char a = s.charAt(i);
conStr += "&#"+ (int)a+";"; //将中文转成10进制的表示
}
return conStr;
}
public static void main(String[] args) {
//将中文转成16进制的表示
System.out.println("/u" + Integer.toHexString('中')); //“/u4e2d”
System.out.println("/u" + Integer.toHexString('中' & 0xffff)); //“/u4e2d”
//将中文转成10进制的表示
System.out.println("&#" + (int)'中' + ";"); //中
System.out.println("&#" + ('中' & 0xffff) + ";"); //中
//将10/16进制的表示转成汉字
System.out.println((char) 20013); //中
System.out.println((char) 0x4e2d); //中
}
//将中文转成16进制的表示
System.out.println("/u" + Integer.toHexString('中')); //“/u4e2d”
System.out.println("/u" + Integer.toHexString('中' & 0xffff)); //“/u4e2d”
//将中文转成10进制的表示
System.out.println("&#" + (int)'中' + ";"); //中
System.out.println("&#" + ('中' & 0xffff) + ";"); //中
//将10/16进制的表示转成汉字
System.out.println((char) 20013); //中
System.out.println((char) 0x4e2d); //中
}