使用 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.Value
和control.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.Caption
或 control.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 应用程序