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

代码
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)}]</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

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

原文地址:https://www.cnblogs.com/evlon/p/1614496.html