9

好的,所以我得到了自动生成的主插件(附件 1),还有我的功能区附件 2),我想从该功能区访问当前活动的 Excel 表。但System.Windows.Forms.Application不包含 的定义ActiveSheet

附件一:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
using System.Windows.Forms;

namespace ExcelAddIn1
{
public partial class ThisAddIn
{
    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {

    }

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
    }

    #region VSTO generated code

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InternalStartup()
    {
        this.Startup += new System.EventHandler(ThisAddIn_Startup);
        this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
    }
    public void doStuff()
    {
       
    }
    
    #endregion



}
}

附件二:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Tools.Ribbon;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Excel;
using System.Windows.Forms;

namespace ExcelAddIn1
{
public partial class Ribbon1
{
    private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
    {

    }

    private void button1_Click(object sender, RibbonControlEventArgs e)
    {
        MessageBox.Show("Test");
        Excel.Worksheet activeWorksheet = ((Excel.Worksheet)Application.ActiveSheet);
        Excel.Range firstRow = activeWorksheet.get_Range("A1");
        firstRow.EntireRow.Insert(Excel.XlInsertShiftDirection.xlShiftDown);
        Excel.Range newFirstRow = activeWorksheet.get_Range("A1");
        newFirstRow.Value2 = "This text was added by using code";
    }
}
}
4

2 回答 2

13

您需要IRibbonControl.ContextRibbonControlEventArgs参数中获取。此上下文表示Excel.Window. 然后您可以访问活动Window.Application属性。

private void button1_Click(object sender, RibbonControlEventArgs e)
{
    Excel.Window window = e.Control.Context;
    MessageBox.Show("Test");
    Excel.Worksheet activeWorksheet = ((Excel.Worksheet)window.Application.ActiveSheet);
    Excel.Range firstRow = activeWorksheet.get_Range("A1");
    firstRow.EntireRow.Insert(Excel.XlInsertShiftDirection.xlShiftDown);
    Excel.Range newFirstRow = activeWorksheet.get_Range("A1");
    newFirstRow.Value2 = "This text was added by using code";
}
于 2012-09-19T19:08:27.560 回答
9

如果这是 VSTO Excel 加载项,也许您应该使用:

   Globals.ThisAddIn.Application.ActiveSheet

问候,约尔格

于 2014-01-03T09:20:11.293 回答