如何通过 C# 中的 ExcelDNA 访问 excel 中选择的范围?

How to access range selected in excel through ExcelDNA in C#?

我对 Excel DNA 和 C# 编程一窍不通。这一定是基本问题之一,如果它已经在 SO 上得到解答,那么如果我被指向那个方向,我会非常高兴。单击按钮时,我试图将 Excel 工作表上活动的任何范围或单元格发送到相应的 C# 函数。

这是我的控制器class。

using System;
using ExcelDna;
using Excel = Microsoft.Office.Interop.Excel;
//Other dependencies
namespace My_Prj
{
  [ComVisible(true)]
  public class RibbonController : ExcelRibbon
  {
     return @"
     <customUI xmlns='http://schemas.microsoft.com/office/2006/01/customui'>
  <ribbon>
    <tabs>
      <tab id='tab1' label='Temp Tab'>
        <group id='group1' label='Temp Group'>
          <button id='button1' label='Attach Db' onAction='OnButton1Pressed'/>
          <button id='button2' label='Detach Db' onAction='OnButton2Pressed'/>
          <button id='button3' label='Write Data'   onAction='OnButton3Pressed'/>
        </group >
      </tab>
    </tabs>
  </ribbon>
</customUI>";
 }
public void OnButton1Pressed(IRibbonControl control)
    {
        bool status = Main.Attach();
        //+control.Id
        MessageBox.Show("DB session Attach status: [" + status + "] ");
    }
    public void OnButton2Pressed(IRibbonControl control)
    {
        bool status = Main.Detach();
        MessageBox.Show("DB session Detach status: [" + status + "]");
    }
    public void OnButton3Pressed(IRibbonControl control)
    {
        // Code to access range

    }

这是我的主class。

using System;
using ExcelDna;
using Excel = Microsoft.Office.Interop.Excel;
// Other dependencies
namespace My_Prj
{
   public class Main
   {
      // Class variables
      [ExcelFunction(Category = "Main", Description = "Attach DB", Name = "Attach_DB")]
      public static bool Attach()
      {
        //Connect to DB;
        return status;
      }
      [ExcelFunction(Category = "Main", Description = "Detach DB", Name = "Detach_DB")]
      public static bool Detach()
      {
        //Disconnect from DB;
        return status;
      }
      [ExcelFunction(Category = "Main", Description = "Write Data", Name = "Write_Data")]
      public static bool WriteData(Object[,] data)
      {
        //Write data;
      }
  }
}

显然,如果我从 excel 和 select 范围调用 Write_Data 函数,我可以将数据保存在数据库中。我的目标是在 selecting excel 中的范围或单元格后单击第三个按钮,并将该数据保存在数据库中。我的代码能够处理不同的数据(一个单元格或一系列单元格)。

如果您需要任何其他信息,请告诉我。

从您的功能区事件处理程序,您可以通过 ExcelDnaUtil.Application 访问 Excel COM API,获取对活动 sheet 的引用,并获取所选范围并检查其值。

安装 ExcelDna.Interop NuGet 包以使其更容易(因此您可以获得 IntelliSense),并使用 ExcelDnaUtil.Application 实例访问 COM API.

例如

try
{
    var excelApp = (Microsoft.Office.Interop.Excel.Application)ExcelDnaUtil.Application;

    // Use excelApp to access the selected sheet, range, etc.
    // the same way you would do with VBA
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}