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



初始工程项目下载

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

1 数据结构1----数据结构知识框架

原文链接:http://wenku.baidu.com/link?url=PvdCzxVyIx_zHnBDJrsJkPyj7vf1XoSvvWJw357lqrtEu-Vi_mogun6aMi2IsSZ...
  • wx19950101
  • wx19950101
  • 2016年10月15日 09:42
  • 270

Spring框架知识要点总结(第一天)

1.IOC容器创建的2种方式 //首先在applicationContext.xml配置文件中写 //创建方式一: //Spring把所有的配置文件都当做资源 ClassPathResourc...
  • qq_1017097573
  • qq_1017097573
  • 2016年11月22日 11:57
  • 613

c++的基本框架

c++真是个神奇的东西,本人学c++也有一段时间了。现在想把所学知识整理一下,顺便与各位分享,有错误之处还望各位指点。     秉承着少说虚话,多干实事的原则,直接先上一个程序再说 #includ...
  • qq_38444801
  • qq_38444801
  • 2017年05月06日 19:29
  • 593

计算机网络基础知识和体系结构

现代社会,网络已经和水,电一样成为我们的不可或缺的日常需求了,可以说网络无处不在。作为一名用户,只需要学会如何使用网络即可,而作为一名计算机专业的学生,一名程序员有必要去深入了解其中原理。因此,本章主...
  • xy913741894
  • xy913741894
  • 2017年06月17日 21:53
  • 895

IT行业基本常识

以前读书学历史,地理的时候.经常要记哪一年发生啥事,然后世界之最,最大,最早之类的.我们一般把这当作常识. IT行业也有些这样类似的常识性知识.如果只是死死的记住这些常识,没想办法去系统化,横向纵向对...
  • weiwenhp
  • weiwenhp
  • 2013年12月10日 14:15
  • 4118

概率论与数理统计重要知识体系

概率论与数理统计 复习思路: 1.独立随机事件的概率(目标事件可能情况/总的可能情况,排列组合)(贝叶斯公式及全概率公式) 2.典型的离散分布(二项分布,几何分布,泊松分布),概率公式及其期望方...
  • cdjchuangzao
  • cdjchuangzao
  • 2016年04月09日 10:57
  • 928

知识表示之我见

人工智能课的半期考试论文,说是半期,其实和作业也相差不多,直接照原样贴过来。人工智能接触不多,没有什么理论依据,也算是个人的一点幻想了。希望如果被老师或者助教Google到这篇博客不要以为是我直接抄下...
  • sikangtina
  • sikangtina
  • 2013年04月11日 19:39
  • 982

网站知识体系

* linux(管理 应用 系统)  * nginx(原理 配置 区别)  * mysql(sql senior bak nosql(架构 data ser knowledge) +库表列索引curd...
  • learner811
  • learner811
  • 2015年09月02日 10:42
  • 690

三大框架的基础知识

三大框架的基础知识 1,hibernate的工作原理及为什么要用? (1)通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件; (2)由 ...
  • pamguangyou
  • pamguangyou
  • 2016年10月29日 16:22
  • 2310

测试的基本知识点

目录 一.知识总结... 2 1.软件工程要点... 2 1.1软件... 2 1.2软件危机... 3 1.3软件工程... 3 1.4应用软件生命周期管理... 3 2....
  • JiaMeichen
  • JiaMeichen
  • 2015年09月27日 15:55
  • 762
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MSOffice小知识:基本框架
举报原因:
原因补充:

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