问题触发器 Excel ActiveX 按钮来自另一个 Windows 窗体应用

Jack J Jun 24,516 信誉分 Microsoft 供应商
2024-01-30T08:41:11.91+00:00

我收到关于自动运行 Excel 宏程序的要求,但我只熟悉 Windows 窗体应用程序。我尝试过Microsoft.Office.Interop.Excel来激活按钮。它不起作用。

public bool openFileExcel(string filename)
        {
            Excel.Application _xlsm = new Excel.Application();
            Excel.Workbook _xlsB = _xlsm.Workbooks.Open(_fPath + filename);
            _xlsm.Visible = true;
            Excel.Worksheet _xlsS = _xlsB.Worksheets["Control"];
            Excel.OLEObject _oObj = _xlsS.OLEObjects("m_btnReset");
            _xlsm.AutomationSecurity = MsoAutomationSecurity.msoAutomationSecurityForceDisable;
            if (_xlsm.Ready)
            {
                try
                {
                    _oObj.Select();
                    _oObj.Activate();
                }
                catch(Exception e)
                {
                    MessageBox.Show(e.Message);
                }
                return false;
            }
            else
            {
                return false;
            }
        }

请指导我。 Note:此问题总结整理于:Problem trigger Excel ActiveX button from another Windows Forms App - Microsoft Q&A

Windows 窗体
Windows 窗体
一组用于开发图形用户界面的 .NET Framework 托管库。
114 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Hui Liu-MSFT 48,571 信誉分 Microsoft 供应商
    2024-01-30T09:35:01.3066667+00:00

    您好,根据我的测试, 您可以尝试使用属性 _oObj.Object.Value = true ; 从 Winform 应用程序触发 Excel activex 按钮。 下面是一个可以参考的代码示例。

    
    
    private void button1_Click(object sender, EventArgs e)  
            {  
                string xlFileName = Path.Combine("D:\\", "test1.xlsm");  
                var xlApp = new Excel.Application();  
                var xlWorkbook = xlApp.Workbooks.Open(xlFileName);  
                var xlSheet = xlWorkbook.Worksheets["Sheet1"] as Excel.Worksheet;  
                Excel.OLEObject _oObj = xlSheet.OLEObjects("CommandButton1");  
               _oObj.Object.Value = true ;     // This code will trigger the button  
                xlWorkbook.Save();  
                xlWorkbook.Close();  
      
                Marshal.ReleaseComObject(xlWorkbook); xlWorkbook = null;  
                Marshal.ReleaseComObject(xlApp); xlApp = null;  
      
      
            }  
    
    
    

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。 注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。