在 VSTO Excel 加载项中选择特定的 sheet
Selecting a specific sheet in VSTO Excel Add-In
我正在尝试使用我的 excel 加载项 select 特定的 sheet(按名称或索引),但无济于事。
我的插件文件 ThisAddIn.cs
有:
public Excel.Workbook GetActiveWorkbook()
{
return (Excel.Workbook)Application.ActiveWorkbook;
}
我的 Ribbon1.cs
有:
namespace Test3
{
public partial class Ribbon1
{
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
Debug.WriteLine("Hello");
Workbook currentwb = Globals.ThisAddIn.GetActiveWorkbook();
Worksheet scratch = currentwb.Worksheets.Item[1] as Worksheet; // Error blocks here
if (scratch == null)
return;
// Worksheet scratch = currentwb.Worksheets["Sheets1"];
scratch.Range["A1"].Value = "Hello";
}
}
}
但是我得到了 System.NullReferenceException: 'Object reference not set to an instance of an object.'
我是 c# 的新手(来自 Python),我很困惑为什么这不起作用。任何帮助将不胜感激。
问题是我试图在加载 Workbook
实例之前加载它。换句话说,试图抢占 Ribbon Load
中的实例还为时过早。在 ButtonClick
事件上抓取实例工作正常!
尝试
Excel.Application ExApp = Globals.ThisAddIn.Application as Excel.Application;
Worksheet sheet = Globals.Factory.GetVstoObject(ExApp.ActiveWorkbook.Worksheets[1]);
Worksheet vsheet = Globals.Factory.GetVstoObject(ExApp.ActiveWorkbook.Worksheets[2]);
sheet.Cells[1, 1] = "A1";
vsheet.Cells[1, 1] = "A1 from second sheet";
我正在尝试使用我的 excel 加载项 select 特定的 sheet(按名称或索引),但无济于事。
我的插件文件 ThisAddIn.cs
有:
public Excel.Workbook GetActiveWorkbook()
{
return (Excel.Workbook)Application.ActiveWorkbook;
}
我的 Ribbon1.cs
有:
namespace Test3
{
public partial class Ribbon1
{
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
Debug.WriteLine("Hello");
Workbook currentwb = Globals.ThisAddIn.GetActiveWorkbook();
Worksheet scratch = currentwb.Worksheets.Item[1] as Worksheet; // Error blocks here
if (scratch == null)
return;
// Worksheet scratch = currentwb.Worksheets["Sheets1"];
scratch.Range["A1"].Value = "Hello";
}
}
}
但是我得到了 System.NullReferenceException: 'Object reference not set to an instance of an object.'
我是 c# 的新手(来自 Python),我很困惑为什么这不起作用。任何帮助将不胜感激。
问题是我试图在加载 Workbook
实例之前加载它。换句话说,试图抢占 Ribbon Load
中的实例还为时过早。在 ButtonClick
事件上抓取实例工作正常!
尝试
Excel.Application ExApp = Globals.ThisAddIn.Application as Excel.Application;
Worksheet sheet = Globals.Factory.GetVstoObject(ExApp.ActiveWorkbook.Worksheets[1]);
Worksheet vsheet = Globals.Factory.GetVstoObject(ExApp.ActiveWorkbook.Worksheets[2]);
sheet.Cells[1, 1] = "A1";
vsheet.Cells[1, 1] = "A1 from second sheet";