公文处理方案实现之模板使用

本文介绍了一种使用VBA脚本自动化处理Word文档的方法,包括基于模板创建文档、填充指定区域的内容及格式设置等关键技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ContractedBlock.gif ExpandedBlockStart.gif 代码

   
1 < script type ="text/javascript" >
2
3   var wordApp = new ActiveXObject( " word.application " );
4 wordApp.Visible = true ;
5
6 // / <summary>
7 // / 依模板新建一个文档,合并正文内容到新建文档中并设置字体字号。
8 // / </summary>
9 // / <param name="wordApp">Word实例</param>
10 // / <param name="templatePath">Word模板全路径</param>
11 // / <param name="wordFilePath">公文正文内容文全路径</param>
12 // / <returns type="Document">返回新建Word的文档实例</returns>
13 function MergeDocument(wordApp , templatePath, bookmarkName, wordFilePath)
14 {
15 var docPreview = null ;
16
17 try
18 {
19 // 通过模板新建文档
20 docPreview = wordApp.Documents.Add(templatePath);
21
22 // 找到正文域
23 var bmWord = docPreview.Bookmarks.Item(bookmarkName);
24
25 // 得到区域
26 var desRange = bmWord.Range;
27
28 // 设置为空字串,注意不能是 ''
29 // 这一步导致域被删除
30 desRange.Text = ' ' ;
31 // 新建一个域
32 docPreview.Bookmarks.Add(bookmarkName, desRange);
33
34 // 再次得到区域
35 desRange = bmWord.Range
36
37 // 先收缩,这样导入时,不会把域删除
38 desRange.Collapse();
39
40 // 导入合并正文
41 desRange.ImportFragment(wordFilePath, true );
42
43 // 再次得到域区域
44 desRange = bmWord.Range
45
46 // 设置正文内容的格式
47 desRange.Font.Size = 16 ;
48
49 // 最后删除域
50 bmWord.Delete();
51
52
53 return docPreview;
54
55 }
56 catch (e)
57 {
58 // 关闭
59 // docPreview.Close();
60 alert(e);
61 return null ;
62 }
63
64
65 }
66
67 // / <summary>
68 // / 设置每个域的值
69 // / </summary>
70 // / <param name="docInst">Word的文档实例</param>
71 // / <param name="regionValues">域名和值的数组 [{name:"name1", value:"value1", maxWidth:8.23 (default:0)}dot.gif]</param>
72 // / <returns type="Document">返回Word的文档实例</returns>
73 function FillBookmarks(docInst, regionValues)
74 {
75 if (docInst == null || (regionValues || []).length == 0 )
76 return docInst;
77
78 // 设置每个域的值
79 for ( var i = 0 ; i < regionValues.length; ++ i)
80 {
81 var rv = regionValues[i];
82 rv.maxWidth = rv.maxWidth || 0 ;
83 try
84 {
85 if (rv.maxWidth == 0 )
86 {
87 // 不保存域,直接替换
88 docInst.Bookmarks.Item(rv.name).Range.Text = rv.value;
89 }
90 else
91 {
92 // 先设置域的值,然后设置单行的最大宽度,这样会使文字紧缩
93 var range = docInst.Bookmarks.Item(rv.name).Range;
94 if (range != null )
95 {
96 range.Text = rv.value;
97 docInst.Bookmarks.Add(rv.name, range);
98 range = docInst.Bookmarks.Item(rv.name).Range;
99 range.FitTextWidth = docInst.Application.CentimetersToPoints(rv.maxWidth);
100 docInst.Bookmarks.Item(rv.name).Delete();
101 }
102 }
103 }
104 catch (e)
105 {
106 }
107 }
108
109 }
110
111 // / <summary>
112 // / 填充附件列表
113 // / </summary>
114 // / <param name="docInst">Word的文档实例</param>
115 // / <param name="bookmarkName">Word的文档实例</param>
116 // / <param name="attachments">附件的字符串数组 ['附件1','附件2','附件3','附件4','附件5']</param>
117 // / <returns type="Document">返回Word的文档实例</returns>
118 function FillAttachments(docInst, bookmarkName, attachments)
119 {
120 if (docInst == null || bookmarkName == null || (attachments || []).length == 0 )
121 return docInst;
122
123 var range = docInst.Bookmarks.Item(bookmarkName).Range
124 range.Text = '' ;
125 for ( var i = 0 ; i < attachments.length; ++ i)
126 {
127 var value = (i == 0 ? " 附件: " : "     " ) + attachments[i] ;
128 if (i > 0 )
129 range.InsertParagraphAfter();
130 range.InsertAfter(value);
131 }
132 }
133
134 var doc = MergeDocument(wordApp, ' e:\\test\\temp.dot ' , " 正文 " , ' e:\\test\\word.doc ' );
135 FillBookmarks(doc,
136 [
137 {name: " 红头 " , value: " 中国移动集团河北分公司文件 " , maxWidth: 15.2 },
138 {name: " 标题 " , value: " 正文标题 " },
139 {name: " 文号 " , value: " 河北移动〔2009〕88号 " },
140 {name: " 主送 " , value: " 全通公司 " },
141 {name: " 封发时间 " , value: " 二○○九年九月七日 " },
142 {name: " 抄送 " , value: " 抄送单位,抄送单位,抄送单位,抄送单位,抄送单位,抄送单位,抄送单位,抄送单位,抄送单位,抄送单位,抄送单位,抄送单位,抄送单位,抄送单位 " },
143 {name: " 印发 " , value: " 中国移动集团河北分公司网络信息综合部 2009年9月7日印发 " , maxWidth: 15.6 }
144 ]);
145
146 FillAttachments(doc, " 附件 " , [ ' 附件1 ' , ' 附件2 ' , ' 附件3 ' , ' 附件4 ' , ' 附件5 ' ]);
147
148 </ script >
149
150

 

代码下载:http://files.cnblogs.com/evlon/word_test_1201.zip

转载于:https://www.cnblogs.com/evlon/archive/2009/12/01/1614496.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值