通过 C# 检查 MS Access 报告中现有标签的宽度

Posted

技术标签:

【中文标题】通过 C# 检查 MS Access 报告中现有标签的宽度【英文标题】:checking width of existing label in MS Access report through C# 【发布时间】:2013-09-12 17:16:01 【问题描述】:

我在 MS Access 2013 中创建了报告,其中包含标签、文本框等控件。 我想在 C# .net 中访问此控件以检查这些控件的宽度、颜色属性。 我设法找到了报告,但在该报告中找不到控件。 我该怎么做? 注释的代码是我尝试过但没有得到结果的代码。

public bool CheckReport(AccessEntity acEntity, ACCESS.Application app) 
 
     try 
      
    ACCESS.AllReports report =(ACCESS.AllReports)app.CurrentProject.AllReports; 
    ACCESS.Controls objcntrls=null; 
    ACCESS.Section DetailSec; string strval;


    //ACCESS.Report r = (ACCESS.Report)app.CurrentProject.AllReports[acEntity.Data];
                //string strCap = (string)((dynamic)app.Reports[0]).Controls[acEntity.Rows].Caption;
                //ACCESS.Report r = (ACCESS.Report)app.CurrentProject.AllReports[0];
                //DetailSec = (ACCESS.Section)app.Reports[acEntity.Data].Section[0];
                //objcntrls = (ACCESS.Controls)app.Reports[acEntity.Data].Controls;

    string strwidth = objcntrls[acEntity.Field].Width.ToString();
                strval = RemoveSpace(acEntity.PropertyValue);
                    if (strwidth == strval)
                    
                           return true;
                    
       
             catch (System.Exception ex)
      
   return false;
        

【问题讨论】:

【参考方案1】:

我的 Access 数据库包含一个名为 Report1 的报表,该报表有一个名为 Label0 的标签,其宽度定义为 1"。当我运行以下 C# 代码时,它会显示

报表“Report1”中的控件“Label0”的 .Width 值为 1440

代码是

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AccessOleAuto

    class Program
    
        static void Main(string[] args)
        
            string reportName = "Report1";
            string controlName = "Label0";
            //
            // Note: This project has the following COM reference defined:
            //
            // Microsoft Access 14.0 Object Library
            //
            var accessApp = new Microsoft.Office.Interop.Access.Application();
            accessApp.OpenCurrentDatabase(@"C:\__tmp\testData.accdb");
            accessApp.DoCmd.OpenReport(reportName, Microsoft.Office.Interop.Access.AcView.acViewDesign);
            Microsoft.Office.Interop.Access.Report rpt = accessApp.Reports[reportName];

            int ctlWidth = rpt.Controls[controlName].Width;
            Console.WriteLine("control \"" + controlName + "\" in report \"" + reportName + "\" has a .Width value of " + ctlWidth);

            accessApp.DoCmd.Close(Microsoft.Office.Interop.Access.AcObjectType.acReport, reportName, Microsoft.Office.Interop.Access.AcCloseSave.acSaveNo);
            accessApp.Quit();

            // wait for a keypress before terminating
            Console.ReadKey();
        
    

【讨论】:

在同一类型的报告中,我想将报告的页面布局设置为纵向,并希望在代码中检查 lyout。但不使用像 app.Reports[acEntity.Data].Printer.Orientation 这样的打印机方法.ToString()。知道我该怎么做吗?

以上是关于通过 C# 检查 MS Access 报告中现有标签的宽度的主要内容,如果未能解决你的问题,请参考以下文章

将 MS Access 报告导入 C#

MS Access:突出显示 MS Access 报告中的特定字段

在 Visual Studio 2013 中使用 MS Access (C#) 生成发票

在 C# 中使用 MS Access 查找字段

MS Access - 通过取消报告创建的“幻影”进程

通过 VBA 自动使用查询从 Ms Access 2007 生成报告