MSOffice小知识:基本框架

原创 2006年05月26日 20:51:00

Author:水如烟

在前面说过,OFFICE(这里指Excel、Word、Access)类似处甚多,为组织方面,做一个基本框架还是必要的。
因为我主要的是为了以后“讲述”各自的特有对象方便,而不是真正的用在专业程序集方面,就当做是练习所用吧,仅作参考。
如下图:

 其中SR是读取资源用的,在我的BLOG上有相关代码,在此不列出来了。

ComobjReleaseMethod.VB(com对象的释放)

Namespace uOffice
    
Friend Class ComObjReleaseMethod

        
Friend Shared Sub Invoke(ByVal comObj As ObjectByVal methodName As StringByVal parameters() As Object)
            
Dim mMethod As Reflection.MethodInfo = comObj.GetType.GetMethod(methodName)
            mMethod.Invoke(comObj, parameters)
        
End Sub

        
Friend Shared Sub ReleaseComObject(ByVal comObj As Object)
            System.Runtime.InteropServices.Marshal.ReleaseComObject(comObj)
            comObj 
= Nothing
        
End Sub

        
Friend Shared Sub KillProcess(ByVal comObjProcessName As StringByVal beforeProcessStartTime As DateByVal afterProcessStartTime As Date)

            
Dim mProcessList As Process()
            
Dim mProcessStartTime As Date

            mProcessList 
= Process.GetProcessesByName(comObjProcessName)

            
For Each tmpProcess As Process In mProcessList
                mProcessStartTime 
= tmpProcess.StartTime
                
If mProcessStartTime.CompareTo(beforeProcessStartTime) > 0 AndAlso mProcessStartTime.CompareTo(afterProcessStartTime) < 0 Then
                    tmpProcess.Kill()
                
End If
            
Next

        
End Sub

        
Friend Shared Sub KillProcess(ByVal comObjProcessName As String)

            
Dim mProcessList As Process()

            mProcessList 
= Process.GetProcessesByName(comObjProcessName)

            
For Each tmpProcess As Process In mProcessList
                tmpProcess.Kill()
            
Next

        
End Sub

    
End Class
End Namespace


ApplicationEnum.VB (Office三个应用对象)

Namespace uOffice
    
Friend Enum ApplicationEnum
        Access
        Excel
        Word
    
End Enum
End Namespace


ApplicationBase.VB(Office三个对象的基类)

Option Strict Off
Namespace uOffice
    
Public MustInherit Class ApplicationBase
        
Implements IDisposable

        
Friend gOfficeApplication As ApplicationEnum
        
Protected gApplicationObject As Object

        
Private gBeforeProcessStartTime As Date
        
Private gAfterProcessStartTime As Date

        
Protected Sub CreateInstance()
            gBeforeProcessStartTime 
= Now
            
Select Case gOfficeApplication
                
Case ApplicationEnum.Access
                    gApplicationObject 
= CreateObject(SR.GetString("Office_Application_Access"))
                
Case ApplicationEnum.Excel
                    gApplicationObject 
= CreateObject(SR.GetString("Office_Application_Excel"))
                
Case ApplicationEnum.Word
                    gApplicationObject 
= CreateObject(SR.GetString("Office_Application_Word"))
            
End Select
            gAfterProcessStartTime 
= Now
        
End Sub

        
''' <summary>
        ''' 退出主进程
        ''' </summary>
        Public Sub Quit()
            
'置回默认设置,如Excel.DisplayAlerts = True
            ResetDefaultPropertiesBeforeApplicationRelease()
            
'释放其它对象,如Excel.Worksheets
            RealseInternalComObjectsBeforeApplicationRelease()
            
'释放主进程,如Excel
            Application_Quit()
            
'保证完全退出
            ApplicationRelease()
        
End Sub

        
''' <summary>
        ''' 退出其它Com对象
        ''' </summary>
        Protected MustOverride Sub RealseInternalComObjectsBeforeApplicationRelease()

        
Protected Overridable Sub Application_Quit()
            gApplicationObject.Quit()
        
End Sub

        
''' <summary>
        ''' 退出OfficeApplication进程
        ''' </summary>
        Private Sub ApplicationRelease()
            ComObjReleaseMethod.ReleaseComObject(gApplicationObject)
            
Select Case gOfficeApplication
                
Case ApplicationEnum.Access
                    ComObjReleaseMethod.KillProcess(SR.GetString(
"Office_ProcessName_Access"), gBeforeProcessStartTime, gAfterProcessStartTime)
                
Case ApplicationEnum.Excel
                    ComObjReleaseMethod.KillProcess(SR.GetString(
"Office_ProcessName_Excel"), gBeforeProcessStartTime, gAfterProcessStartTime)
                
Case ApplicationEnum.Word
                    ComObjReleaseMethod.KillProcess(SR.GetString(
"Office_ProcessName_Word"), gBeforeProcessStartTime, gAfterProcessStartTime)
            
End Select
        
End Sub

        
''' <summary>
        ''' 保存默认设置
        ''' </summary>
        Protected MustOverride Sub SaveDefaultPropertiesWhenApplicationInitialize()

        
''' <summary>
        ''' 置回默认设置
        ''' </summary>
        Protected MustOverride Sub ResetDefaultPropertiesBeforeApplicationRelease()

        
'///以下为实现IDisposable接口IDE自动创建的代码
        Private disposedValue As Boolean = False        ' To detect redundant calls

        
' IDisposable
        Protected Overridable Sub Dispose(ByVal disposing As Boolean)
            
If Not Me.disposedValue Then
                
If disposing Then
                    
' TODO: free unmanaged resources when explicitly called
                    Quit()
                
End If

                
' TODO: free shared unmanaged resources
            End If
            
Me.disposedValue = True
        
End Sub

#Region " IDisposable Support "
        
' This code added by Visual Basic to correctly implement the disposable pattern.
        Public Sub Dispose() Implements IDisposable.Dispose
            
' Do not change this code.  Put cleanup code in Dispose(ByVal disposing As Boolean) above.
            Dispose(True)
            GC.SuppressFinalize(
Me)
        
End Sub
#End Region

    
End Class
End Namespace


ApplicationBaseCommon.VB(同上,Partial,只是分列出来,列举相同的函数或属性)

Option Strict Off
'//通用方法及属性
Namespace uOffice
    Partial 
Public Class ApplicationBase

        
Public Sub SetVisible(ByVal visible As Boolean)
            
Me.gApplicationObject.Visible = visible
        
End Sub

        
Public ReadOnly Property Version() As String
            
Get
                
Return Me.gApplicationObject.Version
            
End Get
        
End Property

    
End Class
End Namespace


实现了基类的,有待充实的三个对象:
AccessApplication.VB

Namespace uOffice
    
Public Class AccessApplication
        
Inherits ApplicationBase

        
Protected Overrides Sub SaveDefaultPropertiesWhenApplicationInitialize()

        
End Sub

        
Protected Overrides Sub ResetDefaultPropertiesBeforeApplicationRelease()

        
End Sub

        
Protected Overrides Sub RealseInternalComObjectsBeforeApplicationRelease()

        
End Sub

        
Sub New()
            
Me.gOfficeApplication = ApplicationEnum.Access
            
Me.CreateInstance()
        
End Sub

        
'编码时参考,最后将置为 As Object
        Public ReadOnly Property CurrentApplication() As Microsoft.Office.Interop.Access.Application 'As Object
            Get
                
Return DirectCast(Me.gApplicationObject, Microsoft.Office.Interop.Access.Application) 'Return Me.gApplicationObject
            End Get
        
End Property

    
End Class
End Namespace


ExcelApplication.VB

Namespace uOffice
    
Public Class ExcelApplication
        
Inherits ApplicationBase

        
Protected Overrides Sub SaveDefaultPropertiesWhenApplicationInitialize()

        
End Sub

        
Protected Overrides Sub ResetDefaultPropertiesBeforeApplicationRelease()

        
End Sub

        
Protected Overrides Sub RealseInternalComObjectsBeforeApplicationRelease()

        
End Sub

        
Sub New()
            
Me.gOfficeApplication = ApplicationEnum.Excel
            
Me.CreateInstance()
        
End Sub

        
'编码时参考,最后将置为 As Object
        Public ReadOnly Property CurrentApplication() As Microsoft.Office.Interop.Excel.Application 'As Object
            Get
                
Return DirectCast(Me.gApplicationObject, Microsoft.Office.Interop.Excel.Application) 'Return Me.gApplicationObject
            End Get
        
End Property

    
End Class
End Namespace


WordApplication.VB

Namespace uOffice
    
Public Class WordApplication
        
Inherits ApplicationBase

        
Protected Overrides Sub SaveDefaultPropertiesWhenApplicationInitialize()

        
End Sub

        
Protected Overrides Sub ResetDefaultPropertiesBeforeApplicationRelease()

        
End Sub

        
Protected Overrides Sub RealseInternalComObjectsBeforeApplicationRelease()

        
End Sub

        
Sub New()
            
Me.gOfficeApplication = ApplicationEnum.Word
            
Me.CreateInstance()
        
End Sub

        
'编码时参考,最后将置为 As Object
        Public ReadOnly Property CurrentApplication() As Microsoft.Office.Interop.Word.Application 'As Object
            Get
                
Return DirectCast(Me.gApplicationObject, Microsoft.Office.Interop.Word.Application) 'Return Me.gApplicationObject
            End Get
        
End Property
    
End Class
End Namespace


在后面的“文章”中,将是对上面三个对象的“关注”功能进行实现。只实现我认为关注的,全部列出来是不现实的。
现在可以测试看看:

    Dim office As LzmTW.uOffice.ApplicationBase
    
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        office.SetVisible(
True)
        Console.WriteLine(office.Version)
    
End Sub

    
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        office.SetVisible(
False)
    
End Sub

    
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        office.Dispose()
    
End Sub

    
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        office 
= New LzmTW.uOffice.WordApplication
    
End Sub



初始工程项目下载

因为是一写了代码就贴的,如有错误在后面更正.请谅

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

MVC框架的基本知识

Spring boot 框架实用技巧(一)了解基本知识

实战spring boot 系列的教程,这个教程是我总结出来的精髓,希望能够帮上想学习之人。

【工作日志】0005学习jQuery框架基本语法和JSON的知识

在我还没入程序员这行的时候,听学长说,真正出来工作了,你就慢慢有对这些概念的了……

OSGI基本知识及其开源框架

OSGI简介        OSGI (Open Service Gateway Initiative)联盟成立于1999 年,它是一个非盈利的国际组织,旨在建立一个开放的服务规范,为通过网络向...

HTMl基本知识点——基本框架

HTML标记 用于描述网页内容的标记性语言【对网页内容进行结构化处理】将内容放置于适合的标记内 HTML标记类型:单标记和双标记 一、单标记 (1) 单一型,无属性值。如 (2)单一性,有属...
  • fpxty
  • fpxty
  • 2017-04-12 20:42
  • 172

hibernate框架一之基本知识及编写一个基本的项目

session/actionQueue/insertions/elementData是保存对象在session管理器的状态:如果一个对象存在则该对象在这个elementData对象中有值,如果不在se...

Aurora — 一个在 MSOffice 内输入 LaTeX 公式的很好用插件

工具名称:Aurora2x  (下载) 压缩包内有详细的安装说明。 刚才测试了一下,确实能够在 Office 02~03 下(2007没有测试)排版一些标准和非标准(指个人习惯)的数学公式...

Aurora — 一个在 MSOffice 内输入 LaTeX 公式的很好用插件

工具名称:Aurora2x  (下载)(主页) 压缩包内有详细的安装说明。 刚才测试了一下,确实能够在 Office 02~03 下(2007没有测试)排版一些标准和非标准(指个人习惯)的...
  • zd0303
  • zd0303
  • 2012-10-11 22:54
  • 2702

面向对象的基本知识

  • 2016-11-23 00:16
  • 3.82MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)