- 浏览: 2542002 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
nation:
你好,在部署Mesos+Spark的运行环境时,出现一个现象, ...
Spark(4)Deal with Mesos -
sillycat:
AMAZON Relatedhttps://www.godad ...
AMAZON API Gateway(2)Client Side SSL with NGINX -
sillycat:
sudo usermod -aG docker ec2-use ...
Docker and VirtualBox(1)Set up Shared Disk for Virtual Box -
sillycat:
Every Half an Hour30 * * * * /u ...
Build Home NAS(3)Data Redundancy -
sillycat:
3 List the Cron Job I Have>c ...
Build Home NAS(3)Data Redundancy
照Word模版导入导出数据的设计
word本身不是很会用。呵呵。最近公司需要做一个按照合同模版导入导出的功能模块。
想想word本身的内容,全部读取,可以用POI等等,但是效果也完美。我们其实需要的是整个word文档的特定区域的数据,每次修改也是修改特定区域的数据,所以没有必要每次拿着一个二进制文件.doc传来传去,然后server端还要解析。
项目中现成已经引入的dsoframer再加上word本身的“文字型窗体域”,我想可以基本完成这个特定的需求场景了。
1 . 编辑word模版文件
首先参考word的使用文章如下:
http://www.excelhome.cn/Article/ShowArticle.asp?ArticleID=502
我的word是2007,所以选择菜单“视图”------鼠标放在工具栏上右键-------“自定义快速访问工具栏”---------“自定义”里面找到
窗体域选项“窗口”“控件”“旧式工具”这些都加上。
在要加入文本域的地方,点击“旧式窗体”------“文本域”------双击打开“文字型窗体域选项”--------
书签上填写我们需要的key,比如userWorkgroup,userName,等等
默认文字上输入【 部门 】,【 员工 】等默认显示的值。
2.dsoframer的程序操作
主要是js调用dsoframer的操作,首先HTML上要有这个控件:
<object classid="clsid:00460182-9E5E-11d5-B7C8-B8269041DD57"
codebase="./components/dsoframer/sccl_dsoframer.cab#version=1,4"
id="oframe"
width="100%"
height="500">
<param name="BorderStyle" value="1">
<param name="TitlebarColor" value="52479">
<param name="TitlebarTextColor" value="0">
<param name="Menubar" value="0">
</object>
第二,我主要完成以下四个步骤的示例,
1.打开模板word,
2.向word中固定区域写入数据,
3.在在线打开的word中对内容进行修改,注意这里不能将文本编辑区删除,只能改变里面的内容。通过dsoframer从word中再得到修改后的内容
4.将dsoframer打开的,修改后的word文件,导出成为一个doc文件,提示用户选择路径导出。
以上四个步骤对应的JS操作如下:
function OpenWebDoc(){
//open the document template
oframe.open("./test/template_leave.doc", false);
//set the title of the doc
oframe.Caption ="请u20551 条u27169 版doc";
}
function WriteWord(){
var fields = oframe.ActiveDocument.FormFields;
fields.Item('reason').Result = ' 事u20214 ';
fields.Item('userWorkgroup').Result = ' 研u21457 中u24515 ';
fields.Item('leaveDate').Result = ' 2010-06-02 ';
fields.Item('leaveDay').Result = ' 3 ';
fields.Item('userName').Result = ' Carl ';
}
function SaveWord(){
var postjsondata = '';
var doc = oframe.ActiveDocument;
doc.Save();
var fields = doc.FormFields;
for(var i = fields.count - 1;i >= 0 ; i--){
var item = fields.Item(i+1);
//alert(item.Name + "=" + item.Result);
postjsondata=postjsondata + ",'" + item.Name + "':'" + item.Result + "'";
}
alert("{" + postjsondata + "}");
}
function SaveDocToLocal() {
//save the document to local disk
oframe.showdialog(3);
}
3.关于json和JAVA的转化
我一直都比较喜欢用json-lib,因为简单嘛。后来看到了别人说效率比较低。所以后来改为用jackson了。没有关系。用了个简单的jsonUtil来处理,以后要改也容易。
用到的包如下:
<!-- json -->
<dependency org="jackson" name="jackson-core-asl" rev="1.4.1" />
<dependency org="jackson" name="jackson-mapper-asl" rev="1.4.1" />
<dependency org="jackson" name="jackson-xc" rev="1.4.1" />
<dependency org="jackson" name="jackson-jaxrs" rev="1.4.1" />
JsonUtil里面核心如下(没有仔细看过,勉强能用):
/**
* trans json use jackson-1.4.1
*
* @param item
* @return
*/
public static String getJacksonJsonString(Object item) {
JsonFactory jf = new JsonFactory();
try {
StringWriter sw = new StringWriter();
JsonGenerator gen = jf.createJsonGenerator(sw);
ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
mapper.getSerializationConfig().setDateFormat(formatter);
mapper.writeValue(gen, item);
gen.flush();
return sw.toString();
} catch (Exception e) {
logger.error("jackson error: ", e);
return "";
}
}
/**
* trans json string to java object
* @param json
* @param o
* @return
*/
public static Object getObjectfromJacksonJson(String json,Object o){
Object obj = null;
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
try {
obj = mapper.readValue(json, o.getClass());
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return obj;
}
基本上能满足这个需求了,代码都放在easydsoframer里面,里面还杂七杂八的放了一些POI,ITEXT,PDFBOX等的测试。
word本身不是很会用。呵呵。最近公司需要做一个按照合同模版导入导出的功能模块。
想想word本身的内容,全部读取,可以用POI等等,但是效果也完美。我们其实需要的是整个word文档的特定区域的数据,每次修改也是修改特定区域的数据,所以没有必要每次拿着一个二进制文件.doc传来传去,然后server端还要解析。
项目中现成已经引入的dsoframer再加上word本身的“文字型窗体域”,我想可以基本完成这个特定的需求场景了。
1 . 编辑word模版文件
首先参考word的使用文章如下:
http://www.excelhome.cn/Article/ShowArticle.asp?ArticleID=502
我的word是2007,所以选择菜单“视图”------鼠标放在工具栏上右键-------“自定义快速访问工具栏”---------“自定义”里面找到
窗体域选项“窗口”“控件”“旧式工具”这些都加上。
在要加入文本域的地方,点击“旧式窗体”------“文本域”------双击打开“文字型窗体域选项”--------
书签上填写我们需要的key,比如userWorkgroup,userName,等等
默认文字上输入【 部门 】,【 员工 】等默认显示的值。
2.dsoframer的程序操作
主要是js调用dsoframer的操作,首先HTML上要有这个控件:
<object classid="clsid:00460182-9E5E-11d5-B7C8-B8269041DD57"
codebase="./components/dsoframer/sccl_dsoframer.cab#version=1,4"
id="oframe"
width="100%"
height="500">
<param name="BorderStyle" value="1">
<param name="TitlebarColor" value="52479">
<param name="TitlebarTextColor" value="0">
<param name="Menubar" value="0">
</object>
第二,我主要完成以下四个步骤的示例,
1.打开模板word,
2.向word中固定区域写入数据,
3.在在线打开的word中对内容进行修改,注意这里不能将文本编辑区删除,只能改变里面的内容。通过dsoframer从word中再得到修改后的内容
4.将dsoframer打开的,修改后的word文件,导出成为一个doc文件,提示用户选择路径导出。
以上四个步骤对应的JS操作如下:
function OpenWebDoc(){
//open the document template
oframe.open("./test/template_leave.doc", false);
//set the title of the doc
oframe.Caption ="请u20551 条u27169 版doc";
}
function WriteWord(){
var fields = oframe.ActiveDocument.FormFields;
fields.Item('reason').Result = ' 事u20214 ';
fields.Item('userWorkgroup').Result = ' 研u21457 中u24515 ';
fields.Item('leaveDate').Result = ' 2010-06-02 ';
fields.Item('leaveDay').Result = ' 3 ';
fields.Item('userName').Result = ' Carl ';
}
function SaveWord(){
var postjsondata = '';
var doc = oframe.ActiveDocument;
doc.Save();
var fields = doc.FormFields;
for(var i = fields.count - 1;i >= 0 ; i--){
var item = fields.Item(i+1);
//alert(item.Name + "=" + item.Result);
postjsondata=postjsondata + ",'" + item.Name + "':'" + item.Result + "'";
}
alert("{" + postjsondata + "}");
}
function SaveDocToLocal() {
//save the document to local disk
oframe.showdialog(3);
}
3.关于json和JAVA的转化
我一直都比较喜欢用json-lib,因为简单嘛。后来看到了别人说效率比较低。所以后来改为用jackson了。没有关系。用了个简单的jsonUtil来处理,以后要改也容易。
用到的包如下:
<!-- json -->
<dependency org="jackson" name="jackson-core-asl" rev="1.4.1" />
<dependency org="jackson" name="jackson-mapper-asl" rev="1.4.1" />
<dependency org="jackson" name="jackson-xc" rev="1.4.1" />
<dependency org="jackson" name="jackson-jaxrs" rev="1.4.1" />
JsonUtil里面核心如下(没有仔细看过,勉强能用):
/**
* trans json use jackson-1.4.1
*
* @param item
* @return
*/
public static String getJacksonJsonString(Object item) {
JsonFactory jf = new JsonFactory();
try {
StringWriter sw = new StringWriter();
JsonGenerator gen = jf.createJsonGenerator(sw);
ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
mapper.getSerializationConfig().setDateFormat(formatter);
mapper.writeValue(gen, item);
gen.flush();
return sw.toString();
} catch (Exception e) {
logger.error("jackson error: ", e);
return "";
}
}
/**
* trans json string to java object
* @param json
* @param o
* @return
*/
public static Object getObjectfromJacksonJson(String json,Object o){
Object obj = null;
ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
try {
obj = mapper.readValue(json, o.getClass());
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return obj;
}
基本上能满足这个需求了,代码都放在easydsoframer里面,里面还杂七杂八的放了一些POI,ITEXT,PDFBOX等的测试。
发表评论
-
MongoDB 2019(3)Security and Auth
2019-11-16 06:48 236MongoDB 2019(3)Security and Aut ... -
Memory Leak in NodeJS
2018-12-20 06:26 727Memory Leak in NodeJS I have d ... -
Remote Desktop Client
2018-12-07 13:19 1187Remote Desktop Client There is ... -
MetaBase UI Console(2)Docker on MySQL
2018-11-29 06:58 940MetaBase UI Console(2)Docker on ... -
AWS Lambda and Serverless Timeout
2018-09-20 01:20 625AWS Lambda and Serverless Timeo ... -
2018 WebSocket(1)Introduction
2018-03-20 01:22 11042018 WebSocket(1)Introduction ... -
2018 TypeScript Update(3)Introduction Basic Grammar
2018-03-08 03:08 6002018 TypeScript Update(3)Introd ... -
2018 TypeScript Update(2)Introduction Basic Grammar - Classes and Functions
2018-03-06 05:32 5512018 TypeScript Update(2)Introd ... -
2018 TypeScript Update(1)Introduction Basic Grammar - Types and Interface
2018-03-03 01:15 6002018 TypeScript Update(1)Introd ... -
Charts and Console(6)Paging
2018-03-01 00:12 577Charts and Console(6)Paging Th ... -
Vue.JS(3)Google Login
2018-02-14 04:53 1303Vue.JS(3)Google Login I just p ... -
Vue.JS(2)Monitor Water Console - ChartJS and Axios
2018-02-14 03:17 719Vue.JS(2)Monitor Water Console ... -
Vue.JS(1)Introduction and Basic Demo
2018-02-08 06:47 604Vue.JS(1)Introduction and Basic ... -
Charts and Console(5)Validation Form
2017-10-03 05:12 804Charts and Console(5)Validation ... -
Charts and Console(4)Display and Enhancement
2017-09-20 05:39 631Charts and Console(4)Display an ... -
Charts and Console(3)Auth and Login
2017-09-13 03:45 659Charts and Console(3)Auth and L ... -
Charts and Console(2)Login and Proxy
2017-08-31 05:39 877Charts and Console(2)Login and ... -
Charts and Console(1)UI Console and RESTful Client
2017-08-29 11:02 766Charts and Console(1)UI Console ... -
Blog Project(2)Express Backend API - istanbul - mocha - bunyan
2017-06-09 00:05 473Blog Project(2)Express Backend ... -
ReactJS(5)Composition vs Inheritance
2017-06-06 05:55 1109ReactJS(5)Composition vs Inheri ...
相关推荐
3. **导入与导出模板**:PDM系统通常有专门的模板管理模块,用户可以将本地创建的Word模板上传到系统,也可以将系统中的模板导出到本地。导出的过程可能涉及权限管理,只有具有相应权限的用户才能进行。 4. **使用...
EasyPoi是一款Excel和Word简易工具类,easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板语言(熟悉...
【基于LabVIEW与Excel之间的数据导入导出】 在测试与测量领域,数据处理是一项关键任务,而LabVIEW(Laboratory Virtual Instrument Engineering Workbench)作为一款强大的图形化编程环境,经常被用于开发复杂的...
在C#编程环境中,利用Aspose.Words库可以方便地实现根据预设模板导出Word文档的功能。Aspose.Words是一款强大的文档处理组件,它允许开发者在不依赖Microsoft Office的情况下,进行Word文档的创建、编辑、格式化以及...
2. 自定义模板:允许使用自定义的Excel或Word模板,填充数据后生成报告。 3. 高级样式:提供更丰富的样式控制,如条件格式化。 4. 数据验证:支持Excel的数据有效性验证。 5. 易于集成:JeasyPoi的简单API使得集成到...
在IT行业中,尤其是在文档处理和自动化领域,"导出word文档源码和模板"是一个重要的技术环节。Word模板是预设格式和布局的文件,可以作为基础,快速生成符合特定风格和规范的新文档。这对于企业内部文档标准化、批量...
6. **ASP.NET Core MVC和API**:本项目可能结合了MVC模式和API设计,前者用于处理前端请求和视图渲染,后者提供数据导出和导入的服务。控制器可以调用业务逻辑层的方法,完成数据处理,并返回视图或JSON响应。 7. *...
### Java操作Word模板实现动态数据输出 #### 一、引言 随着信息技术的发展,特别是数据库技术和网络技术的进步,许多企事业单位对于内部数据管理和外部信息发布的方式也在不断演变。当前,大多数单位倾向于将数据...
总之,PowerDesigner的导出Word模板功能是其强大而灵活的文档生成能力的一个体现,它让数据库设计人员可以根据具体项目需求定制报告,提高工作效率,保持团队内部的一致性和专业性。通过合理利用这一特性,我们可以...
总的来说,这个项目展示了如何在Java环境中,结合Spring Boot的便利性,利用MyBatis进行数据库操作,借助Apache POI处理Excel文件,以及Thymeleaf生成动态页面,实现数据的导入导出功能。这是一个综合性的Java Web...
综上所述,Apache POI 提供了强大的功能,使 Java 开发者能够轻松地进行 Excel 文件的导入导出以及模板处理。通过合理的工具类设计和最佳实践,我们可以高效地利用 POI 处理日常工作中与 Excel 相关的任务。
在Vue.js应用中实现导出Word功能,通常是为了让用户能够方便地下载并保存数据报告、图表或表格等信息。Echarts是一个强大的JavaScript可视化库,常用于创建各种类型的图表,如折线图、柱状图、饼图等。将Echarts图表...
综上所述,Apache POI提供了一种强大的方式来处理Excel文件,无论是导入现有的数据到模板中,还是从模板导出数据。通过详细注释的代码示例,开发者可以轻松地理解和应用这些功能,提高工作效率。
Easypoi是一个强大的Java办公组件,能够方便地处理Excel和Word文档,尤其适合于数据批量导入导出和模板生成。 首先,我们需要在项目的`pom.xml`文件中引入Easypoi的依赖。Easypoi提供了专门针对Spring Boot的...
最近因项目开发的需要,整理了一份用JAVA导出WORD文档,其部署步骤如下: 1、将jacob-1.14.3-x86.dll放在服务器的系统盘(或运行本机的系统):\WINDOWS\system32目录下。 2、将jacob-1.14.3-x86.dll放在JDK 的 bin ...
"导出word文档说明.docx"可能是用户提供的关于如何操作PowerDesigner导出数据表结构的详细步骤,或者是一份使用指南,包含了如何打开和使用这个RTP模板,以及导出过程的具体步骤。这样的文档对于新手来说非常有用,...
在Word中,图片通常以二进制数据嵌入文档,所以需要将图片转换为字节流。 3. **Word文档创建**:使用Apache POI创建一个新的Word文档对象,初始化必要的元素,如样式、字体、页面设置等。 4. **内容插入**:遍历...
标题“使用VSTO插件将excel数据和图片导出word文档”涉及到的是在Microsoft Office环境中,使用Visual Studio Tools for Office (VSTO) 插件来实现数据和图像从Excel到Word的自动化迁移。VSTO是.NET Framework的一个...
在IT行业中,尤其是在软件开发领域,常常需要将数据动态地导入到Word文档中,以便生成报告、合同或者自定义的文档。Java作为一种广泛使用的编程语言,提供了多种方式来实现这一功能。本文将深入探讨如何利用Java代码...
本示例着重讲解如何利用JavaScript技术将TinyMCE编辑器中的内容导出为Word文档,以便用户可以离线查看或进一步处理。 在TinyMCE编辑器中,内容是通过HTML代码存储的。因此,导出为Word文档的核心思路是将HTML转换为...