C# 用C语言实现Windows应用程序中MsAccess的自动化#
我有一个窗口应用程序,我们正在其中自动化MsOffice(word/excel/powerpoint/access)。 我们已经为word/excel/powerpoint编写了帮助器类,现在我们正在尝试为Access编写帮助器类 *其中,我们希望将方法写入C# 用C语言实现Windows应用程序中MsAccess的自动化#,c#,asp.net,winforms,ms-access,automation,C#,Asp.net,Winforms,Ms Access,Automation,我有一个窗口应用程序,我们正在其中自动化MsOffice(word/excel/powerpoint/access)。 我们已经为word/excel/powerpoint编写了帮助器类,现在我们正在尝试为Access编写帮助器类 *其中,我们希望将方法写入 1退出应用程序(访问), 2 Evaluvate当前正在运行, 3个应用程序(访问), 4获取或创建应用程序(访问), 5运行应用程序(访问), 6关闭应用程序(访问)等 What i have tried so far: AccessH
1退出应用程序(访问),
2 Evaluvate当前正在运行, 3个应用程序(访问), 4获取或创建应用程序(访问),
5运行应用程序(访问),
6关闭应用程序(访问)等
What i have tried so far:
AccessHelper.cs
using System;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using AccessInterop = Microsoft.Office.Interop.Access;
namespace TeTec.Action.Office2013.Access
{
public static class AccessHelper
{
#region Constants
private static readonly string _accessApplicationObjectStoreKey = "AccessApplication";
#endregion
#region Private methods
private static void QuitApplication(AccessInterop.Application accessApplication)
{
if (accessApplication != null)
{
try
{
accessApplication.DoCmd.SetWarnings(false);
accessApplication.Visible = false;
accessApplication.DoCmd.Quit();
Marshal.FinalReleaseComObject(accessApplication);
accessApplication = null;
GC.Collect();
GC.WaitForPendingFinalizers();
accessApplication.DoCmd.CloseDatabase();
accessApplication.DoCmd.Quit();
}
catch (Exception)
{
//Ignore
}
}
}
private static AccessInterop.Application GetOrCreateAccessApplication(IObjectStore objectStore)
{
AccessInterop.Application accessApplication = objectStore.Retrieve<AccessInterop.Application>(_accessApplicationObjectStoreKey);
if (accessApplication == null)
{
accessApplication = new AccessInterop.Application();
objectStore.Store(_accessApplicationObjectStoreKey, accessApplication);
}
return accessApplication;
}
#endregion
#region Internal methods
internal static void Cleanup(IObjectStore objectStore, bool terminate)
{
AccessInterop.Application accessApplication = objectStore.Retrieve<AccessInterop.Application>(_accessApplicationObjectStoreKey);
if (accessApplication != null)
{
QuitApplication(accessApplication);
objectStore.Remove(_accessApplicationObjectStoreKey);
}
if (terminate)
WinUtil.TerminateProcess("access.exe", null, null, true);
}
#endregion
#region Public methods
#region Basic operation
public static bool Run(IQuestion question)
{
AccessInterop.Application accessApplication = GetOrCreateAccessApplication(question.ObjectStore);
//AccessInterop.DataAccessPage accesPage = null;
try
{
//Avoid screen flickering or unwanted alerts while initializing
accessApplication.DoCmd.Echo(false);
accessApplication.DoCmd.SetWarnings(false);
//Create a document, if one does not exist already
//if (accessApplication.catlo == 0)
// accesPage = accessApplication.DataAccessPages.a;
//Activate Word application window
//accessApplication.Visible = true;
//accessApplication.ScreenUpdating = true;
//accessApplication.DisplayAlerts = displayAlertLevel;
//accessApplication.ActiveWindow.Activate();
////Setup application main window
//if (question.WorkArea != Rectangle.Empty)
//{
// accessApplication.WindowState = AccessInterop.WdWindowState.wdWindowStateNormal;
// accessApplication.ActiveWindow.Left = question.WorkArea.Left;
// accessApplication.ActiveWindow.Top = question.WorkArea.Top;
// accessApplication.ActiveWindow.Width = question.WorkArea.Width;
//}
//else
//{
// accessApplication.WindowState = AccessInterop.WdWindowState.wdWindowStateMaximize;
//}
return true;
}
catch (Exception)
{
Cleanup(question.ObjectStore, true);
return false;
}
}
public static void Close(IQuestion question)
{
Cleanup(question.ObjectStore, false);
}
#endregion
#endregion
}
}
使用系统;
使用系统图;
使用System.IO;
使用System.Runtime.InteropServices;
使用AccessInterop=Microsoft.Office.Interop.Access;
命名空间TeTec.Action.Office2013.Access
{
公共静态类AccessHelper
{
#区域常数
私有静态只读字符串_accessApplicationObjectStoreKey=“AccessApplication”;
#端区
#区域私有方法
专用静态应用程序(AccessInterop.Application accessApplication)
{
if(accessApplication!=null)
{
尝试
{
accessApplication.DoCmd.SetWarnings(false);
accessApplication.Visible=false;
accessApplication.DoCmd.Quit();
封送处理最终EleaseComObject(accessApplication);
accessApplication=null;
GC.Collect();
GC.WaitForPendingFinalizers();
accessApplication.DoCmd.CloseDatabase();
accessApplication.DoCmd.Quit();
}
捕获(例外)
{
//忽略
}
}
}
私有静态AccessInterop.Application GetOrCreateAccessApplication(IObjectStore objectStore)
{
AccessInterop.Application accessApplication=objectStore.Retrieve(\u accessApplicationObjectStoreKey);
if(accessApplication==null)
{
accessApplication=新的AccessInterop.Application();
Store(_accessApplicationObjectStoreKey,accessApplication);
}
退货申请;
}
#端区
#区域内部方法
内部静态无效清除(IObjectStore objectStore,bool terminate)
{
AccessInterop.Application accessApplication=objectStore.Retrieve(\u accessApplicationObjectStoreKey);
if(accessApplication!=null)
{
退出应用程序(accessApplication);
objectStore.Remove(_accessApplicationObjectStoreKey);
}
如果(终止)
TerminateProcess(“access.exe”,null,null,true);
}
#端区
#区域公共方法
#区域基本操作
公共静态布尔运行(IQuestion问题)
{
AccessInterop.Application accessApplication=GetOrCreateAccessApplication(question.ObjectStore);
//AccessInterop.DataAccessPage accesPage=null;
尝试
{
//初始化时避免屏幕闪烁或不必要的警报
accessApplication.DoCmd.Echo(false);
accessApplication.DoCmd.SetWarnings(false);
//如果尚未创建文档,请创建文档
//if(accessApplication.catlo==0)
//accesPage=accessApplication.DataAccessPages.a;
//激活Word应用程序窗口
//accessApplication.Visible=true;
//accessApplication.ScreenUpdate=true;
//accessApplication.DisplayAlerts=displayAlertLevel;
//accessApplication.ActiveWindow.Activate();
////设置应用程序主窗口
//if(question.WorkArea!=矩形.空)
//{
//accessApplication.WindowsState=AccessInterop.wdWindowsState.wdWindowsStateNormal;
//accessApplication.ActiveWindow.Left=question.WorkArea.Left;
//accessApplication.ActiveWindow.Top=question.WorkArea.Top;
//accessApplication.ActiveWindow.Width=question.WorkArea.Width;
//}
//否则
//{
//accessApplication.WindowsState=AccessInterop.wdWindowsState.wdWindowsState最大化;
//}
返回true;
}
捕获(例外)
{
清理(question.ObjectStore,true);
返回false;
}
}
公共静态无效关闭(IQuestion问题)
{
清理(question.ObjectStore,false);
}
#端区
#端区
}
}
GetOrCreateApplication&CleanUpApplication不工作。所有方法均不工作
谁能帮帮我吗
谢谢你忘了提到哪里出了问题。你说“不工作”。这到底是什么意思?这些例程是否正在运行,但产生了错误的结果?他们连跑都不跑吗?它们是否运行,但有错误?不返回任何内容