使用 Interop.Access 在 Access 中获取页眉和页脚的文本

Posted

技术标签:

【中文标题】使用 Interop.Access 在 Access 中获取页眉和页脚的文本【英文标题】:Get the text of Headers and Footers in Access using Interop.Access 【发布时间】:2019-09-13 13:59:12 【问题描述】:
using AccessApi = Microsoft.Office.Interop.Access;

  foreach (AccessApi.Control control in ap.Forms[formName].Section[AccessApi.AcSection.acHeader].Controls)
    
       logger.Info(control.Name);
    

但是有了这些,我得到了控件的名称(AutoLogo 或 AutoTitle)。例如,我想获取 Title 的文本。我该怎么做?

【问题讨论】:

【参考方案1】:

最终我无法访问control.Valuecontrol.Caption 的方式是因为它不是@Unhandled Exception 所说的LabelClass 属性。所以我这样做了:

foreach (AccessApi.Control control in ap.Forms[formName].Section[AccessApi.AcSection.acHeader].Controls)

    Type t = control.GetType();
    if (t.Equals(typeof(AccessApi.LabelClass)))
    
        AccessApi.Label label = (AccessApi.Label)control;
        logger.Info(label.Caption);
    

【讨论】:

【参考方案2】:

你能试试这个方法吗?

如果表单中存在这些元素,则所有表单都将有一个详细信息部分,并且表单将具有其他部分,例如 FormHeader、FormFooter、PageHeaderSection、PageFooterSection 等。这些部分中的每一个都有一个 Controls 集合。这是一个例子:

Console.WriteLine(String.Format("The FormHeader section of form [0] contains the following controls:", formName));
foreach (Microsoft.Office.Interop.Access.Control ctl in frm.Section["FormHeader"].Controls)

    Console.WriteLine();
    Console.WriteLine(String.Format("    [0]", ctl.Name));
    Console.WriteLine(String.Format("        0", ctl.GetType()));

objAccess.DoCmd.Close(Microsoft.Office.Interop.Access.AcObjectType.acForm, formName);
objAccess.CloseCurrentDatabase();
objAccess.Quit();

【讨论】:

【参考方案3】:

这取决于您要从中读取文本的控件类型。

如果是文本框,则使用control.Value。 如果是标签,则使用control.Caption

【讨论】:

我有一个标签,但是当我写 control.Captioncontrol.Value 时,我收到一个编译错误,即“控件”不包含“标题”或“值”的定义。 如果您只是遍历本节中的所有控件,那么您可能还针对不支持任何这些属性的控件。您知道要从中读取文本的控件的名称吗?然后尽量不要循环,而是按名称访问它们。 试试这个来访问命名控件的标签怎么样:ap.Forms[formName].Controls["YourControl"].Value(用正确的控件名称交换YourControl)?这行得通吗?如果没有,这是ap.Forms[formName].Controls["YourControl"].Name 吗? ap.Forms[formName].Controls["YourControl"].Name 工作,我得到了与上面提到的control.Name 完全相同的结果。 .Value 再次不是我图书馆的成员! 好的,这意味着 API 似乎不知道这个属性。我可以假设,您将(如果可能)使用AccessApi.Label 之类的东西而不是AccessApi.Control 作为标签。

以上是关于使用 Interop.Access 在 Access 中获取页眉和页脚的文本的主要内容,如果未能解决你的问题,请参考以下文章

参考 Microsoft.Office.interop.access.dao.dll 导致错误 C#

Microsoft Access 表单和 Microsoft Windows 应用程序

Access DAO 为 Access 97 文件引发 COMException

在 .net 中保存访问文件

access 连接数据库

用于Azure B2C acces令牌的Exchange Facebook SDK acces令牌