c# read/edit accdb 宏
c# read/edit accdb macro
我正在尝试访问 Access 数据库 (accdb) 中的宏。
我尝试使用:
using Microsoft.Office.Interop.Access.Dao;
...
DBEngine dbe = new DBEngine();
Database ac = dbe.OpenDatabase(fileName);
我发现一个 container["Scripts"]
有一个 document["Macro1"]
这是我的目标。我正在努力访问文档的内容。我还质疑 Microsoft.Office.Interop.Access.Dao
是否是我想要实现的目标的最佳参考。
查看宏和模块内容的最佳方式是什么?
您可以跳过 DAO 部分,在本例中不需要。宏是特定于项目的,因此为了获得所有宏,您需要循环遍历您的项目。在我的示例中,我只有一个项目。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Access;
namespace Sandbox48
{
public class Program
{
public static void Main(string[] args)
{
Microsoft.Office.Interop.Access.Application oAccess = null;
string savePath = @"C:\macros\";
oAccess = new Microsoft.Office.Interop.Access.Application();
// Open a database in exclusive mode:
oAccess.OpenCurrentDatabase(
@"", //filepath
true //Exclusive
);
var allMacros = oAccess.CurrentProject.AllMacros;
foreach(var macro in allMacros)
{
var fullMacro = (AccessObject)macro;
Console.WriteLine(fullMacro.Name);
oAccess.SaveAsText(AcObjectType.acMacro, fullMacro.FullName, $"{savePath}{ fullMacro.Name}.txt");
}
Console.Read();
}
}
}
我正在尝试访问 Access 数据库 (accdb) 中的宏。
我尝试使用:
using Microsoft.Office.Interop.Access.Dao;
...
DBEngine dbe = new DBEngine();
Database ac = dbe.OpenDatabase(fileName);
我发现一个 container["Scripts"]
有一个 document["Macro1"]
这是我的目标。我正在努力访问文档的内容。我还质疑 Microsoft.Office.Interop.Access.Dao
是否是我想要实现的目标的最佳参考。
查看宏和模块内容的最佳方式是什么?
您可以跳过 DAO 部分,在本例中不需要。宏是特定于项目的,因此为了获得所有宏,您需要循环遍历您的项目。在我的示例中,我只有一个项目。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Access;
namespace Sandbox48
{
public class Program
{
public static void Main(string[] args)
{
Microsoft.Office.Interop.Access.Application oAccess = null;
string savePath = @"C:\macros\";
oAccess = new Microsoft.Office.Interop.Access.Application();
// Open a database in exclusive mode:
oAccess.OpenCurrentDatabase(
@"", //filepath
true //Exclusive
);
var allMacros = oAccess.CurrentProject.AllMacros;
foreach(var macro in allMacros)
{
var fullMacro = (AccessObject)macro;
Console.WriteLine(fullMacro.Name);
oAccess.SaveAsText(AcObjectType.acMacro, fullMacro.FullName, $"{savePath}{ fullMacro.Name}.txt");
}
Console.Read();
}
}
}