如何使用C#向活动工作簿的Excel单元格添加值?我是VSTO C#
的新手,无法找到适合我的解决方案......
这是我的代码(来自此问题Write to cell in excel using c#):
using Excel = Microsoft.Office.Interop.Excel;
namespace ExcelSDRAddIn
{
public partial class UserControlSDR : UserControl
{
public UserControlSDR()
{
InitializeComponent();
}
private void btnTemplate_Click(object sender, EventArgs e)
{
Excel.Worksheet ws = (Excel.Worksheet)(sender as Workbook).ActiveSheet;
ws.Cells[1, 1] = "Value";
}
}
}
运行后,我在此行Excel.Worksheet ws = (Excel.Worksheet)(sender as Workbook).ActiveSheet;
上收到以下异常:
ExcelSDRAddIn.dll中发生了'System.NullReferenceException'类型的异常,但未在用户代码中处理
附加信息:未将对象引用设置为对象的实例。
也试过这个:
dynamic excelType = Type.GetTypeFromProgID("Excel.Application");
excelType.Visible = true;
excelType.Workbooks.Add();
dynamic workSheet = excelType.ActiveSheet;
workSheet.Cells[1, 1] = "Names";
workSheet.Cells[1, 2] = "Age";
并返回:
System.Core.dll中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”类型的异常,但未在用户代码中处理
其他信息:'System.Reflection.TypeInfo'不包含'Visible'的定义
另一个失败的例子:
Microsoft.Office.Interop.Excel.Application oXL;
Microsoft.Office.Interop.Excel._Workbook oWB;
Microsoft.Office.Interop.Excel._Worksheet oSheet;
...
var Excel = new Excel.Application();
oXL = new Microsoft.Office.Interop.Excel.Application();
oWB = oXL.ActiveWorkbook;
oSheet = oWB.ActiveSheet;
oSheet.Cells[1, 1] = "Value";
答案 0 :(得分:3)
要访问方案中的工作簿,请使用:
Globals.ThisAddIn.Application.Workbooks...
MSDN参考:Programming VSTO Add-Ins
以下代码示例演示如何使用“应用程序”字段在Microsoft Office Excel的VSTO加载项中创建新工作簿。此示例旨在从ThisAddIn类运行。
Excel.Workbook newWorkbook = this.Application.Workbooks.Add(System.Type.Missing);
要从ThisAddIn类外部执行相同的操作,请使用Globals对象访问ThisAddIn类。有关Globals对象的详细信息,请参阅Office项目中对对象的全局访问。
Excel.Workbook newWorkbook = Globals.ThisAddIn.Application.Workbooks.Add(System.Type.Missing);
编辑:您需要使用此代码来获取活动工作表
Excel.Worksheet ws = (Excel.Worksheet)Globals.ThisAddin.Application.ActiveSheet;
答案 1 :(得分:0)
从您的方法名称btnTemplate_Click
我打赌您使用按钮来调用此功能。因此,在这种情况下,发件人是Button而不是Workbook
。当您尝试将发件人撤消到Workbook
时,您将获得空,并且在尝试访问NullReferenceException
媒体资源时获得ActiveSheet
。
请再次阅读您的链接参考中的问题。它声明:
I created a visual studio excel workbook project which contains ThisWorkbook class
我不确定该类是怎么样的,但我认为这是方法private void ThisWorkbook_Startup(object sender, System.EventArgs e)
应该挂钩某种`Startup事件的地方。