我正想做个用ole嵌入word的ActiveX控件,哪为高手能不能给个具体的例子,谢谢!

解决方案 »

  1.   

    希望对你有帮助
    在VB中操纵OLE服务器应用程序
    OLE自动化是不同应用程序之间进行通讯的一个标准。OLE自动化的工作方式是:通讯被动方(OLE服务器)应用程序向通讯主动方(OLE客户机)应用程序提供一个以上可供其调用的OLE自动化对象类型,OLE客户机通过引用这些对象实现对OLE服务器的调用,然后通过设置对象的属性和使用对象的方法操纵OLE服务器应用程序,完成两者之间的通讯。 Visual Basic是一个完全支持OLE自动化的应用程序开发工具。使用VB,既可以编制做为OLE服务器的应用程序,也可以编制作为OLE客户机的应用程序。MS Word 6.0是一个不完全支持OLE自动化的应用软件,它只能作为OLE服务器供其它应用程序调用。本文将以一个VB应用程序通过OLE自动化操纵MS Word 6.0的实例,具体描述在VB中操纵OLE服务器应用程序的方法。 在VB代码中调用OLE服务器的方法如下:控件类型 属性 属性值 Data Control DataBaseNameName C:\VB\BIBLIO.MDBData1 RecordSource Authors DBGrid ControlCommandButton Control DataSource Data1 Name cmdReport Caption 生成报表 CommandButton Control Name cmdExit Caption 退出 ⑴声明一个对象变量。如:Dim MS—WORD As Object ⑵根据OLE服务器提供的对象类型,使用CreateObject函数创建一个对象,并由Set语句将该对象赋予对象变量。 CreateObject函数的语法如下: CreateObject(class) 函数参数class的格式为:appname.objecttype appname是提供对象的应用程序的名称,如:Word objecttype是欲创建的对象的类,如:Basic MS Word 6.0为OLE客户机应用程序提供了一个类型为“basic”的对象,VB可以使用该对象类型,实现对Word的调用。具体语句如下: Set MS—WORD = CreateObject(″Word.Basic″) ⑶通过设置对象的属性和使用对象的方法,实现对OLE服务器的操纵。 对象类型“basic”采用Word宏语言WordBasic的大多数语句和函数作为它的方法。也就是说,一旦在VB中创建了一个“basic”对象,就可以通过该对象使用大多数WordBasic语句或函数,从而可以近乎完美地操纵Word或Word文档。例如,下列语句在VB代码中使用WordBasic的FileNewDefault语句创建一个Word新文档: MS—WORD.FileNewDefault ⑷调用结束后,使用关键字Nothing,释放该变量占用的资源。如:Set MS—WORD = Nothing 实例 本例将使用VB编写一个简单的数据库应用程序。该程序从数据库中取出数据,然后通过OLE自动化将这些数据输入至Word,并按照Word的排版格式编排成一个表格。例中使用的数据库是VB自含的BILIO.MDB数据库,数据检索结果取自Authors数据表。本例稍加改动,即可作为数据库应用程序的报表生成功能模块使用。 首先,创建一个名为Form1的窗体,设置其Caption 属性为“OLE自动化演示”。然后在该窗体中加入四个控件并设置有关属性,具体如下: 完成上述工作后,按F5运行的屏幕布局应如下图示。 接着需要编写VB代码来实现与Word的连接。本实例的代码清单如下(注:代码中的斜体部分是WordBasic宏语言的语句,这些语句的使用方法请参阅WordBasic宏语言有关资料): ⑴在Form1的General Declarations部分声明窗体级全局变量和常量。 Dim MS—WORD As Object '声明一个对象变量 Const MaxCols = 5 '声明一个用于标明当前数据记录集中字段个数的常量。在本例中字段个数为5 ⑵创建一个子例程InsertTableIntoMS—Word(),该子例程使用WordBasic宏语言在Word 6.0中制作一个表格,并将当前数据记录集中的数据依次插入表格单元。 Sub InsertTableIntoMS—Word() Dim i As Integer, j As Integer, Col As Integer, Row As Integer Dim CellContent As String Me.Hide Col = MaxCols Row = Data1.Recordset.RecordCount MS—WORD.FileNewDefault MS—WORD.MsgBox ″正在建立报表,请稍候…″, ″″, -1 MS—WORD.LeftPara MS—WORD.ScreenUpdating 0 MS—WORD.TableInsertTable , Col, Row, , , 16, 167 MS—WORD.StartOfDocument Data1.Recordset.MoveFirst For i = 1 To MaxCols CellContent$ = Data1.Recordset.Fields(i - 1).Name MS—WORD.Insert CellContent$ MS—WORD.NextCell Next i Do For i = 1 To MaxCols If IsNull(Data1.Recordset.Fields(i - 1).Value) Then CellContent$ = ″″ Else CellContent$ = Data1.Recordset.Fields(i - 1).Value End If MS—WORD.Insert CellContent$ MS—WORD.NextCell Next i Data1.Recordset.MoveNext Loop Until Data1.Recordset.EOF = True MS—WORD.TableDeleteRow MS—WORD.StartOfDocument MS—WORD.TableSelectRow MS—WORD.TableHeadings 1 MS—WORD.CenterPara MS—WORD.StartOfDocument MS—WORD.ScreenRefresh MS—WORD.ScreenUpdating 1 MS—WORD.MsgBox ″结束″, ″″, -1 Me.Show End Sub ⑶命令按钮控件cmdReport的鼠标单击事件代码 Private Sub cmdReport—Click() Dim Response Screen.MousePointer = 11 Set MS—WORD = CreateObject(″Word.Basic″) MS—WORD.AppActivate ″Microsoft Word″, 1 Call InsertTableIntoMS—Word Screen.MousePointer = 0 End Sub ⑷命令按钮控件cmdExit的鼠标单击事件代码 Private Sub cmdExit—Click() Set MS—WORD = Nothing Unload Me End Sub 几点说明 ①在本程序运行之前,Word 6.0必须已经成功安装,否则系统将产生一个VB可捕获的错误。Word 6.0的表格列不能超过31列,否则系统将产生一个VB可捕获的错误。读者可以在代码中加入错误处理代码以处理这些错误。 ②若本程序运行时Word尚未运行,OLE自动化将试图启动它。因此程序代码中不必包括一条分开的指令来启动Word。若Word是由VB应用程序启动的,那么程序结束时Word将自动关闭;否则,Word将继续运行。 ③本实例使用的大部分WordBasic语句都与Word文档的插入点有关,如果在本程序运行过程中人为地移动了插入点,则有可能导致表格的混乱和错误。为了避免这种情况发生,本程序在执行插入操作之前使用ScreenUpdating语句将Word屏幕更新关闭,使用户在执行插入操作时不能移动插入点。 从上述实例可以看到,通过OLE自动化,使我们在开发新的应用程序时可以“借用”现成的应用程序的部分或全部功能,从而大大地减轻开发的工作量,缩短开发周期,使开发工作事半功倍。这就是OLE自动化带给开发人员的好处。
      

  2.   

    老兄,这个帖子我也看过,不过没用,我现在能实现在ActiveX中能打开word,但是不知怎样才能使其在ole容器中运行,不知道word能不能在activeX中的容器中运行,为什么没有人关注呢?其实很多人都做过这方面的东西,好像很多人不愿技术共享阿!!!!!!!
      

  3.   

    利用Microsoft Office产品中的Word或Excel担当应用程序的数据输入、输出接口,可以实现复杂的输入界面和输出界面的设计。OLE可以使基于Windows的应用程序之间能够互相协作,实现系统集成,因此,我们就可以在VB中使用OLE来显示和控制其他应用程序的数据交换。  本文综合这些软件的特点,提出下列应用程序输入和输出功能模块的开发模式。其数  
    据流程框图如图所示。
      设计模板文件  首先在Excel或Word中根据输入和输出界面的要求,设计好应用程序的输入界面和输出报表模板文件,文件中应包括框架、表格线的大小和单元格的样式,即设计好所有单元格的值和格式,并且活动数据项中只含格式而不含模板数据,最后存盘到适当位置。  对OLE对象的连接  下面以Excel作为控制对象实例,来说明在VB中通过OLE链接完成数据输入、输出的操作步骤:  1、 引用Microsoft Excel类型库(对于OLE自动化对象,该步骤可省略)。从[工程]菜单中选择[引用]菜单项。在可引用列表框中选择[Microsoft Excel8.0 Object Library]项。最后[确定]即可  2、 声明显示OLE对象数据类型及其变量:  方法1:声明作为一个普通OLE对象  public ExcelApp As object  方法2:声明作为一个Excel应用程序  public ExcelApp As Excel.Application  3、 创建OLE对象新实例或指定为特定的对象,获取Excel的控制句柄。我们通过三种方法来实现:  方法1:Set ExcelObj = CreateObject("Excel.Application")  方法2:Set ExcelObj = CreateObject("Excel.Application")  方法3:Set ExcelObj = GetObject(app.path+"\ template \ templ.xls")  4、 设置OLE对象的Visible属性,使其成为前台程序。  方法1: ExcelObj.Application.Visible = True  方法2: ExcelApp.Visible = True  应用OLE  打开前面在Excel中创建的模板文件templ.xls:  ExcelObj.Workbooks.Open (app.payh+"\ template \ templ.xls")。  如果是新建则采用ADD方法:  ExcelObj.Workbooks.ADD (app.path+"\"+DestinationFileName)  如果前面是通过GetObject函数引用一个特定的对象,则该步骤取消。  编写代码  1、完成数据的存取或格式控制  '把一个Access数据库表thePrintTable数据输出到ExcelObj对应单元格式中:  thePrintTable.MoveFirst  ExcelObj.Range ( "E3" ).Value = thePrintTable.Fields (0 )  ExcelObj.Range ( "F3" ).Value = ( thePrintTable.Fields (1 ) +thePrintTable.Fields (2 ) ) /4  '直接输出到单元格  ExcelObj.Range ("B2" ).Value = "VB输入输出界面开发模式"  ExcelObj.Range ( "E4" ).Value = 2000  '调整Excel行高的语句  ExcelObj.Rows ( "5" ).RowHeight = 40  有关其他功能和格式控制的命令可以借助Excel [工具]中的[宏]功能获得。  2、输出报表  存盘:ExcelObj.ActiveWorkbook.Save。  另存为:ExcelObj.ActiveWorkbook.SaveAs app.path+"\"+ destinationFileName。  打印预览:ExcelObj.ActiveWorkbook.PrintPreview。  打印:ExcelObj.ActiveWorkbook.print  3、交还Excel控制语句,释放对象  Set ExcelObj = Nothing 或 Set ExcelApp = Nothing 
      

  4.   

    基本上没有用
    因为顶楼的是想做成ocx
    但是ole不能用在ocx中
      

  5.   

    而且ole嵌入word,根本不能显示多页,编辑也成问题
    这个想法行不通