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的⽅法,肯定是可以的,我以前做过,Word20032007都⽀持,我估计

是你同事的IE浏览器⾥⾯限制了ActiveX运⾏

2、在后端⽣成WORD,很多开源框架都⽀持HTML->WORD,你找⼀个就可以了。

:⽤JS⽣成WORD

最近项⽬中碰到了要⾃动⽣成WORD的问题,开始也去找了些开源的东西,⽐如JACOB,但是它存在⼀些缺陷。例如它要求

JDK1.4以下,并且还要在设置PATH,⽐较⿇烦,所以最后决定通过客户端的JS来实现需求。

下⾯是个简单的例⼦:

单元格1单元格2单元格3单元格4

单元格合并

test

导出页⾯到Word

如何在Web页⾯上直接打开、编辑、创建Office ⽂档

有朋友询问如何在Web页⾯上做到像SharePoint中的效果⼀样,能直接激活客户端的Word来打开.doc⽂件,⽽不是类似直接

点击.doc⽂档链接时WordIE 中被打开那样。想想这个问题应该很多⼈都会感兴趣,所以⼲脆写⼀篇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)来打

开不同的程序(WordExcelPowerPoint)。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⽂档时,虽然⽹上介绍了很多插件poijava2Wordjacobitext等等,poi ⽆法读取格式(新的API估计⾏好像

还在处于研发阶段,不太稳定,做项⽬不太敢⽤)java2Wordjacob 容易报错找不到注册,⽐较诡异,我曾经在不同的机器

上试过,操作⽅法完全⼀致,有的机器不报错,有的报错,去他们论坛找⾼⼈解决也说不出原因,项⽬部署⽤它有点⽞;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⽬录下⽣成⽂件名如:

211519_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[] = ("~");

/**

* 20081127⽇:更新模板之后时间⽆需⾃动填充

*/

/*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);