9

さて、自動生成されたメインのアドイン(添付ファイル 1 ) とリボン(添付ファイル 2 ) があり、そのリボンから現在アクティブな Excel シートにアクセスしたいと思います。しかしSystem.Windows.Forms.Application、 の定義は含まれていませんActiveSheet

添付資料 1:

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



}
}

添付資料 2:

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.Contextパラメータからを取得する必要がありRibbonControlEventArgsます。このコンテキストは を表します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 に答える