做网页编辑的朋友经常会遇到要把word文档(.doc)批量转换为html超文本的情况。笔者便利用word97的vba语言编写了一个word宏,来实现将doc文档批量转换成html超文本的工作。
1.?准备工作:先建立子目录doc2htm,在该目录下再创建doc和htm两个子目录。把要转换的doc文档复制到doc子目录下。
2.?录制宏。启动word97录制一个新宏,取名称为doc2htm,方法是:选择选单项上的“工具…宏…录制新宏…doc2htm”启动宏录制器,然后打开一个要编辑的文档,按f12键显示“另存为”对话框,此时应选择文件类型为“html超文本”,点“确定”存盘后便可以停止录制宏。
3.?编辑宏代码,选择选单项“工具…宏…宏”(或按alt+f8)调出宏窗口,选中“doc2htm”后点击“编辑”按钮,此时word启动vba编辑器,我们便可以修改doc2htm了。这里要用vba编程解决3个问题:
(1) 文件名称的获得。
首先用一个while...wend循环获取c:\doc2htm\doc目录下的word文档的数目,然后在一个for ... next 循环中利用dir$()函数取得全部word文档名称并赋值给list—$(),这样便可以逐次打开每一个文档,另存为html超文本,直至将全部的doc文档转换完毕。
(2) sendkeys语句的使用。
由于office97自带的html转换器在宏的运行过程中不断显示对话框,提醒用户选择gb chinese语言代码(默认的),使得循环无法连续进行,而在vba语言中又没有相应的语句控制该转换器,因此笔者在这里使用了sendkeys语句。这样程序运行过程中便无需用户干预了。
(3) 精简宏代码,删除不必要的属性。
在录制doc2htm宏时,word会自动记录你的操作。例如,下面语句的作用是打开一个word文档。
documents.open filename:=list—$(i), confirmconversions:=false,
readonly:=false, addtorecentfiles:=false, passworddocument:=″ ″,
passwordtemplate:=″ ″, revert:=false, writepassworddocument:=″ ″,
writepasswordtemplate:=″ ″, format:=wdopenformatauto
其中多数属性是用不到的,经删改后如下:
documents.open filename:=list—$(i)
读者可参考vba帮助文件,根据实际需要来自行修改,此处不再赘述。
附宏代码如下:
sub doc2htm()
dim temp$
dim count—
dim i
temp$ = dir$(″c:\my documents\doc2htm\doc\*.doc″)
count— = 0
while temp$ 〈〉 ″ ″
count— = count— + 1
temp$ = dir$()
wend
if count— 〉 0 then
redim list—$(count—)
list—$(0) = dir$(″c:\my documents\doc2htm\doc\*.doc″)
for i = 1 to count—
list—$(i) = dir$()
next i
wordbasic.sortarray list—$()
for i = 1 to count—
redim list—$(i)
clength = len(list—$(i))
list—$(i) = left(list—$(i), clength - 4)
documents.open filename:=″c:\my documents\doc2htm\doc\″ + list—$(i)
sendkeys ″{enter}″
activedocument.saveas filename:=″c:\my documents\doc2htm\htm\″ + list—$(i), fileformat:=100
activedocument.close
next i
msgbox ″全部文档转换完毕 !″
else
msgbox ″当前目录下没有doc文档 !″
end if
end sub
使用doc2htm宏时应注意以下几点:
(1)word文档转换成html超文本后会发生一些变化。例如,word下设置的一些格式如页面边框、页眉页脚、脚注尾注、突出显示等都会丢失;图片和剪贴画等图形以及公式、图表和其他ole对象这些项目会转换为gif格式;域结果会转换成文字,但不会自动更新;动态文字保留下来,但效果会丢失等
(2)若使用doc2htm时只是把word文档又另存成了doc格式,请查看安装word97时,是否已选中web工具,或者宏程序中activedocument.saveas语句的fileformat属性是否等于100(html格式)。
(3)在宏的运行过程中,不要切换窗口进行其它的操作。由于sendkeys语句只对当前的活动窗口有效,因此应该等到宏程序结束后再做别的工作。 |