[原创]vlsp操作word的函数库
www.dimcax.com
[原创]vlsp操作word的函数库
网上只有操作
excel的函数库,却没有操作word的。参考excel的,试着写了一些基本的操作:
希望大家来完善:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
( osvar ggg olb8 olb9 olb10 olb11 olb12 tlb out msg msg1 msg2)
( *chinese*
( msg "\n 初始化微软word "
msg1 "\042初始化word错误\042"
msg2 (
"\042 警告"
"\n ===="
msg1 "\042initialization word error\042"
msg2 (
"\042 warning"
"\n ======="
(
( ( ( ggg
(
"hkey_local_machine\\software\\microsoft\\windows\\currentversion\\app paths\\winword.exe"
"path"
)
)
( ggg ( ( ggg "winword.exe")))
)
(
( osvar ( "systemroot" "windir"
"winbootdir" "systemdrive"
"username" "computername"
"homedrive" "homepath"
"programfiles"
)
( ( ( "%" osvar "%") ggg)
( ggg (
( ( osvar))
( "%" osvar "%")
ggg
)
)
)
)
( olb8 ( ( "word8.olb" "winword.exe" ggg)
)
olb9 ( ( "word9.olb" "winword.exe" ggg)
)
olb10 (
( "word10.olb" "winword.exe" ggg)
)
olb11 (
( "msword.olb" "winword.exe" ggg)
)
olb12 (
( "msword.olb" "winword.exe" ggg)
)
)
( (( ( ( ggg))
"office12"
) ;_ 结束=
( tlb olb12
"office11"
) ;_ 结束=
( tlb olb11
out "xp"
) ;_ 结束setq
)
(olb9
( tlb olb9
out "97"
) ;_ 结束setq
)
( ( out "version unknown"))
) ;_ 结束cond
( tlb
(
( ( msg out "..."))
(
:tlb-filename tlb :methods-prefix
"mswdm-"

roperties-prefix
"mswdp-" :constants-prefix "mswdc-"
)
)
)
)
(
;;(vldcl-msgbox "x" msg1 msg2)
;;(nbtf_getok ( "关于-"msg1 "[网蜂工具箱]")msg2 "")
( ( "关于-"msg1 "[网蜂工具箱]")msg2 ""))
()
)
)
)
)
mswdc-wd100words
)
;|
word application session progress function
函数名 (nbtf-vldoc-app-new showexcelflag)
功能 打开一个新word进程并新建一个文档.
参数 boole t 显示, nil 隐藏
返回值 true vlobj word进程的vla-object对象
fail boole nil
示例:
( *wordapp* (nbtf-vldoc-app-new t)) #<vla-object _application 001db27c>
|;
( nbtf-vldoc-app-new (unhide / rtn)
( (nbtf-vldoc-app-init)
(
( *chinese*
( "\n 新建微软word工作表...")
( "\n creating new word document file...")
)
( ( rtn ( "word.application"))
(
(
( rtn 'documents)
'add
)
( unhide
(vla-put-visible rtn 1)
(vla-put-visible rtn 0)
)
)
)
)
)
rtn
)
;|
功能:打开word文件
函数名 (nbtf-vldoc-app-open docfilename showwordflag)
功能 新建(查找)word进程并打开指定文档..
参数 str doc文档名称(全路径), 扩展名".doc" 可选.
boole t 显示, nil 隐藏
返回值 true vlobj word进程vla-object对象
fail boole nil
示例:
( *wordapp* (nbtf-vldoc-app-open "c:/test.doc" t)) #<vla-object _application 001efd2c>
|;
;;;打开word文件
( nbtf-vldoc-app-open
(docfile unhide / rtn)
( docfile ( docfile))
( ( ( docfile "*.doc"))
( docfile ( docfile ".doc"))
)
( ( ( docfile)
( rtn ( "word.application"))
)
(
(
( rtn 'documents)
'open
docfile
)
( unhide
(vla-put-visible rtn 1)
(vla-put-visible rtn 0)
)
)
)
rtn
)
;|
word application session progress function
函数名 (nbtf-vldoc-app-save wordsessionvla-object)
功能 保存当前文档.
参数 vlobj word程序进存的vla-object对象
返回 true boole t
fail boole nil
示例:
(nbtf-vldoc-app-save *wordapp*) t
|;
( nbtf-vldoc-app-save (wordapp)
( (
( wordapp "activedocument")
"save"
)
:vlax-true
)
)
;|
word application session progress function
函数名 (nbtf-vldoc-app-saveas wordsessionvla-object savedfilename)
功能 另存当前文档.
参数 vlobj word进程vla-object对象
str 保存doc文件名(全路径)
nil 缺省文件名"doc.doc"保存在当前图形目录.
返回值 true string 保存doc文件名(全路径)
fail boole nil
示例:
(nbtf-vldoc-app-saveas *wordapp* nil) "c:/temp-folder/doc.doc"
(nbtf-vldoc-app-saveas *wordapp* "c:/temp-folder/doc.doc") "c:/temp-folder/doc.doc"
(nbtf-vldoc-app-saveas *wordapp* nil) nil
|;
( nbtf-vldoc-app-saveas (wdapp filename / rtn)
( ( filename)
( filename ( ( "dwgprefix") "doc.doc"))
)
( ( ( ( filename ( filename)) "*`.doc"))
( filename ( filename ".doc"))
)
( ( filename)
( ( filename))
)
(
( wdapp "activedocument")
"saveas"
filename
mswd-wdformatdocument
:vlax-false
"" ;_密码.
:vlax-true
""
:vlax-false
:vlax-false
:vlax-false
:vlax-false
:vlax-false
)
( filename)
)
;|
word application session progress function
函数名 (nbtf-vldoc-app-quit wordsessionvla-object savedflag)
功能 退出word并释放内存.
参数 vlobj word进程vla-object对象
boole 是否保存当前文档, t 保存, nil 不保存
返回值 true boole nil
fail boole nil
示例:
(nbtf-vldoc-app-quit *wordapp* nil) nil
|;
( nbtf-vldoc-app-quit (wdapp saveyn)
( saveyn
(
( wdapp "activedocument")
'close
)
(
( wdapp "activedocument")
'close
:vlax-false
)
)
( wdapp 'quit)
( wdapp)
( wdapp nil)
()
)
;|
word application session progress function
函数名 (nbtf-vldoc-app-kill)
功能 关闭word.
参数 none 不保存
返回值 true boole nil
fail boole nil
示例:
(nbtf-vldoc-app-kill t) nil
|;
( nbtf-vldoc-app-kill (saveyn / exlobj)
( ( wdapp ( "word.application"))
(nbtf-vldoc-app-quit wdapp saveyn)
)
)
大家来完善
d
就一个
人挡杀人,佛挡杀佛
d
继续:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51;|
获取docs集id
|;
( nbtf-vldoc-get-docs ()
( *wordapp-docs*(vla-get-documents *wordapp*))
) ;_ 结束defun
;|
获取当前docid
|;
( nbtf-vldoc-get-doc()
( *wordapp-doc*( *wordapp* "activedocument"))
)
;;; 获取文档的 paragraphs(进行格式设置)
( nbtf-vldoc-get-paragraphs (doc)
((null doc)( doc(nbtf-vldoc-get-doc)))
(mswdp-get-paragraphs doc)
) ;_ 结束defun
(defun nbtf-vldoc-add-text
(range text / stylename texth bold underline obj)
;; 获取文档的 paragraphs(进行格式设置)
( (( ( ( text) 'list)
( stylename ( ( 7 text)) ;_字体
texth ( ( 40 text)) ;_字高
bold ( ( 2 text)) ;_加粗.
underline ( ( 3 text));_下线
text ( ( 1 text)) ;_文字
) ;_ 结束setq
( text)
) ;_ 结束and
)
((
( obj
(
'mswdm-insertafter
(
range
text
) ;_ 结束list
) ;_ 结束vl-catch-all-apply
) ;_ 结束setq
) ;_ 结束vl-catch-all-error-p
( ( obj))
nil
)
(
( bold (mswdp-put-bold range 1)) ;_粗体.
( texth (mswdp-put-size(mswdp-get-font range )texth)) ;_字高.
( underline(mswdp-put-underline range mswdc-wdunderlinesingle)) ;下划线
)
) ;_ 结束cond
) ;_ 结束defun
示例:
( c:test ( paragraphs pg font range)
( *wordapp* (nbtf-vldoc-app-new t))
( paragraphs (nbtf-vldoc-get-paragraphs nil))
( pg (mswdp-get-last paragraphs))
( range (mswdp-get-range pg))
(nbtf-vldoc-add-text range ((cons 1 "写了一个文本\n") '(40 . 24)))
) ;_ 结束defun
d
呵呵 太复杂了 就像lisp操作excel一样 很复杂 还是用vc好了
d
个人认为如果要和别的程序进行嵌接最好用vc,方便。
用lisp进行操作,证明楼主能力相当的强。
谢楼主分享。
d
netbee楼主,你的代码很好,支持了,继续努力!