如何通过 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);
}
我对 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);
}