2023年11月28日发(作者:)
javaweb页⾯导出word
①我做了⼀个word模板,定义好了书签为listyd,书签是在⼀个表格中,在书签位置动态
的⽣成表格,例⼦代码如下:
var ole = new ActiveXObject("ation");
var url=c:nsqktzs_"
var doc =(url,false,false);
ole.V isible = true;
d =true;
var rg=(true,0,0,"listyd");
var tab=(rg, 2,2) ;
for(var i=1;i<=2;i++){
for(var j=1;j<=2;j++){
var rgcell=(i,j).Range;
After(i+j);
}
}
⽣成的表格嵌套在以前的表格中,很难看,如何能让⽣成的表格和外边的表格看上去是⼀个整体。
After(i+j);
可以⽤insertBefore么。
也可以考虑⽤java语⾔做word模板。
③.⼩弟最近在做JSP页⾯内容导出到Word,但遇到了很多困难,望各位⼤侠急救
需求:
1.将JSP页⾯中的内容导出到Word⽂件中。
页⾯中包含图⽚,图⽚的数据是从数据库中加载出来,实时⽣成的。
⼩弟在⽹上看过N个例⼦,也测试了,就是⽆法解决,问题如下:
1.通过=''的链接⽅式,访问加⼀个JSP页⾯,⽂件头为:
<%@ page contentType="application/msword;charset=gbk"%>
当点击“导出”按钮时,可以⽣成Word⽂件,但是图⽚⽆法在Word中⽣成.
2.直接在页⾯中加JS脚本:
var oWD = new ActiveXObject("ation");
State = 2;
var oDC = ("",0,1);
var oRange =(0,1);
var sel = TextRange();
ElementText(PrintA);
();
mmand("Copy");
();
e = true;
在我的电脑上可以导出Word(我的office版本是2007)⽂件,并且可以显⽰图⽚。但是当我⽤的同事的电脑访问我的电脑时,
图⽚就不能⽣成了,有的⼲脆连Word⽂件都不能⽣成(同事的office版本是2003的)。
3.我把项⽬部暑到测试服务器(加⼀台电脑)时,不能⽣成Word⽂件。
注:
我已经把我电脑上的IP加到同事电脑的IE中的“受信任站点”。
我已经把测试服务器上的IP加到我的电脑的IE中的“受信任站点”。
回答:解决⽅案:
1、你现在⽤ActiveXObject的⽅法,肯定是可以的,我以前做过,Word2003、2007都⽀持,我估计
是你同事的IE浏览器⾥⾯限制了ActiveX运⾏
2、在后端⽣成WORD,很多开源框架都⽀持HTML->WORD,你找⼀个就可以了。
④:⽤JS⽣成WORD
最近项⽬中碰到了要⾃动⽣成WORD的问题,开始也去找了些开源的东西,⽐如JACOB,但是它存在⼀些缺陷。例如它要求
JDK在1.4以下,并且还要在设置PATH,⽐较⿇烦,所以最后决定通过客户端的JS来实现需求。
下⾯是个简单的例⼦:
单元格1单元格2单元格3单元格4
单元格合并
test
导出页⾯到Word
⑥如何在Web页⾯上直接打开、编辑、创建Office ⽂档
有朋友询问如何在Web页⾯上做到像SharePoint中的效果⼀样,能直接激活客户端的Word来打开.doc⽂件,⽽不是类似直接
点击.doc⽂档链接时Word在IE 中被打开那样。想想这个问题应该很多⼈都会感兴趣,所以⼲脆写⼀篇blog来⼤致描述⼀下⽅
法。
在安装Office2003以后,有⼀个ActiveX控件被安装到了系统中,这个控件位于“Program FilesMicrosoft
”。通过这个控件,客户端页⾯上的JavaScript就可以激活本地的Office软件,来实现打开、编辑
Office ⽂档。(另,Office XP应该就已经包含这个ActiveX控件了。)
⾸先,⽤Script创建⼀个本地的对象:
openDocObj = new ActiveXObject("cuments.2"); // 为了兼
容Office XP,可以创建“cuments.1”
然后,调⽤openDocObj的相应的⽅法。⽐如打开服务器上的⼀个Office⽂档:
cument("/doc/
/documents/"); openDocObj对象会根据参数中不同的Office⽂档类型(.doc、.xls、.ppt)来打
开不同的程序(Word、Excel、PowerPoint)。ViewDocument()⽅法还有⼀个重载签名,可以让我们⼿⼯指定激活哪个程序
来打开⽂档:
cument("/doc/
/documents/",
要激活的程序的ProgID);
那么要打开Office程序在线编辑⽂件⼜如何?
cument("/doc/
/documents/");
就可以直接激活Word,在Word⾥⾯编辑⽂档,然后直接点击Word⾥⾯的保存功能,就可以将⽂件保存会服务器上了。注
意:为了让Word能将编辑后的⽂档直接保存会服务器,访问Web站点的当前上下⽂的Windows Identity必须对服务器的相应⽬
录(即“/doc/
/documents”这个虚拟⽬录所对应的服务器上的物理路径)有相应的写权限,否则保存动作会失败。编辑完成
后,EditDocument()会返回⼀个bool值,来反映编辑操作是否成功。
我们还可以通过打开服务器上的⼀个⽂档模版,来创建⼀个新的⽂档:
NewDocument("/doc/
/documents/sampleT ", "/doc/
/documents/");
就可以使⽤“/doc/
/documents/”这个模版来
创建⼀个新的⽂档,默认新⽂档的保存地点是
“/doc/
/documents/”。创建新⽂档时使⽤的程序取决于模版⽂件的类型(⽐如.dot模版会对应Word)。新⽂档的保存同样需要注意权
限问题。CreateNewDocument()⽅法同样会返回⼀个bool值来反映操作是否成功。CreateNewDocument()⽅法的第⼀个参
数,除了可以使⽤⼀个模版的地址外,还可以直接指定为希望⽤来创建新⽂档的客户端程序的ProgID。
⑦
⽤JSP下载word⽂件
<%@page import=".*"%>
<%@page import=".*"%>
<%@page import="/doc/
.*"%>
<%
String filename = "";
if (ameter("file") != null) {
filename = ameter("file");
}
tentType("application/msword");
der("Content-disposition","attachment; filename="+filename);
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(new FileInputStream(getServletContext().getRealPath("" + filename)));
bos = new BufferedOutputStream(putStream());
} finally {
if (bis != null)
();
if (bos != null)
();
}
return;
%>
⑧:⽤java⽣成word⽂档[z]
From: /doc/
/Info/
⽤java⽣成word⽂档
java
作者javasky @ 2006-06-10 14:22:04
Java代码
java读取word⽂档时,虽然⽹上介绍了很多插件poi、java2Word、jacob、itext等等,poi ⽆法读取格式(新的API估计⾏好像
还在处于研发阶段,不太稳定,做项⽬不太敢⽤);java2Word、jacob 容易报错找不到注册,⽐较诡异,我曾经在不同的机器
上试过,操作⽅法完全⼀致,有的机器不报错,有的报错,去他们论坛找⾼⼈解决也说不出原因,项⽬部署⽤它有点⽞;itxt
好像写很⽅便但是我查了好久资料没有见到过关于读的好办法。经过⼀番选择还是折中点采⽤rtf最好,毕竟rtf是开源格式,不
需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式⽂件表⾯看来和doc没啥区别,都可以⽤word 打开,各种格式
都可以设定。
----- 实现的功能:读取rtf模板内容(格式和⽂本内容),替换变化部分,形成新的rtf⽂档。
----- 实现思路:模板中固定部分⼿动输⼊,变化的部分⽤$info$表⽰,只需替换$info$即可。
1、采⽤字节的形式读取rtf模板内容
2、将可变的内容字符串转为rtf编码
3、替换原⽂中的可变部分,形成新的rtf⽂档
主要程序如下:
/**
* 将制定的字符串转换为rtf编码
*/
public String bin2hex(String bin) {
char[] digital = "ABCDEF".toCharArray();
StringBuffer sb = new StringBuffer("");
byte[] bs = es();
int bit;
for (int i = 0; i < ;i++) {
}
}
以上为核⼼代码,剩余部分就是替换,从新组装java中的e(oldstr,newstr);⽅法可以实现,在这就不贴了。源代码
部分详见附件。运⾏源代码前提:
c盘创建YQ⽬录,将附件中"模板.rtf"复制到YQ⽬录之下,运⾏⽂件即可,就会在YQ⽬录下⽣成⽂件名如:
21时15分19秒_cheney_记录.rtf 的⽂件。。。。。⽂件名是在程序中指定的呵呵。由于是由商业软件中拆分出的demo所以只
是将⾃⼰原来的写的程序分离,合并在⼀个java⽂件中,所以有的⽅法在⽰例程序中看似多余,没有必要那么⿇烦。
对于替换部分需要循环的特例程序,我不好拆分,⾥⾯很容易暴露商业软件的东西,所以就不贴了,有需要的话可以加我QQ
或者MSN,⼀起讨论呵呵。附件传了半天也没有传上去,没有办法只有这样搞了呵呵。模板⽂件附件⽆法存放,需要的直接
联系呵呵。其实直接看以下的java程序部分,就会明⽩
/**
* 以下部分是java源代码
*/
package com;
import ;
import putStream;
import iter;
import ption;
import tream;
import riter;
import DateFormat;
import ;
public class OperatorRTF {
/**
* 字符串转换为rtf编码
* @param content
* @return
*/
public String strToRtf(String content){
char[] digital = "ABCDEF".toCharArray();
StringBuffer sb = new StringBuffer("");
byte[] bs = es();
int bit;
for (int i = 0; i < ; i++) {
bit = (bs[i] & 0x0f0) >> 4;
("'");
(digital[bit]);
bit = bs[i] & 0x0f;
(digital[bit]);
* 获取⽂件路径
* @param flag
* @return
*/
public String getSavePath() {
String path = "C:YQ";
File fDirecotry = new File(path);
if (!()) {
();
}
return path;
}
/**
* 半⾓转为全⾓
*/
public String ToSBC(String input){
targetname += (current).substring(17,19) + "秒";
targetname += "_" + username +"_记录.rtf";
/* 字节形式读取模板⽂件内容,将结果转为字符串*/
String strpath = getSavePath();
String sourname = strpath+""+"模板.rtf";
String sourcecontent = "";
InputStream ins = null;
try{
ins = new FileInputStream(sourname);
byte[] b = new byte[1024];
if (ins == null) {
n("源模板⽂件不存在");
}
int bytesRead = 0;
while (true) {
String array[] = ("~");
/**
* 2008年11⽉27⽇:更新模板之后时间⽆需⾃动填充
*/
/*String nowtime = (current).substring(0,4) + "年";
nowtime += (current).substring(5,7) + "⽉";
nowtime += (current).substring(8,10) + "⽇";*/
for(int i=0;i
/*if(i==0){
targetcontent = docum eRTF(sourcecontent,nowtime,i);
}else{
targetcontent = docum eRTF(targetcontent,array[i-1],i);


发布评论