以前看到的。希望能帮上你 var WordApp: TWordApplication; WordDoc: TWordDocument; var DocInx,FileName,CfCversions,oReadOnly,AddToRctFiles,PswDocument, PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat: OleVariant; begin DocInx:=1; oFileName := InFile; oReadOnly:=true; WordApp:= TWordApplication.Create(nil); WordApp.Visible := false; WordDoc:= TWordDocument.Create(nil); WordApp.Documents.open(FileName,CfCversions,oReadOnly,AddToRctFiles,PswDocument, PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat); WordDoc.ConnectTo(WordApp.Documents.Item(DocInx)); For i := 1 To WordDoc.Tables.Count do //第 i 个表 begin For iRow := 1 To WordDoc.Tables.Item(i).Rows.Count do for iCol:=1 to WordDoc.Tables.Item(i).Columns.Count do myCell:=WordDoc.Tables.Item(i).Cell(iRow,iCol); //取第 [iRow,iCol] 列 end; if Assigned(WordDoc) then begin WordDoc.Close; WordDoc.Disconnect; WordDoc.Destroy; WordDoc := nil; end; if Assigned(WordApp) then begin WordApp.Quit; WordApp.Disconnect; WordApp.Destroy; WordApp := nil; end;
二楼的兄弟那个代码看的我脑袋大了又大…… 我这有个简单的方法而且不比很多利用数据库什么的差。 procedure TFormd.bitbtn1click(Sender: TObject); var exename,pname:string; begin exename:=ExtractFilePath(ExpandFileName('myfile.exe'));//用于提取文件路径 pname:=exename+'\documents\'; filenametmp:=label1.Caption //文件的名称设置 filenamedoc:=(pname)+filenametmp+'.doc'; if FileExists(filenamedoc) then
begin ShellExecute(0, nil,Pchar(filenamedoc), nil, nil, SW_NORMAL); end else begin showmessage('文件不存在,请确认!'); end end
var WordApp: TWordApplication; WordDoc: TWordDocument;
var DocInx,FileName,CfCversions,oReadOnly,AddToRctFiles,PswDocument,
PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat: OleVariant;
begin
DocInx:=1;
oFileName := InFile;
oReadOnly:=true; WordApp:= TWordApplication.Create(nil);
WordApp.Visible := false;
WordDoc:= TWordDocument.Create(nil);
WordApp.Documents.open(FileName,CfCversions,oReadOnly,AddToRctFiles,PswDocument,
PswTemplate,oRevert,WPswDocument,WPswTemplate,oFormat);
WordDoc.ConnectTo(WordApp.Documents.Item(DocInx)); For i := 1 To WordDoc.Tables.Count do //第 i 个表
begin
For iRow := 1 To WordDoc.Tables.Item(i).Rows.Count do
for iCol:=1 to WordDoc.Tables.Item(i).Columns.Count do
myCell:=WordDoc.Tables.Item(i).Cell(iRow,iCol); //取第 [iRow,iCol] 列
end; if Assigned(WordDoc) then
begin
WordDoc.Close;
WordDoc.Disconnect;
WordDoc.Destroy;
WordDoc := nil;
end; if Assigned(WordApp) then
begin
WordApp.Quit;
WordApp.Disconnect;
WordApp.Destroy;
WordApp := nil;
end;
end;
================================================================================= Delphi和Word之间的编程
来自:yzhshi, 时间:2001-11-18 17:52:00, ID:737517一、VBA代码含义Microsoft Word是一个集成化环境,是美国微软公司的字处理系统,但是它决不仅仅是一个字处理系统,它集成了Microsoft Visual Basic,可以通过编程来实现对Word功能的扩展。Microsoft Visual Basic在word中的代码即Word的宏,通过编写Word宏,可实现一些文档处理的自动化,如实现文档的自动备份、存盘等,可扩展Word文档的功能,因此,能够充分利用Word的特性,甚至使Word成为自己软件的一部分。Word的宏既有有利的一部分,因为它能够帮助我们实现文档的自动化,但是Word的宏也不是纯粹的有利,有时它可能危害我们的文档、计算机系统甚至网络,从最开始的Taiwan NO1宏病毒到现在的Melissa宏病毒,从最开始的简单的提示,耗尽系统资源到现在的乱发电子邮件,将个人的信息发送到网络上,甚至向硬盘的Autoexec.bat(自动批处理文件)中添加Deltree C: -y,破坏整个Windows系统。二、Word中内嵌的Com技术可以说Word是对Com技术支持最好的软件,这样说似乎是太极端了一点,但是Word提供的强大的编程接口技术却能够是我们通过程序控制Word的任何一部分。无论是文件的打开、存盘、打印还是文档中表格的自动绘制。通过编程软件,可以灵活的操纵word,这里只以Borland Delphi为例,进行详细描述:1、 在Delphi中调用Word软件/文件的方法在Word中调用Word软件,归纳起来有三种方法:。通过Delphi的控件TOleContainer 将Word嵌入a.使用Delphi提供的Servers控件调用Word,使用Word的属性b.通过真正的Com技术,将Office软件目录中文件MSWORD9.OLB中的类库全部导入Delphi中,利用Com技术编程c.使用CreateOleObject将启动Word,然后以Ole方式对Word进行控制。2、 对几种方法的难易程度的判别a.通过Delphi的控件TOleContainer 将Word嵌入这是最简单的Ole嵌入,能够直接将Word文档调用,只需要使用ToleContainer.Run就可以将Word文档直接启动。且这样启动的Word文档与Delphi程序是一个整体(从界面上看),但是它存在不可克服的缺点,即不能通过Delphi控制Word文档,也就不能实现将灵活操纵Word的目的。b.使用Delphi提供的Servers控件调用Word,使用Word的属性使用Delphi的Servers控件来操纵Word,在编程时Delphi能够实现代码提示,总体上看能够较好的实现Delphi对Word的控制,但是还有一些Word的功能不能在Delphi中调用(比如自己编写的VBA宏代码)。且实现功能时本来在VBA代码中可选则参数在Delphi调用的时候必须添加,否则,连编译都不能通过。本方式启动的Word与Delphi程序分属两个窗体。此办法仅能作为一个参考。c.通过真正的Com技术,将Office软件目录中文件MSWORD9.OLB中的类库全部导入Delphi中,利用Com技术编程利用真正的Com技术,将MsWord9.OLD文件类库导入,然后利用Com技术进行使用。整体上类似使用Delphi的Servers控件,稍微比Servers控件麻烦,优缺点与Servers控件相同。d.使用CreateOleObject将启动Word,然后以Ole方式对Word进行控制。本办法是使用以CreateOleObjects方式调用Word,实际上还是Ole,但是这种方式能够真正做到完全控制Word文件,能够使用Word的所有属性,包括自己编写的VBA宏代码。与Servers控件和com技术相比,本方法能够真正地使用Word的各种属性,和在VBA中编写自己的代码基本一样,可以缺省的代码也不需要使用。本方式启动的Word与Delphi程序分属两个窗体。缺点是使用本方法没有Delphi代码提示,所有异常处理均需要自己编写,可能编写时探索性知识比较多。三、Word宏编辑器Word能够真正地进行VBA代码的编辑,可以编写窗体、函数。进入Word宏编辑器的方法:工具->宏->Visual Basic编辑器,可进入Visual Basic编辑器界面。Word的Visual Basic编辑器界面和真正的Visual Basic编辑器基本相同,在此不再向详述。在VBA代码中,可以添加用户窗体、模块、类模块。用户窗体、模块、类模块的概念和Visual Basic完全相同。注释也与Visual Basic完全相同。可以将光标停留在窗体、模块的任何一个子程序上,直接按“F5”运行当前子程序。四、Word的宏的概述Word充分地将文档编辑和VB结合起来,真正地实现文档的自动化。使用Word编程,类似于使用Visual Basic,所不同的是,在Word中,能够直接运行某一个子程序,直接看见结果,Word的宏,只能解释运行,而Visual Basic,现在已经能够编写成真正的机器码,从代码的保护上来说,应该尽可能地减少Word的VBA代码数量,尤其是关键的代码。VBA宏,可分成四种:1、 和命令名相同的宏如FileSave,FileOpen,如果在VBA代码中包含与Word同名的函数,则直接执行这些VBA代码,忽略Word本身的命令。2、 Word内特定的宏这些宏包含AutoExec(启动 Word 或加载全局模板)、AutoNew(每次新建文档时)、AutoOpen(每次打开已有文档时)、AutoClose(每次关闭文档时),AutoExit(退出 Word 或卸载全局模板时)。如果VBA代码中含有这些名称的函数,则满足相应的条件,相应代码就自动执行。3、 相应事件的VBA宏这些宏是由事件触发的宏,如Document_Close在文档关闭的时候触发事件,Document_New在新建文档的时候触发,Document_Open在打开文档的时候触发。
我这有个简单的方法而且不比很多利用数据库什么的差。
procedure TFormd.bitbtn1click(Sender: TObject);
var
exename,pname:string;
begin
exename:=ExtractFilePath(ExpandFileName('myfile.exe'));//用于提取文件路径
pname:=exename+'\documents\';
filenametmp:=label1.Caption //文件的名称设置
filenamedoc:=(pname)+filenametmp+'.doc';
if FileExists(filenamedoc) then
begin
ShellExecute(0, nil,Pchar(filenamedoc), nil, nil, SW_NORMAL);
end
else
begin
showmessage('文件不存在,请确认!');
end
end
不过我实现了对几乎所有文件格式在浏览器里面安全地打开
有兴趣的可以和我联系 [email protected]