自定义任务窗格:如何从插件拦截 Excel 工作表的可见性变化?
Custom Task Pane: How can I intercept Excel worksheets' visibility change from the Addin?
填充有工作表的 DataGridView 及其可见性状态:
我的 Excel 插件有一个自定义任务窗格,其中包含我从打开的工作簿中填充的 DataGridView:
- 其内容为打开的Workbook的所有Sheets。
- 行是否可见取决于工作表可见性状态 (visible/hidden/SuperHidden)。
拦截工作表可见性从插件更改?
我在 Excel 工作簿中发生了 operations/tasks,用户可以根据 s/he 所做的事情 show/hide 工作表。所以,
- 我是否需要为此拦截某个工作簿事件? (如果这是建议的解决方案,我将不胜感激)
- 我是否需要在 运行 任务之后 从 Excel 调用插件的 Subroutine/function? (如果这也是您的建议,我将不胜感激)
- 但是我不喜欢使用thread,因为并不是每次都是hidden/showing,而是只在某些情况下(用户操作)。直到那时我才需要更新 DataGridView 可见工作表列表。
非常感谢您对此的 suggestions/recommendations。如果您需要更多信息,请随时告诉我,我很乐意更新此 post 或在评论中回复您。
您最好直接从您的 Excel:
调用加载项 void
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;
namespace YourSolution
{
[ComVisible(true)]
public interface IAddInUtilities
{
//You have to implement this
void YourFunctionToCall();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class AddInUtilities : IAddInUtilities
{
//Implemntation: Call this from your Excel
public void YourFunctionToCall()
{
//The Operation here ...
}
}
}
然后从你的 Excel VBA,使用这个 Sub:
Public Sub FunctionCallableInVBA()
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns("YourSolution")
Set automationObject = addIn.Object
'Call the Function your shared on the COM
automationObject.YourFunctionToCall()
Set addIn = Nothing
Set automationObject = Nothing
End Sub
这应该可以解决您的问题,避免您拼命搜索那个不存在的 hide/unhide 事件。
填充有工作表的 DataGridView 及其可见性状态:
我的 Excel 插件有一个自定义任务窗格,其中包含我从打开的工作簿中填充的 DataGridView:
- 其内容为打开的Workbook的所有Sheets。
- 行是否可见取决于工作表可见性状态 (visible/hidden/SuperHidden)。
拦截工作表可见性从插件更改?
我在 Excel 工作簿中发生了 operations/tasks,用户可以根据 s/he 所做的事情 show/hide 工作表。所以,
- 我是否需要为此拦截某个工作簿事件? (如果这是建议的解决方案,我将不胜感激)
- 我是否需要在 运行 任务之后 从 Excel 调用插件的 Subroutine/function? (如果这也是您的建议,我将不胜感激)
- 但是我不喜欢使用thread,因为并不是每次都是hidden/showing,而是只在某些情况下(用户操作)。直到那时我才需要更新 DataGridView 可见工作表列表。
非常感谢您对此的 suggestions/recommendations。如果您需要更多信息,请随时告诉我,我很乐意更新此 post 或在评论中回复您。
您最好直接从您的 Excel:
调用加载项 voidusing System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;
namespace YourSolution
{
[ComVisible(true)]
public interface IAddInUtilities
{
//You have to implement this
void YourFunctionToCall();
}
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class AddInUtilities : IAddInUtilities
{
//Implemntation: Call this from your Excel
public void YourFunctionToCall()
{
//The Operation here ...
}
}
}
然后从你的 Excel VBA,使用这个 Sub:
Public Sub FunctionCallableInVBA()
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns("YourSolution")
Set automationObject = addIn.Object
'Call the Function your shared on the COM
automationObject.YourFunctionToCall()
Set addIn = Nothing
Set automationObject = Nothing
End Sub
这应该可以解决您的问题,避免您拼命搜索那个不存在的 hide/unhide 事件。