hagejid
副版主
帖子
405
精华
0
无忧币 2004
积分 491
阅读权限 140
|
发表于:2008-5-9 14:26
该回复被 litingking 奖励 160 点无忧币
此回复于2008-05-21 08:18被 ribut9225 评为最佳答案
估计也不难,但我这种三脚猫是最怕这种麻烦的,楼上都说了用OLE来解决DOC问题。
我的想法就是DOC的文件格式我们不熟所以就很难转换,但如果有个简单的方法转成我们熟悉的格式呢,比如HTML。
我在网上找到JAVA的代码,修改一下应该可以吧,方法也就是类似WORD的另存为。
//------------------------------------------------------------------------------
//版权所有 (C) 浪潮集团商用系统有限公司 保留所有权利
//文件名称: wordtohtml 文件版本: 1.00.00
//作 者: 郭铸 作者邮箱: [url=mailto:guozhu@langchao.com]guozhu@langchao.com[/url] 完成日期: 2004-10-20
//文件描述:
//其它描述:
//类 列 表:
// wordtohtml: 将指定目录下面所有的doc文件转化为HTML并存储在相同目录下
//修改历史:
// # 版本 修改日期 作者 修改内容
// ----------------------------------------------------------------------------
// 1 1.00.01 2004-10-14 作者姓名 修改内容描述
// ----------------------------------------------------------------------------
//------------------------------------------------------------------------------
import com.jacob.com.*;
import com.jacob.activeX.*;
import java.io.*;
//取得指定目录下面所有的doc文件名称
public class wordtohtml
{
//------------------------------------------------------------------------------
//方法原型: change(String paths)
//功能描述: 将指定目录下面所有的doc文件转化为HTML并存储在相同目录下
//输入参数: String
//输出参数: 无
//返 回 值: 无
//其它说明: 递归
//------------------------------------------------------------------------------
public static void change(String paths, String savepaths)
{
File d = new File(paths);
//取得当前文件夹下所有文件和目录的列表
File lists[] = d.listFiles();
String pathss = new String("");
//对当前目录下面所有文件进行检索
for(int i = 0; i
boolean flag = false;
try
{
app.setProperty("Visible", new Variant(false));
//设置word不可见
Object docs = app.getProperty("Documents").toDispatch();
Object doc = Dispatch.invoke(docs,"Open", Dispatch.Method, new Object[]{inFile,new Variant(false), new Variant(true)}, new int[1]).toDispatch();
//打开word文件
Dispatch.invoke(doc,"SaveAs", Dispatch.Method, new Object[]{tpFile,new Variant(8)}, new int[1]);
//作为html格式保存到临时文件
Variant f = new Variant(false);
Dispatch.call(doc, "Close", f);
flag = true;
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
app.invoke("Quit", new Variant[] {});
}
System.out.println("转化完毕!");
}
}
else
{
pathss = paths;
//进入下一级目录
pathss = pathss + lists.getName() + "\\";
//递归遍历所有目录
change(pathss, savepaths);
}
}
}
//------------------------------------------------------------------------------
//方法原型: main(String[] args)
//功能描述: main文件
//输入参数: 无
//输出参数: 无
//返 回 值: 无
//其它说明: 无
//------------------------------------------------------------------------------
public static void main(String[] args)
{
String paths = new String("D:\\Work\\2004.10.8\\test system\\test01\\word\\");
String savepaths = new String ("D:\\Work\\2004.10.8\\test system\\test01\\html\\");
change(paths, savepaths);
}
}
其中import的jar包是一个开源的东东,网上搜索即得。
Dispatch.invoke(doc,"SaveAs", Dispatch.Method, new Object[]{tpFile,new Variant(8)}, new int[1]);
修改Variant(8)},里面得参数即可将Word转化为各种类型。
关键是怎么把里边的转换的代码从JAVA转为VC的OLE。经过观察其中有些部分和下面代码类似。
一段Word编程的代码(基于OLE)
一·步骤准备(IDE: VC 60):
在ClassWizard中,点击Automaiton选项卡,再点Add Class,再点From a type library。然后会弹出一个
对话框,你找到OFFICE的文件夹,选择MSWORD.OLB。之后会列出一堆类。你依次添加_Application,Documents,
_Document,Selections。当然,你还可以根据自己的需要添加更多的类。
二.变量声明:
_Application oWordApp; //一个Word实例变量。
Documents oDocs; //一个文档集合变量。
_Document oDoc; //一个文档变量。
Selection oSel; //一个选择内容变量。
COleVariant vTrue((short)TRUE),
vFalse((short)FALSE),
vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR));//一些使用参数变量,具体意义不懂,还请高手指点
三.具体步骤:
1.oWordApp.CreateDispatch("Word.Application", NULL); //如果此调用成功,回在任务管理器中增加一个WINWORD.exe的进程。
2.oDocs=oWordApp.GetDocuments(); //获得当前进程的文档集合
oDoc=oDocs.Add(vOpt,vOpt,vOpt,vOpt); //由该集合创建一个新文档
3.oSel=oWordApp.GetSelection(); //获得当前进程的选择内容。
oSel.TypeText(“Text”); //向文档添加内容。
4.oDoc.SaveAs(COleVariant(FileName), //保存文档,以下参数会因为OFFICE版本的不同而改变
COleVariant((short)0),
vFalse, COleVariant(""), vTrue, COleVariant(""),
vFalse, vFalse, vFalse, vFalse, vFalse,vFalse, vFalse, vFalse, vFalse, vFalse);
5.释放资源
oDoc.Close(vOpt, vOpt, vOpt);
oDoc.ReleaseDispatch();
oWordApp.SetVisible(TRUE);
oDocs.ReleaseDispatch();
oWordApp.Quit(vOpt, vOpt, vOpt);
oWordApp.ReleaseDispatch();
四.总结:
1.参考资料:http://www.vckbase.com/document/viewdoc/?id=1186
2.在SaveAs的时候会出现和现有word进程相冲突的情况,具体表现为:“Word无法保存此文件,它在别处已被
打开。。。。。”现在还未找到比较好的解决方法。望高手指教。
3.如果不清楚Word编程需要使用哪些函数,可以使用Word的宏录制,来查看操作的VB代码,然后反过来去推理
以上就是我想的方法,具体实现是什么样的我就不去做了,本人很懒,呵呵~~
|
 C到底该不该学,看看这个就明白 |
|