java 实现保存Word文档中指定位置的数据,又保存整篇文档

1:需求

用户在线编辑完word 文档后希望保存整篇文档, 同时把保存文档中指定位置的数据

2:方案

用 pageoffice  实现既保存Word文档中指定位置的数据,又保存整篇文档

4:核心思想及代码

(1)既然要保存数据,那么就要用文档的提交模式打开文档

	//打开Word文档,当需要同时保存数据和保存文档时,OpenModeType必须是docSubmitForm模式。
	poCtrl.webOpen("doc/test.doc", OpenModeType.docSubmitForm, "张佚名");

(2)必须设置文档的文件保存页面和数据保存页面

	//设置保存数据的页面
	poCtrl.setSaveDataPage("SaveData.jsp");
    //设置保存文档的页面
	poCtrl.setSaveFilePage("SaveFile.jsp");

这里详细描述一下SaveDataPage和SaveFilePage的区别及结合使用

SaveFilePage:指定的页面可接受二进制文件流、Form域,直接保存修改后的文件。
SaveDataPage:指定的页面可接收页面提交的Word数据区域、Excel表格数据、Form域。

SaveFilePage:指定的页面只能创建FileServer对象。
SaveDataPage:指定的页面只能创建PageOffice.ExcelReader或PageOffice.WordReader命名空间下的对象。

SaveFilePage的使用:只需要保存修改后的文档,而不需要提取文档内容时。
SaveDataPage的使用:需要提交文档内容或用户输入的文档内容时。

5:具体的实现代码

(1)word 模板 (添加指定的书签)

d09de95ecc92f1c146c3edabeca6b341d25.jpg

2: 提交模式打开文档,设置文件保存页面及数据保存页面

	PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
	//设置服务器页面
	poCtrl.setServerPage(request.getContextPath()+"/poserver.zz");
	WordDocument wordDoc = new WordDocument();
	//打开数据区域,openDataRegion方法的参数代表Word文档中的书签名称
	DataRegion dataRegion1 = wordDoc.openDataRegion("PO_userName");
	//设置DataRegion的可编辑性
	dataRegion1.setEditing(true);
	DataRegion dataRegion2 = wordDoc.openDataRegion("PO_deptName");
        dataRegion2.setEditing(true);
	poCtrl.setWriter(wordDoc);

	//添加自定义按钮
	poCtrl.addCustomToolButton("保存", "Save", 1);
	//设置保存数据的页面
	poCtrl.setSaveDataPage("SaveData.jsp");
    //设置保存文档的页面
	poCtrl.setSaveFilePage("SaveFile.jsp");
	//打开Word文档,当需要同时保存数据和保存文档时,OpenModeType必须是docSubmitForm模式。
	poCtrl.webOpen("doc/test.doc", OpenModeType.docSubmitForm, "张佚名");

(2)保存数据的页面

WordDocument doc = new WordDocument(request, response);
//获取提交的数值
String dataUserName = doc.openDataRegion("PO_userName").getValue();
String dataDeptName = doc.openDataRegion("PO_deptName").getValue();
System.out.println("====="+dataUserName);
System.out.println("====="+dataDeptName);
doc.close();

(3)保存文件的页面

FileSaver fs=new FileSaver(request,response);
fs.saveToFile(request.getSession().getServletContext().getRealPath("SaveDataAndFile/doc/")+"/"+fs.getFileName());
fs.close();

5:实现效果

在线编辑文档,

1b9f30b6ba8a6c50a2cc26f1e140ca908d6.jpg

获取数据打印的值

d970bb566686d6970b62c4064add23a503f.jpg

6:特殊情况下.需要只保存文档或者只保存数据

举个简单的例子. 比如 某个判断 条件是 "1" 的情况下,只保存文档.条件是2 的情况下 ,只保存数据

方案: 在页面中设置一个form域.保存的时候获取form域的值.根据form 域的值判断保存文件还是保存数据

具体代码:

<form id="form1">
	<span style="color: Red; font-size: 14px;">请输入保存条件,条件是 "1" 的情况下,只保存文档.条件是2 的情况下 ,只保存数据</span>
	<br />
	<span style="color: Red; font-size: 14px;">请输入保存条件:</span>
	<input id="txtCondition" name="txtCondition" type="text" />
	<br />
</form>

页面效果

9356f83ad46535d0cfbae2e5f696710cf25.jpg

保存的实现代码

核心代码:  获取 PageOfficeCtrl 控件所在页面指定的Form控件的值。

52f678f0f22d942e66d3d02d90cd6d6f357.jpg

 

具体实现代码

保存数据页面

	WordDocument doc = new WordDocument(request, response);
	//获取提交的数值
	String dataUserName = doc.openDataRegion("PO_userName").getValue();
	String dataDeptName = doc.openDataRegion("PO_deptName").getValue();
	String condition= doc.getFormField("txtCondition");
//条件是2的情况下保存数据
	if("2".equals(condition)){
		//保存数据的代码
		System.out.println("====="+dataUserName);
        System.out.println("====="+dataDeptName);
	}
	  doc.close();

保存文档页面

FileSaver fs=new FileSaver(request,response);
String condition= fs.getFormField("txtCondition");
//条件是 1 的情况保存文档
if("1".equals(condition)){
//保存文件
fs.saveToFile(request.getSession().getServletContext().getRealPath("SaveDataAndFile/doc/")+"/"+fs.getFileName());
}
fs.close();

7: 更多详细的代码 您可以下载示例参考一下 http://www.zhuozhengsoft.com/dowm/?v=4

cf8f717b6544298982600d989b0da1eb92e.jpg

转载于:https://my.oschina.net/u/3507515/blog/2963940

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值